[libcxx-commits] [libcxx] a40bada - [libc++] Apply clang formatting to all string unit tests

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Fri Sep 1 10:39:02 PDT 2023


Author: Brendan Emery
Date: 2023-09-01T13:35:18-04:00
New Revision: a40bada91aeda276a772acfbcae6e8de26755a11

URL: https://github.com/llvm/llvm-project/commit/a40bada91aeda276a772acfbcae6e8de26755a11
DIFF: https://github.com/llvm/llvm-project/commit/a40bada91aeda276a772acfbcae6e8de26755a11.diff

LOG: [libc++] Apply clang formatting to all string unit tests

This applies clang-format to the std::string unit tests in preparation
for landing https://reviews.llvm.org/D140550.

Differential Revision: https://reviews.llvm.org/D140612

Added: 
    

Modified: 
    libcxx/test/libcxx/strings/basic.string/alignof.compile.pass.cpp
    libcxx/test/libcxx/strings/basic.string/sizeof.compile.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.access/assert.back.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.access/assert.cback.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.capacity/PR53170.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.capacity/max_size.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.cons/copy_shrunk_long.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.pop_back.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.modifiers/clear_and_shrink.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter_iter.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_char.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_iter_iter.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_size_char.pass.cpp
    libcxx/test/libcxx/strings/basic.string/string.modifiers/resize_default_initialized.pass.cpp
    libcxx/test/libcxx/strings/c.strings/constexpr.cstring.compile.pass.cpp
    libcxx/test/libcxx/strings/c.strings/constexpr_memmove.pass.cpp
    libcxx/test/libcxx/strings/string.view/assert.ctor.pointer.pass.cpp
    libcxx/test/libcxx/strings/string.view/string.view.iterators/debug.iterator-indexing.pass.cpp
    libcxx/test/std/strings/basic.string.hash/char_type_hash.verify.cpp
    libcxx/test/std/strings/basic.string.hash/enabled_hashes.pass.cpp
    libcxx/test/std/strings/basic.string.hash/strings.pass.cpp
    libcxx/test/std/strings/basic.string.literals/literal.pass.cpp
    libcxx/test/std/strings/basic.string/allocator_mismatch.verify.cpp
    libcxx/test/std/strings/basic.string/char.bad.verify.cpp
    libcxx/test/std/strings/basic.string/range_concept_conformance.compile.pass.cpp
    libcxx/test/std/strings/basic.string/string.access/at.pass.cpp
    libcxx/test/std/strings/basic.string/string.access/back.pass.cpp
    libcxx/test/std/strings/basic.string/string.access/front.pass.cpp
    libcxx/test/std/strings/basic.string/string.access/index.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/capacity.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/clear.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/empty.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/length.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/max_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/reserve.deprecated_in_cxx20.verify.cpp
    libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/resize_and_overwrite.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.explicit_instantiation.sh.cpp
    libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/size.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/alloc.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/brace_assignment.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/copy_assignment.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/default.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/dtor.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/from_range.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/from_range_deduction.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/implicit_deduction_guides.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/initializer_list.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/iter_alloc.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/iter_alloc_deduction.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/move.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/move_alloc.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/move_assignment.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/move_noexcept.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/pointer_assignment.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/size_char_alloc.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/string_view_assignment.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/string_view_deduction.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/string_view_size_size_deduction.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp
    libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp
    libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp
    libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.ends_with/ends_with.char.pass.cpp
    libcxx/test/std/strings/basic.string/string.ends_with/ends_with.ptr.pass.cpp
    libcxx/test/std/strings/basic.string/string.ends_with/ends_with.string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.iterators/begin.pass.cpp
    libcxx/test/std/strings/basic.string/string.iterators/cbegin.pass.cpp
    libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp
    libcxx/test/std/strings/basic.string/string.iterators/crbegin.pass.cpp
    libcxx/test/std/strings/basic.string/string.iterators/crend.pass.cpp
    libcxx/test/std/strings/basic.string/string.iterators/end.pass.cpp
    libcxx/test/std/strings/basic.string/string.iterators/iterator_concept_conformance.compile.pass.cpp
    libcxx/test/std/strings/basic.string/string.iterators/iterators.pass.cpp
    libcxx/test/std/strings/basic.string/string.iterators/rbegin.pass.cpp
    libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/append_range.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/size_char.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/string.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/assign_range.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/initializer_list.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/rv_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/size_char.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_copy/copy.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter_iter.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_erase/size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.infinite_recursion.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_T_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_size_char.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_insert/string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/char.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/initializer_list.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/string.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/replace_with_range.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_size_char.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_swap/swap.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim_rv.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_rv.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string.io/lit.local.cfg
    libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_extract.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_insert.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap_noexcept.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/pointer_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_view_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/allocator_propagation.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/char_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/pointer_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_char.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/pointer_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_view_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/pointer_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_view_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/pointer_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_view_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/pointer_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_view_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/pointer_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_view_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string.accessors/c_str.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_compare/pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_T_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_compare/string.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_compare/string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/char_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_view_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/char_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_view_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/char_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_view_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/char_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_view_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find/char_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find/string_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_find/string_view_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_rfind/char_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_view_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.ops/string_substr/substr.pass.cpp
    libcxx/test/std/strings/basic.string/string.require/contiguous.pass.cpp
    libcxx/test/std/strings/basic.string/string.starts_with/starts_with.char.pass.cpp
    libcxx/test/std/strings/basic.string/string.starts_with/starts_with.ptr.pass.cpp
    libcxx/test/std/strings/basic.string/string.starts_with/starts_with.string_view.pass.cpp
    libcxx/test/std/strings/basic.string/test_traits.h
    libcxx/test/std/strings/basic.string/traits_mismatch.verify.cpp
    libcxx/test/std/strings/basic.string/types.pass.cpp
    libcxx/test/std/strings/c.strings/cctype.pass.cpp
    libcxx/test/std/strings/c.strings/cstring.pass.cpp
    libcxx/test/std/strings/c.strings/cwchar.pass.cpp
    libcxx/test/std/strings/c.strings/cwctype.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.require/nothing_to_do.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign2.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign3.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/copy.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eof.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq_int_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/find.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/length.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/lt.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/move.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/not_eof.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_char_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_int_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign2.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign3.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/compare.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/copy.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eof.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq_int_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/find.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/length.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/lt.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/move.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/not_eof.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_char_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_int_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign2.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign3.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/compare.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/copy.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eof.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq_int_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/find.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/length.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/lt.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/move.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/not_eof.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_char_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_int_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/assign2.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/assign3.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/compare.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/copy.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eof.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eq.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eq_int_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/find.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/length.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/lt.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/move.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/not_eof.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/to_char_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/to_int_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/assign2.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/assign3.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/compare.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/copy.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eof.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eq.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eq_int_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/find.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/length.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/lt.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/move.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/not_eof.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/to_char_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/to_int_type.pass.cpp
    libcxx/test/std/strings/char.traits/char.traits.typedefs/nothing_to_do.pass.cpp
    libcxx/test/std/strings/string.conversions/stod.pass.cpp
    libcxx/test/std/strings/string.conversions/stof.pass.cpp
    libcxx/test/std/strings/string.conversions/stoi.pass.cpp
    libcxx/test/std/strings/string.conversions/stol.pass.cpp
    libcxx/test/std/strings/string.conversions/stold.pass.cpp
    libcxx/test/std/strings/string.conversions/stoll.pass.cpp
    libcxx/test/std/strings/string.conversions/stoul.pass.cpp
    libcxx/test/std/strings/string.conversions/stoull.pass.cpp
    libcxx/test/std/strings/string.conversions/to_string.pass.cpp
    libcxx/test/std/strings/string.conversions/to_wstring.pass.cpp
    libcxx/test/std/strings/string.view/char.bad.verify.cpp
    libcxx/test/std/strings/string.view/range_concept_conformance.compile.pass.cpp
    libcxx/test/std/strings/string.view/string.view.access/at.pass.cpp
    libcxx/test/std/strings/string.view/string.view.access/back.pass.cpp
    libcxx/test/std/strings/string.view/string.view.access/data.pass.cpp
    libcxx/test/std/strings/string.view/string.view.access/front.pass.cpp
    libcxx/test/std/strings/string.view/string.view.access/index.pass.cpp
    libcxx/test/std/strings/string.view/string.view.capacity/capacity.pass.cpp
    libcxx/test/std/strings/string.view/string.view.capacity/empty.verify.cpp
    libcxx/test/std/strings/string.view/string.view.comparison/equal.pass.cpp
    libcxx/test/std/strings/string.view/string.view.comparison/greater.pass.cpp
    libcxx/test/std/strings/string.view/string.view.comparison/greater_equal.pass.cpp
    libcxx/test/std/strings/string.view/string.view.comparison/less.pass.cpp
    libcxx/test/std/strings/string.view/string.view.comparison/less_equal.pass.cpp
    libcxx/test/std/strings/string.view/string.view.comparison/not_equal.pass.cpp
    libcxx/test/std/strings/string.view/string.view.cons/assign.pass.cpp
    libcxx/test/std/strings/string.view/string.view.cons/default.pass.cpp
    libcxx/test/std/strings/string.view/string.view.cons/from_iterator_sentinel.pass.cpp
    libcxx/test/std/strings/string.view/string.view.cons/from_literal.pass.cpp
    libcxx/test/std/strings/string.view/string.view.cons/from_ptr_len.pass.cpp
    libcxx/test/std/strings/string.view/string.view.cons/from_range.pass.cpp
    libcxx/test/std/strings/string.view/string.view.cons/from_string.pass.cpp
    libcxx/test/std/strings/string.view/string.view.cons/implicit_deduction_guides.pass.cpp
    libcxx/test/std/strings/string.view/string.view.deduct/iterator_sentinel.pass.cpp
    libcxx/test/std/strings/string.view/string.view.deduct/range.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_char_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_char_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_pointer_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_pointer_size_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_string_view_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_first_of_char_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_first_of_pointer_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_first_of_pointer_size_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_first_of_string_view_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_char_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_pointer_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_pointer_size_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_string_view_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_last_of_char_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_last_of_pointer_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_last_of_pointer_size_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_last_of_string_view_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_pointer_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_pointer_size_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/find_string_view_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/rfind_char_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/rfind_pointer_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/rfind_pointer_size_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.find/rfind_string_view_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.hash/char_type.hash.verify.cpp
    libcxx/test/std/strings/string.view/string.view.hash/enabled_hashes.pass.cpp
    libcxx/test/std/strings/string.view/string.view.hash/string_view.pass.cpp
    libcxx/test/std/strings/string.view/string.view.io/stream_insert.pass.cpp
    libcxx/test/std/strings/string.view/string.view.io/stream_insert_decl_present.compile.pass.cpp
    libcxx/test/std/strings/string.view/string.view.iterators/begin.pass.cpp
    libcxx/test/std/strings/string.view/string.view.iterators/end.pass.cpp
    libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp
    libcxx/test/std/strings/string.view/string.view.iterators/rbegin.pass.cpp
    libcxx/test/std/strings/string.view/string.view.iterators/rend.pass.cpp
    libcxx/test/std/strings/string.view/string.view.modifiers/remove_prefix.pass.cpp
    libcxx/test/std/strings/string.view/string.view.modifiers/remove_suffix.pass.cpp
    libcxx/test/std/strings/string.view/string.view.modifiers/swap.pass.cpp
    libcxx/test/std/strings/string.view/string.view.nonmem/quoted.pass.cpp
    libcxx/test/std/strings/string.view/string.view.ops/compare.pointer.pass.cpp
    libcxx/test/std/strings/string.view/string.view.ops/compare.pointer_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv.pass.cpp
    libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv_pointer_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv_size_size.pass.cpp
    libcxx/test/std/strings/string.view/string.view.ops/compare.sv.pass.cpp
    libcxx/test/std/strings/string.view/string.view.ops/copy.pass.cpp
    libcxx/test/std/strings/string.view/string.view.ops/substr.pass.cpp
    libcxx/test/std/strings/string.view/string.view.synop/nothing_to_do.pass.cpp
    libcxx/test/std/strings/string.view/string.view.template/contains.char.pass.cpp
    libcxx/test/std/strings/string.view/string.view.template/contains.ptr.pass.cpp
    libcxx/test/std/strings/string.view/string.view.template/contains.string_view.pass.cpp
    libcxx/test/std/strings/string.view/string.view.template/ends_with.char.pass.cpp
    libcxx/test/std/strings/string.view/string.view.template/ends_with.ptr.pass.cpp
    libcxx/test/std/strings/string.view/string.view.template/ends_with.string_view.pass.cpp
    libcxx/test/std/strings/string.view/string.view.template/starts_with.char.pass.cpp
    libcxx/test/std/strings/string.view/string.view.template/starts_with.ptr.pass.cpp
    libcxx/test/std/strings/string.view/string.view.template/starts_with.string_view.pass.cpp
    libcxx/test/std/strings/string.view/string_view.literals/literal.pass.cpp
    libcxx/test/std/strings/string.view/traits_mismatch.compile.fail.cpp
    libcxx/test/std/strings/string.view/types.pass.cpp
    libcxx/test/std/strings/strings.erasure/erase.pass.cpp
    libcxx/test/std/strings/strings.erasure/erase_if.pass.cpp
    libcxx/test/std/strings/strings.general/nothing_to_do.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/test/libcxx/strings/basic.string/alignof.compile.pass.cpp b/libcxx/test/libcxx/strings/basic.string/alignof.compile.pass.cpp
index 504b8c8a551da1b..7b4d54ed410b027 100644
--- a/libcxx/test/libcxx/strings/basic.string/alignof.compile.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/alignof.compile.pass.cpp
@@ -24,9 +24,9 @@ class small_pointer {
 template <class T>
 class small_iter_allocator {
 public:
-  using value_type = T;
-  using pointer = small_pointer<T>;
-  using size_type = std::int16_t;
+  using value_type      = T;
+  using pointer         = small_pointer<T>;
+  using size_type       = std::int16_t;
   using 
diff erence_type = std::int16_t;
 
   small_iter_allocator() TEST_NOEXCEPT {}

diff  --git a/libcxx/test/libcxx/strings/basic.string/sizeof.compile.pass.cpp b/libcxx/test/libcxx/strings/basic.string/sizeof.compile.pass.cpp
index 4d3eeb1bbce6e3b..6e00e43618b2e36 100644
--- a/libcxx/test/libcxx/strings/basic.string/sizeof.compile.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/sizeof.compile.pass.cpp
@@ -22,9 +22,9 @@ class small_pointer {
 template <class T>
 class small_iter_allocator {
 public:
-  using value_type = T;
-  using pointer = small_pointer<T>;
-  using size_type = std::int16_t;
+  using value_type      = T;
+  using pointer         = small_pointer<T>;
+  using size_type       = std::int16_t;
   using 
diff erence_type = std::int16_t;
 
   small_iter_allocator() TEST_NOEXCEPT {}

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.access/assert.back.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/assert.back.pass.cpp
index 9f932dc23a3781e..635c907c16e5c96 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.access/assert.back.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.access/assert.back.pass.cpp
@@ -21,16 +21,16 @@
 #include "min_allocator.h"
 
 int main(int, char**) {
-    {
-        std::string s;
-        TEST_LIBCPP_ASSERT_FAILURE(s.back(), "string::back(): string is empty");
-    }
-
-    {
-        typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
-        S s;
-        TEST_LIBCPP_ASSERT_FAILURE(s.back(), "string::back(): string is empty");
-    }
-
-    return 0;
+  {
+    std::string s;
+    TEST_LIBCPP_ASSERT_FAILURE(s.back(), "string::back(): string is empty");
+  }
+
+  {
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
+    S s;
+    TEST_LIBCPP_ASSERT_FAILURE(s.back(), "string::back(): string is empty");
+  }
+
+  return 0;
 }

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.access/assert.cback.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/assert.cback.pass.cpp
index 9c3312b47cecd77..002099d95660cf0 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.access/assert.cback.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.access/assert.cback.pass.cpp
@@ -21,16 +21,16 @@
 #include "min_allocator.h"
 
 int main(int, char**) {
-    {
-        std::string const s;
-        TEST_LIBCPP_ASSERT_FAILURE(s.back(), "string::back(): string is empty");
-    }
-
-    {
-        typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
-        const S s;
-        TEST_LIBCPP_ASSERT_FAILURE(s.back(), "string::back(): string is empty");
-    }
-
-    return 0;
+  {
+    std::string const s;
+    TEST_LIBCPP_ASSERT_FAILURE(s.back(), "string::back(): string is empty");
+  }
+
+  {
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
+    const S s;
+    TEST_LIBCPP_ASSERT_FAILURE(s.back(), "string::back(): string is empty");
+  }
+
+  return 0;
 }

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.capacity/PR53170.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.capacity/PR53170.pass.cpp
index feb9499eb00e4dc..7bf8043df76d5b1 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.capacity/PR53170.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.capacity/PR53170.pass.cpp
@@ -33,52 +33,52 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 bool test() {
-    // Test that a call to reserve() does shrink the string.
-    if (!TEST_IS_CONSTANT_EVALUATED) {
-        S s(1000, 'a');
-        typename S::size_type old_cap = s.capacity();
-        s.resize(20);
-        assert(s.capacity() == old_cap);
-
-        s.reserve();
-        assert(s.capacity() < old_cap);
-    }
-
-    // Test that a call to reserve(smaller-than-capacity) never shrinks the string.
-    {
-        S s(1000, 'a');
-        typename S::size_type old_cap = s.capacity();
-        s.resize(20);
-        assert(s.capacity() == old_cap);
-
-        s.reserve(10);
-        assert(s.capacity() == old_cap);
-    }
-
-    // In particular, test that reserve(0) does NOT shrink the string.
-    {
-        S s(1000, 'a');
-        typename S::size_type old_cap = s.capacity();
-        s.resize(20);
-        assert(s.capacity() == old_cap);
-
-        s.reserve(0);
-        assert(s.capacity() == old_cap);
-    }
-
-    return true;
+  // Test that a call to reserve() does shrink the string.
+  if (!TEST_IS_CONSTANT_EVALUATED) {
+    S s(1000, 'a');
+    typename S::size_type old_cap = s.capacity();
+    s.resize(20);
+    assert(s.capacity() == old_cap);
+
+    s.reserve();
+    assert(s.capacity() < old_cap);
+  }
+
+  // Test that a call to reserve(smaller-than-capacity) never shrinks the string.
+  {
+    S s(1000, 'a');
+    typename S::size_type old_cap = s.capacity();
+    s.resize(20);
+    assert(s.capacity() == old_cap);
+
+    s.reserve(10);
+    assert(s.capacity() == old_cap);
+  }
+
+  // In particular, test that reserve(0) does NOT shrink the string.
+  {
+    S s(1000, 'a');
+    typename S::size_type old_cap = s.capacity();
+    s.resize(20);
+    assert(s.capacity() == old_cap);
+
+    s.reserve(0);
+    assert(s.capacity() == old_cap);
+  }
+
+  return true;
 }
 
 int main(int, char**) {
-    test<std::string>();
+  test<std::string>();
 
 #if TEST_STD_VER >= 11
-    test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >();
+  test<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >();
 #endif
 
 #if TEST_STD_VER > 17
-    static_assert(test<std::string>());
+  static_assert(test<std::string>());
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.capacity/max_size.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.capacity/max_size.pass.cpp
index 559634896331fae..aab11b6b2176885 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.capacity/max_size.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.capacity/max_size.pass.cpp
@@ -53,7 +53,8 @@ TEST_CONSTEXPR_CXX20 void half_size() {
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
   std::wstring wstr;
-  assert(wstr.max_size() == std::numeric_limits<std::size_t>::max() / std::max<size_t>(2ul, sizeof(wchar_t)) - alignment);
+  assert(wstr.max_size() ==
+         std::numeric_limits<std::size_t>::max() / std::max<size_t>(2ul, sizeof(wchar_t)) - alignment);
 #endif
 
   std::u16string u16str;
@@ -63,44 +64,43 @@ TEST_CONSTEXPR_CXX20 void half_size() {
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
-
 #if _LIBCPP_ABI_VERSION == 1
 
-# if defined(__x86_64__) || defined(__i386__)
+#  if defined(__x86_64__) || defined(__i386__)
   full_size();
-# elif defined(__APPLE__) && defined(__aarch64__)
+#  elif defined(__APPLE__) && defined(__aarch64__)
   half_size();
-# elif defined(__arm__) || defined(__aarch64__)
-#   ifdef __BIG_ENDIAN__
+#  elif defined(__arm__) || defined(__aarch64__)
+#    ifdef __BIG_ENDIAN__
   half_size();
-#   else
+#    else
   full_size();
-#   endif
-# elif defined(__powerpc__) || defined(__powerpc64__)
-#   ifdef __BIG_ENDIAN__
+#    endif
+#  elif defined(__powerpc__) || defined(__powerpc64__)
+#    ifdef __BIG_ENDIAN__
   half_size();
-#   else
+#    else
   full_size();
-#   endif
-# elif defined(__sparc64__)
+#    endif
+#  elif defined(__sparc64__)
   half_size();
-# elif defined(_WIN32)
+#  elif defined(_WIN32)
   full_size();
-# else
-#   error "Your target system seems to be unsupported."
-# endif
+#  else
+#    error "Your target system seems to be unsupported."
+#  endif
 
 #else
 
-# if defined(__arm__) || defined(__aarch64__)
-#   ifdef __BIG_ENDIAN__
+#  if defined(__arm__) || defined(__aarch64__)
+#    ifdef __BIG_ENDIAN__
   full_size();
-#   else
+#    else
   half_size();
-#   endif
-# else
+#    endif
+#  else
   half_size();
-# endif
+#  endif
 
 #endif
 

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.cons/copy_shrunk_long.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.cons/copy_shrunk_long.pass.cpp
index 7c875b7c16df8a6..d4a0b318f36d728 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.cons/copy_shrunk_long.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.cons/copy_shrunk_long.pass.cpp
@@ -18,8 +18,7 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test()
-{
+TEST_CONSTEXPR_CXX20 bool test() {
   // Tests that a long string holding a SSO size string results in
   // an SSO copy constructed value.
   S s1("1234567890123456789012345678901234567890123456789012345678901234567890");
@@ -32,8 +31,7 @@ TEST_CONSTEXPR_CXX20 bool test()
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::basic_string<char, std::char_traits<char>, test_allocator<char> > >();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.pop_back.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.pop_back.pass.cpp
index d107d32ff19a069..637f5c2abe3d6ad 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.pop_back.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/assert.pop_back.pass.cpp
@@ -20,8 +20,8 @@
 #include "check_assertion.h"
 
 int main(int, char**) {
-    std::string s;
-    TEST_LIBCPP_ASSERT_FAILURE(s.pop_back(), "string::pop_back(): string is already empty");
+  std::string s;
+  TEST_LIBCPP_ASSERT_FAILURE(s.pop_back(), "string::pop_back(): string is already empty");
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/clear_and_shrink.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/clear_and_shrink.pass.cpp
index c57cc73774c6b08..8f4c9102fde87d7 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/clear_and_shrink.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/clear_and_shrink.pass.cpp
@@ -35,8 +35,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter.pass.cpp
index d1ba22a8f4082ae..5b690a576fad3e8 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter.pass.cpp
@@ -19,20 +19,22 @@
 #include "min_allocator.h"
 
 int main(int, char**) {
-    {
-        std::string l1("123");
-        std::string l2("123");
-        std::string::const_iterator i = l2.begin();
-        TEST_LIBCPP_ASSERT_FAILURE(l1.erase(i), "string::erase(iterator) called with an iterator not referring to this string");
-    }
-
-    {
-        typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
-        S l1("123");
-        S l2("123");
-        S::const_iterator i = l2.begin();
-        TEST_LIBCPP_ASSERT_FAILURE(l1.erase(i), "string::erase(iterator) called with an iterator not referring to this string");
-    }
-
-    return 0;
+  {
+    std::string l1("123");
+    std::string l2("123");
+    std::string::const_iterator i = l2.begin();
+    TEST_LIBCPP_ASSERT_FAILURE(
+        l1.erase(i), "string::erase(iterator) called with an iterator not referring to this string");
+  }
+
+  {
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
+    S l1("123");
+    S l2("123");
+    S::const_iterator i = l2.begin();
+    TEST_LIBCPP_ASSERT_FAILURE(
+        l1.erase(i), "string::erase(iterator) called with an iterator not referring to this string");
+  }
+
+  return 0;
 }

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter_iter.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter_iter.pass.cpp
index ee65a6c6c03e4c2..7ee9d7ac20c6032 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter_iter.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.erase.iter_iter.pass.cpp
@@ -19,73 +19,63 @@
 #include "min_allocator.h"
 
 int main(int, char**) {
+  // With first iterator from another container
+  {{std::string l1("123");
+  std::string l2("123");
+  TEST_LIBCPP_ASSERT_FAILURE(l1.erase(l2.cbegin(), l1.cbegin() + 1),
+                             "string::erase(iterator,  iterator) called with an iterator not referring to this string");
+}
+{
+  typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
+  S l1("123");
+  S l2("123");
+  TEST_LIBCPP_ASSERT_FAILURE(l1.erase(l2.cbegin(), l1.cbegin() + 1),
+                             "string::erase(iterator,  iterator) called with an iterator not referring to this string");
+}
+}
 
-    // With first iterator from another container
-    {
-        {
-            std::string l1("123");
-            std::string l2("123");
-            TEST_LIBCPP_ASSERT_FAILURE(
-                l1.erase(l2.cbegin(), l1.cbegin() + 1),
-                "string::erase(iterator,  iterator) called with an iterator not referring to this string");
-        }
-        {
-            typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
-            S l1("123");
-            S l2("123");
-            TEST_LIBCPP_ASSERT_FAILURE(l1.erase(l2.cbegin(), l1.cbegin() + 1),
-                                        "string::erase(iterator,  iterator) called with an iterator not referring to this string");
-        }
-    }
-
-    // With second iterator from another container
-    {
-        {
-            std::string l1("123");
-            std::string l2("123");
-            TEST_LIBCPP_ASSERT_FAILURE(l1.erase(l1.cbegin(), l2.cbegin() + 1), "Attempted to compare incomparable iterators");
-        }
-        {
-            typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
-            S l1("123");
-            S l2("123");
-            TEST_LIBCPP_ASSERT_FAILURE(l1.erase(l1.cbegin(), l2.cbegin() + 1), "Attempted to compare incomparable iterators");
-        }
-    }
+// With second iterator from another container
+{{std::string l1("123");
+std::string l2("123");
+TEST_LIBCPP_ASSERT_FAILURE(l1.erase(l1.cbegin(), l2.cbegin() + 1), "Attempted to compare incomparable iterators");
+}
+{
+  typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
+  S l1("123");
+  S l2("123");
+  TEST_LIBCPP_ASSERT_FAILURE(l1.erase(l1.cbegin(), l2.cbegin() + 1), "Attempted to compare incomparable iterators");
+}
+}
 
-    // With both iterators from another container
-    {
-        {
-            std::string l1("123");
-            std::string l2("123");
-            TEST_LIBCPP_ASSERT_FAILURE(
-                l1.erase(l2.cbegin(), l2.cbegin() + 1),
-                "string::erase(iterator,  iterator) called with an iterator not referring to this string");
-        }
-        {
-            typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
-            S l1("123");
-            S l2("123");
-            TEST_LIBCPP_ASSERT_FAILURE(
-                l1.erase(l2.cbegin(), l2.cbegin() + 1),
-                "string::erase(iterator,  iterator) called with an iterator not referring to this string");
-        }
-    }
+// With both iterators from another container
+{{std::string l1("123");
+std::string l2("123");
+TEST_LIBCPP_ASSERT_FAILURE(l1.erase(l2.cbegin(), l2.cbegin() + 1),
+                           "string::erase(iterator,  iterator) called with an iterator not referring to this string");
+}
+{
+  typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
+  S l1("123");
+  S l2("123");
+  TEST_LIBCPP_ASSERT_FAILURE(l1.erase(l2.cbegin(), l2.cbegin() + 1),
+                             "string::erase(iterator,  iterator) called with an iterator not referring to this string");
+}
+}
 
-    // With an invalid range
-    {
-        {
-            std::string l1("123");
-            TEST_LIBCPP_ASSERT_FAILURE(l1.erase(l1.cbegin() + 1, l1.cbegin()),
-                                    "string::erase(first, last) called with invalid range");
-        }
-        {
-            typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
-            S l1("123");
-            TEST_LIBCPP_ASSERT_FAILURE(l1.erase(l1.cbegin() + 1, l1.cbegin()),
-                                    "string::erase(first, last) called with invalid range");
-        }
-    }
+// With an invalid range
+{
+  {
+    std::string l1("123");
+    TEST_LIBCPP_ASSERT_FAILURE(
+        l1.erase(l1.cbegin() + 1, l1.cbegin()), "string::erase(first, last) called with invalid range");
+  }
+  {
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
+    S l1("123");
+    TEST_LIBCPP_ASSERT_FAILURE(
+        l1.erase(l1.cbegin() + 1, l1.cbegin()), "string::erase(first, last) called with invalid range");
+  }
+}
 
-    return 0;
+return 0;
 }

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_char.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_char.pass.cpp
index 25e25d13bbcc1fb..7cdf64375718320 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_char.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_char.pass.cpp
@@ -24,11 +24,12 @@
 #include "check_assertion.h"
 
 int main(int, char**) {
-    typedef std::string S;
-    S s;
-    S s2;
-    TEST_LIBCPP_ASSERT_FAILURE(s.insert(s2.begin(), '1'),
-        "string::insert(iterator, character) called with an iterator not referring to this string");
-
-    return 0;
+  typedef std::string S;
+  S s;
+  S s2;
+  TEST_LIBCPP_ASSERT_FAILURE(
+      s.insert(s2.begin(), '1'),
+      "string::insert(iterator, character) called with an iterator not referring to this string");
+
+  return 0;
 }

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_iter_iter.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_iter_iter.pass.cpp
index fa6ad3cf4878c78..3dadcfdad2631be 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_iter_iter.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_iter_iter.pass.cpp
@@ -19,12 +19,12 @@
 #include "check_assertion.h"
 
 int main(int, char**) {
-    std::string v;
-    std::string v2;
-    char a[] = "123";
-    const int N = sizeof(a)/sizeof(a[0]);
-    TEST_LIBCPP_ASSERT_FAILURE(v.insert(v2.cbegin() + 10, a, a + N),
-                               "Attempted to add/subtract an iterator outside its valid range");
+  std::string v;
+  std::string v2;
+  char a[]    = "123";
+  const int N = sizeof(a) / sizeof(a[0]);
+  TEST_LIBCPP_ASSERT_FAILURE(
+      v.insert(v2.cbegin() + 10, a, a + N), "Attempted to add/subtract an iterator outside its valid range");
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_size_char.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_size_char.pass.cpp
index 290c5af4289d18a..ca4454400daa585 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_size_char.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/debug.insert.iter_size_char.pass.cpp
@@ -18,11 +18,10 @@
 #include "check_assertion.h"
 
 int main(int, char**) {
-    std::string s;
-    std::string s2;
-    TEST_LIBCPP_ASSERT_FAILURE(
-        s.insert(s2.begin(), 1, 'a'),
-        "string::insert(iterator, n, value) called with an iterator not referring to this string");
+  std::string s;
+  std::string s2;
+  TEST_LIBCPP_ASSERT_FAILURE(s.insert(s2.begin(), 1, 'a'),
+                             "string::insert(iterator, n, value) called with an iterator not referring to this string");
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/libcxx/strings/basic.string/string.modifiers/resize_default_initialized.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.modifiers/resize_default_initialized.pass.cpp
index d0ba43dfc7186a1..572a7672935a368 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.modifiers/resize_default_initialized.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.modifiers/resize_default_initialized.pass.cpp
@@ -15,15 +15,14 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 void write_c_str(char *buf, int size) {
-  for (int i=0; i < size; ++i) {
+TEST_CONSTEXPR_CXX20 void write_c_str(char* buf, int size) {
+  for (int i = 0; i < size; ++i) {
     buf[i] = 'a';
   }
   buf[size] = '\0';
 }
 
-TEST_CONSTEXPR_CXX20 void test_buffer_usage()
-{
+TEST_CONSTEXPR_CXX20 void test_buffer_usage() {
   {
     unsigned buff_size = 125;
     unsigned used_size = buff_size - 16;
@@ -35,7 +34,7 @@ TEST_CONSTEXPR_CXX20 void test_buffer_usage()
     s.__resize_default_init(used_size);
     assert(s.size() == used_size);
     assert(s.data()[used_size] == '\0');
-    for (unsigned i=0; i < used_size; ++i) {
+    for (unsigned i = 0; i < used_size; ++i) {
       assert(s[i] == 'a');
     }
   }
@@ -47,7 +46,7 @@ TEST_CONSTEXPR_CXX20 void test_basic() {
     s.__resize_default_init(3);
     assert(s.size() == 3);
     assert(s.data()[3] == '\0');
-    for (int i=0; i < 3; ++i)
+    for (int i = 0; i < 3; ++i)
       s[i] = 'a' + i;
     s.__resize_default_init(1);
     assert(s[0] == 'a');

diff  --git a/libcxx/test/libcxx/strings/c.strings/constexpr.cstring.compile.pass.cpp b/libcxx/test/libcxx/strings/c.strings/constexpr.cstring.compile.pass.cpp
index 92514eab0042590..cd993d8918e9d33 100644
--- a/libcxx/test/libcxx/strings/c.strings/constexpr.cstring.compile.pass.cpp
+++ b/libcxx/test/libcxx/strings/c.strings/constexpr.cstring.compile.pass.cpp
@@ -24,7 +24,6 @@ static_assert(std::__constexpr_memcmp(Banane, Bananf, std::__element_count(6)) =
 static_assert(!std::__constexpr_memcmp_equal(Banane, Banand, std::__element_count(6)), "");
 static_assert(std::__constexpr_memcmp_equal(Banane, Banane, std::__element_count(6)), "");
 
-
 constexpr bool test_constexpr_wmemchr() {
   const char str[] = "Banane";
   return std::__constexpr_memchr(str, 'n', 6) == str + 2;

diff  --git a/libcxx/test/libcxx/strings/c.strings/constexpr_memmove.pass.cpp b/libcxx/test/libcxx/strings/c.strings/constexpr_memmove.pass.cpp
index 11762cb35d47407..bdc18448d03a432 100644
--- a/libcxx/test/libcxx/strings/c.strings/constexpr_memmove.pass.cpp
+++ b/libcxx/test/libcxx/strings/c.strings/constexpr_memmove.pass.cpp
@@ -32,7 +32,7 @@
 // than that.
 struct CopyConstructible {
   CopyConstructible() = default;
-  int value = 0;
+  int value           = 0;
 
   CopyConstructible(const CopyConstructible&)            = default;
   CopyConstructible(CopyConstructible&&)                 = delete;
@@ -42,7 +42,7 @@ struct CopyConstructible {
 
 struct MoveConstructible {
   MoveConstructible() = default;
-  int value = 0;
+  int value           = 0;
 
   MoveConstructible(const MoveConstructible&)            = delete;
   MoveConstructible(MoveConstructible&&)                 = default;
@@ -52,7 +52,7 @@ struct MoveConstructible {
 
 struct CopyAssignable {
   CopyAssignable() = default;
-  int value = 0;
+  int value        = 0;
 
   CopyAssignable(const CopyAssignable&)            = delete;
   CopyAssignable(CopyAssignable&&)                 = delete;
@@ -62,7 +62,7 @@ struct CopyAssignable {
 
 struct MoveAssignable {
   MoveAssignable() = default;
-  int value = 0;
+  int value        = 0;
 
   MoveAssignable(const MoveAssignable&)            = delete;
   MoveAssignable(MoveAssignable&&)                 = delete;
@@ -96,7 +96,7 @@ TEST_CONSTEXPR_CXX14 void test_user_defined_types() {
 template <class Source, class Dest>
 TEST_CONSTEXPR_CXX14 void test_builtin_types() {
   Source src[3] = {1, 2, 3};
-  Dest dst[3] = {111, 111, 111};
+  Dest dst[3]   = {111, 111, 111};
 
   Dest* result = std::__constexpr_memmove(dst, src, std::__element_count(3));
   assert(result == dst);
@@ -110,7 +110,7 @@ TEST_CONSTEXPR_CXX14 void test_pointer_types() {
   ObjectType objs[3] = {1, 2, 3};
 
   SourcePtr src[3] = {objs + 0, objs + 1, objs + 2};
-  DestPtr dst[3] = {nullptr, nullptr, nullptr};
+  DestPtr dst[3]   = {nullptr, nullptr, nullptr};
 
   DestPtr* result = std::__constexpr_memmove(dst, src, std::__element_count(3));
   assert(result == dst);

diff  --git a/libcxx/test/libcxx/strings/string.view/assert.ctor.pointer.pass.cpp b/libcxx/test/libcxx/strings/string.view/assert.ctor.pointer.pass.cpp
index 1e5ce4779e19eb5..f481507f2ebcb35 100644
--- a/libcxx/test/libcxx/strings/string.view/assert.ctor.pointer.pass.cpp
+++ b/libcxx/test/libcxx/strings/string.view/assert.ctor.pointer.pass.cpp
@@ -19,15 +19,22 @@
 #include "check_assertion.h"
 
 int main(int, char**) {
-  TEST_LIBCPP_ASSERT_FAILURE(std::string_view((char const*)NULL), "null pointer passed to non-null argument of char_traits<...>::length");
-  TEST_LIBCPP_ASSERT_FAILURE(std::string_view((char const*)nullptr), "null pointer passed to non-null argument of char_traits<...>::length");
-  TEST_LIBCPP_ASSERT_FAILURE(std::string_view((char const*)0), "null pointer passed to non-null argument of char_traits<...>::length");
+  TEST_LIBCPP_ASSERT_FAILURE(
+      std::string_view((char const*)NULL), "null pointer passed to non-null argument of char_traits<...>::length");
+  TEST_LIBCPP_ASSERT_FAILURE(
+      std::string_view((char const*)nullptr), "null pointer passed to non-null argument of char_traits<...>::length");
+  TEST_LIBCPP_ASSERT_FAILURE(
+      std::string_view((char const*)0), "null pointer passed to non-null argument of char_traits<...>::length");
   {
     std::string_view v;
-    TEST_LIBCPP_ASSERT_FAILURE(v == (char const*)nullptr, "null pointer passed to non-null argument of char_traits<...>::length");
-    TEST_LIBCPP_ASSERT_FAILURE(v == (char const*)NULL, "null pointer passed to non-null argument of char_traits<...>::length");
-    TEST_LIBCPP_ASSERT_FAILURE((char const*)nullptr == v, "null pointer passed to non-null argument of char_traits<...>::length");
-    TEST_LIBCPP_ASSERT_FAILURE((char const*)NULL == v, "null pointer passed to non-null argument of char_traits<...>::length");
+    TEST_LIBCPP_ASSERT_FAILURE(
+        v == (char const*)nullptr, "null pointer passed to non-null argument of char_traits<...>::length");
+    TEST_LIBCPP_ASSERT_FAILURE(
+        v == (char const*)NULL, "null pointer passed to non-null argument of char_traits<...>::length");
+    TEST_LIBCPP_ASSERT_FAILURE(
+        (char const*)nullptr == v, "null pointer passed to non-null argument of char_traits<...>::length");
+    TEST_LIBCPP_ASSERT_FAILURE(
+        (char const*)NULL == v, "null pointer passed to non-null argument of char_traits<...>::length");
   }
 
   return 0;

diff  --git a/libcxx/test/libcxx/strings/string.view/string.view.iterators/debug.iterator-indexing.pass.cpp b/libcxx/test/libcxx/strings/string.view/string.view.iterators/debug.iterator-indexing.pass.cpp
index 212af49b5b394da..797b8bad7c4d4a7 100644
--- a/libcxx/test/libcxx/strings/string.view/string.view.iterators/debug.iterator-indexing.pass.cpp
+++ b/libcxx/test/libcxx/strings/string.view/string.view.iterators/debug.iterator-indexing.pass.cpp
@@ -16,73 +16,77 @@
 #include "check_assertion.h"
 
 int main(int, char**) {
-    // string_view::iterator
+  // string_view::iterator
+  {
+    std::string_view const str("hello world");
     {
-        std::string_view const str("hello world");
-        {
-            auto it = str.end();
-            TEST_LIBCPP_ASSERT_FAILURE(*it, "__bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
-        }
-        {
-            auto it = str.end();
-            TEST_LIBCPP_ASSERT_FAILURE(it.operator->(), "__bounded_iter::operator->: Attempt to dereference an out-of-range iterator");
-        }
-        {
-            auto it = str.begin();
-            TEST_LIBCPP_ASSERT_FAILURE(it[99], "__bounded_iter::operator[]: Attempt to index an iterator out-of-range");
-        }
+      auto it = str.end();
+      TEST_LIBCPP_ASSERT_FAILURE(*it, "__bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
     }
+    {
+      auto it = str.end();
+      TEST_LIBCPP_ASSERT_FAILURE(
+          it.operator->(), "__bounded_iter::operator->: Attempt to dereference an out-of-range iterator");
+    }
+    {
+      auto it = str.begin();
+      TEST_LIBCPP_ASSERT_FAILURE(it[99], "__bounded_iter::operator[]: Attempt to index an iterator out-of-range");
+    }
+  }
 
-    // string_view::const_iterator
+  // string_view::const_iterator
+  {
+    std::string_view const str("hello world");
+    {
+      auto it = str.cend();
+      TEST_LIBCPP_ASSERT_FAILURE(*it, "__bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
+    }
+    {
+      auto it = str.cend();
+      TEST_LIBCPP_ASSERT_FAILURE(
+          it.operator->(), "__bounded_iter::operator->: Attempt to dereference an out-of-range iterator");
+    }
     {
-        std::string_view const str("hello world");
-        {
-            auto it = str.cend();
-            TEST_LIBCPP_ASSERT_FAILURE(*it, "__bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
-        }
-        {
-            auto it = str.cend();
-            TEST_LIBCPP_ASSERT_FAILURE(it.operator->(), "__bounded_iter::operator->: Attempt to dereference an out-of-range iterator");
-        }
-        {
-            auto it = str.cbegin();
-            TEST_LIBCPP_ASSERT_FAILURE(it[99], "__bounded_iter::operator[]: Attempt to index an iterator out-of-range");
-        }
+      auto it = str.cbegin();
+      TEST_LIBCPP_ASSERT_FAILURE(it[99], "__bounded_iter::operator[]: Attempt to index an iterator out-of-range");
     }
+  }
 
-    // string_view::reverse_iterator
+  // string_view::reverse_iterator
+  {
+    std::string_view const str("hello world");
     {
-        std::string_view const str("hello world");
-        {
-            auto it = str.rend();
-            TEST_LIBCPP_ASSERT_FAILURE(*it, "__bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
-        }
-        {
-            auto it = str.rend();
-            TEST_LIBCPP_ASSERT_FAILURE(it.operator->(), "__bounded_iter::operator->: Attempt to dereference an out-of-range iterator");
-        }
-        {
-            auto it = str.rbegin();
-            TEST_LIBCPP_ASSERT_FAILURE(it[99], "__bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
-        }
+      auto it = str.rend();
+      TEST_LIBCPP_ASSERT_FAILURE(*it, "__bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
     }
+    {
+      auto it = str.rend();
+      TEST_LIBCPP_ASSERT_FAILURE(
+          it.operator->(), "__bounded_iter::operator->: Attempt to dereference an out-of-range iterator");
+    }
+    {
+      auto it = str.rbegin();
+      TEST_LIBCPP_ASSERT_FAILURE(it[99], "__bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
+    }
+  }
 
-    // string_view::const_reverse_iterator
+  // string_view::const_reverse_iterator
+  {
+    std::string_view const str("hello world");
+    {
+      auto it = str.crend();
+      TEST_LIBCPP_ASSERT_FAILURE(*it, "__bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
+    }
+    {
+      auto it = str.crend();
+      TEST_LIBCPP_ASSERT_FAILURE(
+          it.operator->(), "__bounded_iter::operator->: Attempt to dereference an out-of-range iterator");
+    }
     {
-        std::string_view const str("hello world");
-        {
-            auto it = str.crend();
-            TEST_LIBCPP_ASSERT_FAILURE(*it, "__bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
-        }
-        {
-            auto it = str.crend();
-            TEST_LIBCPP_ASSERT_FAILURE(it.operator->(), "__bounded_iter::operator->: Attempt to dereference an out-of-range iterator");
-        }
-        {
-            auto it = str.crbegin();
-            TEST_LIBCPP_ASSERT_FAILURE(it[99], "__bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
-        }
+      auto it = str.crbegin();
+      TEST_LIBCPP_ASSERT_FAILURE(it[99], "__bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
     }
+  }
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/basic.string.hash/char_type_hash.verify.cpp b/libcxx/test/std/strings/basic.string.hash/char_type_hash.verify.cpp
index 339b200806e2b98..6222c40d7d6079c 100644
--- a/libcxx/test/std/strings/basic.string.hash/char_type_hash.verify.cpp
+++ b/libcxx/test/std/strings/basic.string.hash/char_type_hash.verify.cpp
@@ -6,7 +6,6 @@
 //
 //===----------------------------------------------------------------------===//
 
-
 // UNSUPPORTED: c++03
 
 // <string>
@@ -21,57 +20,50 @@
 template <class _CharT>
 struct trait // copied from <__string>
 {
-    typedef _CharT         char_type;
-    typedef int            int_type;
-    typedef std::streamoff off_type;
-    typedef std::streampos pos_type;
-    typedef std::mbstate_t state_type;
+  typedef _CharT char_type;
+  typedef int int_type;
+  typedef std::streamoff off_type;
+  typedef std::streampos pos_type;
+  typedef std::mbstate_t state_type;
 
-    static inline void assign(char_type& __c1, const char_type& __c2) {
-        __c1 = __c2;
-    }
-    static inline bool eq(char_type __c1, char_type __c2) { return __c1 == __c2; }
-    static inline bool lt(char_type __c1, char_type __c2) { return __c1 < __c2; }
+  static inline void assign(char_type& __c1, const char_type& __c2) { __c1 = __c2; }
+  static inline bool eq(char_type __c1, char_type __c2) { return __c1 == __c2; }
+  static inline bool lt(char_type __c1, char_type __c2) { return __c1 < __c2; }
 
-    static int compare(const char_type* __s1, const char_type* __s2, std::size_t __n);
-    static std::size_t length(const char_type* __s);
-    static const char_type* find(const char_type* __s, std::size_t __n,
-                                 const char_type& __a);
+  static int compare(const char_type* __s1, const char_type* __s2, std::size_t __n);
+  static std::size_t length(const char_type* __s);
+  static const char_type* find(const char_type* __s, std::size_t __n, const char_type& __a);
 
-    static char_type* move(char_type* __s1, const char_type* __s2, std::size_t __n);
-    static char_type* copy(char_type* __s1, const char_type* __s2, std::size_t __n);
-    static char_type* assign(char_type* __s, std::size_t __n, char_type __a);
+  static char_type* move(char_type* __s1, const char_type* __s2, std::size_t __n);
+  static char_type* copy(char_type* __s1, const char_type* __s2, std::size_t __n);
+  static char_type* assign(char_type* __s, std::size_t __n, char_type __a);
 
-    static inline int_type not_eof(int_type __c) {
-        return eq_int_type(__c, eof()) ? ~eof() : __c;
-    }
-    static inline char_type to_char_type(int_type __c) { return char_type(__c); }
-    static inline int_type to_int_type(char_type __c) { return int_type(__c); }
-    static inline bool eq_int_type(int_type __c1, int_type __c2) {
-        return __c1 == __c2;
-    }
-    static inline int_type eof() { return int_type(EOF); }
+  static inline int_type not_eof(int_type __c) { return eq_int_type(__c, eof()) ? ~eof() : __c; }
+  static inline char_type to_char_type(int_type __c) { return char_type(__c); }
+  static inline int_type to_int_type(char_type __c) { return int_type(__c); }
+  static inline bool eq_int_type(int_type __c1, int_type __c2) { return __c1 == __c2; }
+  static inline int_type eof() { return int_type(EOF); }
 };
 
 template <class CharT>
 void test() {
-    typedef std::basic_string<CharT, trait<CharT> > str_t;
-    std::hash<str_t>
-        h; // expected-error-re 4 {{{{call to implicitly-deleted default constructor of 'std::hash<str_t>'|implicit instantiation of undefined template}} {{.+}}}}}}
+  typedef std::basic_string<CharT, trait<CharT> > str_t;
+  std::hash<str_t>
+      h; // expected-error-re 4 {{{{call to implicitly-deleted default constructor of 'std::hash<str_t>'|implicit instantiation of undefined template}} {{.+}}}}}}
 #if TEST_STD_VER > 17 && defined(__cpp_char8_t)
-    // expected-error-re at -2 {{{{call to implicitly-deleted default constructor of 'std::hash<str_t>'|implicit instantiation of undefined template}} {{.+}}}}}}
+  // expected-error-re at -2 {{{{call to implicitly-deleted default constructor of 'std::hash<str_t>'|implicit instantiation of undefined template}} {{.+}}}}}}
 #endif
-    (void)h;
+  (void)h;
 }
 
 int main(int, char**) {
-    test<char>();
-    test<wchar_t>();
+  test<char>();
+  test<wchar_t>();
 #if TEST_STD_VER > 17 && defined(__cpp_char8_t)
-    test<char8_t>();
+  test<char8_t>();
 #endif
-    test<char16_t>();
-    test<char32_t>();
+  test<char16_t>();
+  test<char32_t>();
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/basic.string.hash/enabled_hashes.pass.cpp b/libcxx/test/std/strings/basic.string.hash/enabled_hashes.pass.cpp
index 31e351a6986529e..611f95f0d3ef6e9 100644
--- a/libcxx/test/std/strings/basic.string.hash/enabled_hashes.pass.cpp
+++ b/libcxx/test/std/strings/basic.string.hash/enabled_hashes.pass.cpp
@@ -36,18 +36,18 @@ struct std::char_traits<MyChar> {
   static bool eq(char_type, char_type);
   static bool lt(char_type, char_type);
 
-  static int              compare(const char_type*, const char_type*, std::size_t);
-  static std::size_t           length(const char_type*);
+  static int compare(const char_type*, const char_type*, std::size_t);
+  static std::size_t length(const char_type*);
   static const char_type* find(const char_type*, std::size_t, const char_type&);
-  static char_type*       move(char_type*, const char_type*, std::size_t);
-  static char_type*       copy(char_type*, const char_type*, std::size_t);
-  static char_type*       assign(char_type*, std::size_t, char_type);
+  static char_type* move(char_type*, const char_type*, std::size_t);
+  static char_type* copy(char_type*, const char_type*, std::size_t);
+  static char_type* assign(char_type*, std::size_t, char_type);
 
-  static int_type  not_eof(int_type);
+  static int_type not_eof(int_type);
   static char_type to_char_type(int_type);
-  static int_type  to_int_type(char_type);
-  static bool      eq_int_type(int_type, int_type);
-  static int_type  eof();
+  static int_type to_int_type(char_type);
+  static bool eq_int_type(int_type, int_type);
+  static int_type eof();
 };
 
 int main(int, char**) {

diff  --git a/libcxx/test/std/strings/basic.string.hash/strings.pass.cpp b/libcxx/test/std/strings/basic.string.hash/strings.pass.cpp
index 45882a48e086ef7..293336f3df93c14 100644
--- a/libcxx/test/std/strings/basic.string.hash/strings.pass.cpp
+++ b/libcxx/test/std/strings/basic.string.hash/strings.pass.cpp
@@ -23,34 +23,31 @@
 #include "test_macros.h"
 
 template <class T>
-void
-test()
-{
-    typedef std::hash<T> H;
+void test() {
+  typedef std::hash<T> H;
 #if TEST_STD_VER <= 14
-    static_assert((std::is_same<typename H::argument_type, T>::value), "" );
-    static_assert((std::is_same<typename H::result_type, std::size_t>::value), "" );
+  static_assert((std::is_same<typename H::argument_type, T>::value), "");
+  static_assert((std::is_same<typename H::result_type, std::size_t>::value), "");
 #endif
-    ASSERT_NOEXCEPT(H()(T()));
-
-    H h;
-    std::string g1 = "1234567890";
-    std::string g2 = "1234567891";
-    T s1(g1.begin(), g1.end());
-    T s2(g2.begin(), g2.end());
-    assert(h(s1) != h(s2));
+  ASSERT_NOEXCEPT(H()(T()));
+
+  H h;
+  std::string g1 = "1234567890";
+  std::string g2 = "1234567891";
+  T s1(g1.begin(), g1.end());
+  T s2(g2.begin(), g2.end());
+  assert(h(s1) != h(s2));
 }
 
-int main(int, char**)
-{
-    test<std::string>();
+int main(int, char**) {
+  test<std::string>();
 #ifndef TEST_HAS_NO_CHAR8_T
-    test<std::u8string>();
+  test<std::u8string>();
 #endif
-    test<std::u16string>();
-    test<std::u32string>();
+  test<std::u16string>();
+  test<std::u32string>();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test<std::wstring>();
+  test<std::wstring>();
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/basic.string.literals/literal.pass.cpp b/libcxx/test/std/strings/basic.string.literals/literal.pass.cpp
index 56e40fcbe1c34f3..d5904537399ef1d 100644
--- a/libcxx/test/std/strings/basic.string.literals/literal.pass.cpp
+++ b/libcxx/test/std/strings/basic.string.literals/literal.pass.cpp
@@ -14,65 +14,85 @@
 #include "test_macros.h"
 
 #ifndef TEST_HAS_NO_CHAR8_T
-    typedef std::u8string u8string;
+typedef std::u8string u8string;
 #else
-    typedef std::string   u8string;
+typedef std::string u8string;
 #endif
 
 int main(int, char**) {
-    {
-        using namespace std::literals::string_literals;
+  {
+    using namespace std::literals::string_literals;
 
-        ASSERT_SAME_TYPE(decltype(  "Hi"s), std::string);
-        ASSERT_SAME_TYPE(decltype(u8"Hi"s), u8string);
+    ASSERT_SAME_TYPE(decltype("Hi"s), std::string);
+    ASSERT_SAME_TYPE(decltype(u8"Hi"s), u8string);
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        ASSERT_SAME_TYPE(decltype( L"Hi"s), std::wstring);
+    ASSERT_SAME_TYPE(decltype(L"Hi"s), std::wstring);
 #endif
-        ASSERT_SAME_TYPE(decltype( u"Hi"s), std::u16string);
-        ASSERT_SAME_TYPE(decltype( U"Hi"s), std::u32string);
+    ASSERT_SAME_TYPE(decltype(u"Hi"s), std::u16string);
+    ASSERT_SAME_TYPE(decltype(U"Hi"s), std::u32string);
 
-        std::string foo;
+    std::string foo;
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        std::wstring Lfoo;
+    std::wstring Lfoo;
 #endif
-        u8string u8foo;
-        std::u16string ufoo;
-        std::u32string Ufoo;
+    u8string u8foo;
+    std::u16string ufoo;
+    std::u32string Ufoo;
 
-        foo   =   ""s;     assert(  foo.size() == 0);
-        u8foo = u8""s;     assert(u8foo.size() == 0);
+    foo = ""s;
+    assert(foo.size() == 0);
+    u8foo = u8""s;
+    assert(u8foo.size() == 0);
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        Lfoo  =  L""s;     assert( Lfoo.size() == 0);
+    Lfoo = L""s;
+    assert(Lfoo.size() == 0);
 #endif
-        ufoo  =  u""s;     assert( ufoo.size() == 0);
-        Ufoo  =  U""s;     assert( Ufoo.size() == 0);
+    ufoo = u""s;
+    assert(ufoo.size() == 0);
+    Ufoo = U""s;
+    assert(Ufoo.size() == 0);
 
-        foo   =   " "s;    assert(  foo.size() == 1);
-        u8foo = u8" "s;    assert(u8foo.size() == 1);
+    foo = " "s;
+    assert(foo.size() == 1);
+    u8foo = u8" "s;
+    assert(u8foo.size() == 1);
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        Lfoo  =  L" "s;    assert( Lfoo.size() == 1);
+    Lfoo = L" "s;
+    assert(Lfoo.size() == 1);
 #endif
-        ufoo  =  u" "s;    assert( ufoo.size() == 1);
-        Ufoo  =  U" "s;    assert( Ufoo.size() == 1);
+    ufoo = u" "s;
+    assert(ufoo.size() == 1);
+    Ufoo = U" "s;
+    assert(Ufoo.size() == 1);
 
-        foo   =   "ABC"s;     assert(  foo ==   "ABC");   assert(  foo == std::string   (  "ABC"));
-        u8foo = u8"ABC"s;     assert(u8foo == u8"ABC");   assert(u8foo == u8string      (u8"ABC"));
+    foo = "ABC"s;
+    assert(foo == "ABC");
+    assert(foo == std::string("ABC"));
+    u8foo = u8"ABC"s;
+    assert(u8foo == u8"ABC");
+    assert(u8foo == u8string(u8"ABC"));
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        Lfoo  =  L"ABC"s;     assert( Lfoo ==  L"ABC");   assert( Lfoo == std::wstring  ( L"ABC"));
+    Lfoo = L"ABC"s;
+    assert(Lfoo == L"ABC");
+    assert(Lfoo == std::wstring(L"ABC"));
 #endif
-        ufoo  =  u"ABC"s;     assert( ufoo ==  u"ABC");   assert( ufoo == std::u16string( u"ABC"));
-        Ufoo  =  U"ABC"s;     assert( Ufoo ==  U"ABC");   assert( Ufoo == std::u32string( U"ABC"));
-    }
-    {
-        using namespace std::literals;
-        std::string foo = ""s;
-        assert(foo == std::string());
-    }
-    {
-        using namespace std;
-        std::string foo = ""s;
-        assert(foo == std::string());
-    }
+    ufoo = u"ABC"s;
+    assert(ufoo == u"ABC");
+    assert(ufoo == std::u16string(u"ABC"));
+    Ufoo = U"ABC"s;
+    assert(Ufoo == U"ABC");
+    assert(Ufoo == std::u32string(U"ABC"));
+  }
+  {
+    using namespace std::literals;
+    std::string foo = ""s;
+    assert(foo == std::string());
+  }
+  {
+    using namespace std;
+    std::string foo = ""s;
+    assert(foo == std::string());
+  }
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/basic.string/allocator_mismatch.verify.cpp b/libcxx/test/std/strings/basic.string/allocator_mismatch.verify.cpp
index 2c59164051c7728..c38bed60300f1c8 100644
--- a/libcxx/test/std/strings/basic.string/allocator_mismatch.verify.cpp
+++ b/libcxx/test/std/strings/basic.string/allocator_mismatch.verify.cpp
@@ -11,4 +11,5 @@
 
 #include <string>
 
-std::basic_string<char, std::char_traits<char>, std::allocator<int> > s; // expected-error@*:* {{Allocator::value_type must be same type as value_type}}
+std::basic_string<char, std::char_traits<char>, std::allocator<int> >
+    s; // expected-error@*:* {{Allocator::value_type must be same type as value_type}}

diff  --git a/libcxx/test/std/strings/basic.string/char.bad.verify.cpp b/libcxx/test/std/strings/basic.string/char.bad.verify.cpp
index a93fdc7c8e65d51..5e1367879ad0e36 100644
--- a/libcxx/test/std/strings/basic.string/char.bad.verify.cpp
+++ b/libcxx/test/std/strings/basic.string/char.bad.verify.cpp
@@ -13,39 +13,40 @@
 #include "test_traits.h"
 
 struct NotTrivial {
-    NotTrivial() : value(3) {}
-    int value;
+  NotTrivial() : value(3) {}
+  int value;
 };
 
 struct NotStandardLayout {
 public:
-    NotStandardLayout() : one(1), two(2) {}
-    int sum() const { return one + two; } // silences "unused field 'two' warning"
-    int one;
+  NotStandardLayout() : one(1), two(2) {}
+  int sum() const { return one + two; } // silences "unused field 'two' warning"
+  int one;
+
 private:
-    int two;
+  int two;
 };
 
 void f() {
-    {
-        // array
-        typedef char C[3];
-        static_assert(std::is_array<C>::value, "");
-        std::basic_string<C, test_traits<C> > s;
-        // expected-error-re at string:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string must not be an array}}
-    }
-
-    {
-        // not trivial
-        static_assert(!std::is_trivial<NotTrivial>::value, "");
-        std::basic_string<NotTrivial, test_traits<NotTrivial> > s;
-        // expected-error-re at string:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string must be trivial}}
-    }
-
-    {
-        // not standard layout
-        static_assert(!std::is_standard_layout<NotStandardLayout>::value, "");
-        std::basic_string<NotStandardLayout, test_traits<NotStandardLayout> > s;
-        // expected-error-re at string:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string must be standard-layout}}
-    }
+  {
+    // array
+    typedef char C[3];
+    static_assert(std::is_array<C>::value, "");
+    std::basic_string<C, test_traits<C> > s;
+    // expected-error-re at string:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string must not be an array}}
+  }
+
+  {
+    // not trivial
+    static_assert(!std::is_trivial<NotTrivial>::value, "");
+    std::basic_string<NotTrivial, test_traits<NotTrivial> > s;
+    // expected-error-re at string:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string must be trivial}}
+  }
+
+  {
+    // not standard layout
+    static_assert(!std::is_standard_layout<NotStandardLayout>::value, "");
+    std::basic_string<NotStandardLayout, test_traits<NotStandardLayout> > s;
+    // expected-error-re at string:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string must be standard-layout}}
+  }
 }

diff  --git a/libcxx/test/std/strings/basic.string/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/strings/basic.string/range_concept_conformance.compile.pass.cpp
index 46b1936e5538463..b6afc20e3cccb0c 100644
--- a/libcxx/test/std/strings/basic.string/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/range_concept_conformance.compile.pass.cpp
@@ -15,8 +15,6 @@
 #include <concepts>
 #include <ranges>
 
-
-
 static_assert(std::same_as<std::ranges::iterator_t<std::string>, std::string::iterator>);
 static_assert(std::ranges::common_range<std::string>);
 static_assert(std::ranges::random_access_range<std::string>);

diff  --git a/libcxx/test/std/strings/basic.string/string.access/at.pass.cpp b/libcxx/test/std/strings/basic.string/string.access/at.pass.cpp
index 9530950b336734f..52c0646c7d7c568 100644
--- a/libcxx/test/std/strings/basic.string/string.access/at.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.access/at.pass.cpp
@@ -22,37 +22,27 @@
 #include "type_algorithms.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos)
-{
-    const S& cs = s;
-    if (pos < s.size())
-    {
-        assert(s.at(pos) == s[pos]);
-        assert(cs.at(pos) == cs[pos]);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos) {
+  const S& cs = s;
+  if (pos < s.size()) {
+    assert(s.at(pos) == s[pos]);
+    assert(cs.at(pos) == cs[pos]);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            TEST_IGNORE_NODISCARD s.at(pos);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos >= s.size());
-        }
-        try
-        {
-            TEST_IGNORE_NODISCARD cs.at(pos);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos >= s.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      TEST_IGNORE_NODISCARD s.at(pos);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos >= s.size());
     }
+    try {
+      TEST_IGNORE_NODISCARD cs.at(pos);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos >= s.size());
+    }
+  }
 #endif
 }
 
@@ -68,9 +58,9 @@ TEST_CONSTEXPR_CXX20 void test_string() {
 struct TestCaller {
   template <class T>
   TEST_CONSTEXPR_CXX20 void operator()() {
-        test_string<std::basic_string<T> >();
+    test_string<std::basic_string<T> >();
 #if TEST_STD_VER >= 11
-        test_string<std::basic_string<T, std::char_traits<T>, min_allocator<T> > >();
+    test_string<std::basic_string<T, std::char_traits<T>, min_allocator<T> > >();
 #endif
   }
 };
@@ -81,8 +71,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.access/back.pass.cpp b/libcxx/test/std/strings/basic.string/string.access/back.pass.cpp
index 9428b08b16d4c16..2f0c282c8e43650 100644
--- a/libcxx/test/std/strings/basic.string/string.access/back.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.access/back.pass.cpp
@@ -18,18 +18,16 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s)
-{
-    const S& cs = s;
-    ASSERT_SAME_TYPE(decltype( s.back()), typename S::reference);
-    ASSERT_SAME_TYPE(decltype(cs.back()), typename S::const_reference);
-    LIBCPP_ASSERT_NOEXCEPT(    s.back());
-    LIBCPP_ASSERT_NOEXCEPT(   cs.back());
-    assert(&cs.back() == &cs[cs.size()-1]);
-    assert(&s.back() == &s[cs.size()-1]);
-    s.back() = typename S::value_type('z');
-    assert(s.back() == typename S::value_type('z'));
+TEST_CONSTEXPR_CXX20 void test(S s) {
+  const S& cs = s;
+  ASSERT_SAME_TYPE(decltype(s.back()), typename S::reference);
+  ASSERT_SAME_TYPE(decltype(cs.back()), typename S::const_reference);
+  LIBCPP_ASSERT_NOEXCEPT(s.back());
+  LIBCPP_ASSERT_NOEXCEPT(cs.back());
+  assert(&cs.back() == &cs[cs.size() - 1]);
+  assert(&s.back() == &s[cs.size() - 1]);
+  s.back() = typename S::value_type('z');
+  assert(s.back() == typename S::value_type('z'));
 }
 
 template <class S>
@@ -47,8 +45,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.access/front.pass.cpp b/libcxx/test/std/strings/basic.string/string.access/front.pass.cpp
index e389d335b1983f3..809b0399dc70fd5 100644
--- a/libcxx/test/std/strings/basic.string/string.access/front.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.access/front.pass.cpp
@@ -18,18 +18,16 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s)
-{
-    const S& cs = s;
-    ASSERT_SAME_TYPE(decltype( s.front()), typename S::reference);
-    ASSERT_SAME_TYPE(decltype(cs.front()), typename S::const_reference);
-    LIBCPP_ASSERT_NOEXCEPT(    s.front());
-    LIBCPP_ASSERT_NOEXCEPT(   cs.front());
-    assert(&cs.front() == &cs[0]);
-    assert(&s.front() == &s[0]);
-    s.front() = typename S::value_type('z');
-    assert(s.front() == typename S::value_type('z'));
+TEST_CONSTEXPR_CXX20 void test(S s) {
+  const S& cs = s;
+  ASSERT_SAME_TYPE(decltype(s.front()), typename S::reference);
+  ASSERT_SAME_TYPE(decltype(cs.front()), typename S::const_reference);
+  LIBCPP_ASSERT_NOEXCEPT(s.front());
+  LIBCPP_ASSERT_NOEXCEPT(cs.front());
+  assert(&cs.front() == &cs[0]);
+  assert(&s.front() == &s[0]);
+  s.front() = typename S::value_type('z');
+  assert(s.front() == typename S::value_type('z'));
 }
 
 template <class S>
@@ -47,8 +45,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.access/index.pass.cpp b/libcxx/test/std/strings/basic.string/string.access/index.pass.cpp
index 3fe93246072736a..a270dd579667b1d 100644
--- a/libcxx/test/std/strings/basic.string/string.access/index.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.access/index.pass.cpp
@@ -21,14 +21,13 @@ template <class S>
 TEST_CONSTEXPR_CXX20 void test_string() {
   S s("0123456789");
   const S& cs = s;
-  ASSERT_SAME_TYPE(decltype( s[0]), typename S::reference);
+  ASSERT_SAME_TYPE(decltype(s[0]), typename S::reference);
   ASSERT_SAME_TYPE(decltype(cs[0]), typename S::const_reference);
-  LIBCPP_ASSERT_NOEXCEPT(    s[0]);
-  LIBCPP_ASSERT_NOEXCEPT(   cs[0]);
-  for (typename S::size_type i = 0; i < cs.size(); ++i)
-  {
-      assert(s[i] == static_cast<char>('0' + i));
-      assert(cs[i] == s[i]);
+  LIBCPP_ASSERT_NOEXCEPT(s[0]);
+  LIBCPP_ASSERT_NOEXCEPT(cs[0]);
+  for (typename S::size_type i = 0; i < cs.size(); ++i) {
+    assert(s[i] == static_cast<char>('0' + i));
+    assert(cs[i] == s[i]);
   }
   assert(cs[cs.size()] == '\0');
   const S s2 = S();
@@ -44,8 +43,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/capacity.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/capacity.pass.cpp
index a32b8aa20cfd15e..871154ae3c97e23 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/capacity.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/capacity.pass.cpp
@@ -19,25 +19,22 @@
 #include "test_macros.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, test_allocator_statistics& alloc_stats)
-{
-    alloc_stats.throw_after = 0;
+TEST_CONSTEXPR_CXX20 void test(S s, test_allocator_statistics& alloc_stats) {
+  alloc_stats.throw_after = 0;
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    try
+  try
 #endif
-    {
-        while (s.size() < s.capacity())
-            s.push_back(typename S::value_type());
-        assert(s.size() == s.capacity());
-    }
+  {
+    while (s.size() < s.capacity())
+      s.push_back(typename S::value_type());
+    assert(s.size() == s.capacity());
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    catch (...)
-    {
-        assert(false);
-    }
+  catch (...) {
+    assert(false);
+  }
 #endif
-    alloc_stats.throw_after = INT_MAX;
+  alloc_stats.throw_after = INT_MAX;
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -64,8 +61,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/clear.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/clear.pass.cpp
index 24191a3e7e69a63..3a308de9b7569a3 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/clear.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/clear.pass.cpp
@@ -17,11 +17,9 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s)
-{
-    s.clear();
-    assert(s.size() == 0);
+TEST_CONSTEXPR_CXX20 void test(S s) {
+  s.clear();
+  assert(s.size() == 0);
 }
 
 template <class S>
@@ -47,8 +45,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/empty.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/empty.pass.cpp
index 578f068e09609d7..b4700d68a59af24 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/empty.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/empty.pass.cpp
@@ -17,11 +17,9 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s)
-{
-    ASSERT_NOEXCEPT(s.empty());
-    assert(s.empty() == (s.size() == 0));
+TEST_CONSTEXPR_CXX20 void test(const S& s) {
+  ASSERT_NOEXCEPT(s.empty());
+  assert(s.empty() == (s.size() == 0));
 }
 
 template <class S>
@@ -40,8 +38,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/length.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/length.pass.cpp
index 9ef48845c420131..e873f82c4830b6e 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/length.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/length.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s)
-{
-    assert(s.length() == s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s) {
+  assert(s.length() == s.size());
 }
 
 template <class S>
@@ -39,8 +37,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/max_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/max_size.pass.cpp
index ca4b05b8b055afa..ac17dac6e3efcd5 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/max_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/max_size.pass.cpp
@@ -26,34 +26,34 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test1(const S& s)
-{
-    S s2(s);
-    const std::size_t sz = s2.max_size() - 1;
-    try { s2.resize(sz, 'x'); }
-    catch ( const std::bad_alloc & ) { return ; }
-    assert ( s2.size() ==  sz );
+TEST_CONSTEXPR_CXX20 void test1(const S& s) {
+  S s2(s);
+  const std::size_t sz = s2.max_size() - 1;
+  try {
+    s2.resize(sz, 'x');
+  } catch (const std::bad_alloc&) {
+    return;
+  }
+  assert(s2.size() == sz);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test2(const S& s)
-{
-    S s2(s);
-    const std::size_t sz = s2.max_size();
-    try { s2.resize(sz, 'x'); }
-    catch ( const std::bad_alloc & ) { return ; }
-    assert ( s.size() ==  sz );
+TEST_CONSTEXPR_CXX20 void test2(const S& s) {
+  S s2(s);
+  const std::size_t sz = s2.max_size();
+  try {
+    s2.resize(sz, 'x');
+  } catch (const std::bad_alloc&) {
+    return;
+  }
+  assert(s.size() == sz);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s)
-{
-    assert(s.max_size() >= s.size());
-    test1(s);
-    test2(s);
+TEST_CONSTEXPR_CXX20 void test(const S& s) {
+  assert(s.max_size() >= s.size());
+  test1(s);
+  test2(s);
 }
 
 template <class S>
@@ -83,8 +83,7 @@ constexpr bool test_constexpr() {
 }
 #endif
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   test_constexpr();

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp
index 80f4e874fffb13b..0b459f9625689e7 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/over_max_size.pass.cpp
@@ -26,15 +26,16 @@
 #include "min_allocator.h"
 
 template <class S>
-void
-test(const S& s)
-{
-    assert(s.max_size() >= s.size());
-    S s2(s);
-    const std::size_t sz = s2.max_size() + 1;
-    try { s2.resize(sz, 'x'); }
-    catch ( const std::length_error & ) { return ; }
-    assert ( false );
+void test(const S& s) {
+  assert(s.max_size() >= s.size());
+  S s2(s);
+  const std::size_t sz = s2.max_size() + 1;
+  try {
+    s2.resize(sz, 'x');
+  } catch (const std::length_error&) {
+    return;
+  }
+  assert(false);
 }
 
 template <class S>
@@ -53,8 +54,7 @@ bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 
   return 0;

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/reserve.deprecated_in_cxx20.verify.cpp b/libcxx/test/std/strings/basic.string/string.capacity/reserve.deprecated_in_cxx20.verify.cpp
index 632f7fd0523a167..79d6c3214e2d19b 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/reserve.deprecated_in_cxx20.verify.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/reserve.deprecated_in_cxx20.verify.cpp
@@ -15,6 +15,6 @@
 #include <string>
 
 void f() {
-    std::string s;
-    s.reserve(); // expected-warning {{'reserve' is deprecated}}
+  std::string s;
+  s.reserve(); // expected-warning {{'reserve' is deprecated}}
 }

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp
index 840fd14c5453778..03e3cf2f9d7d38e 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp
@@ -20,21 +20,19 @@
 #include "min_allocator.h"
 
 template <class S>
-void
-test(typename S::size_type min_cap, typename S::size_type erased_index)
-{
-    S s(min_cap, 'a');
-    s.erase(erased_index);
-    assert(s.size() == erased_index);
-    assert(s.capacity() >= min_cap); // Check that we really have at least this capacity.
-
-    typename S::size_type old_cap = s.capacity();
-    S s0 = s;
-    s.reserve();
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == s0);
-    assert(s.capacity() <= old_cap);
-    assert(s.capacity() >= s.size());
+void test(typename S::size_type min_cap, typename S::size_type erased_index) {
+  S s(min_cap, 'a');
+  s.erase(erased_index);
+  assert(s.size() == erased_index);
+  assert(s.capacity() >= min_cap); // Check that we really have at least this capacity.
+
+  typename S::size_type old_cap = s.capacity();
+  S s0                          = s;
+  s.reserve();
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == s0);
+  assert(s.capacity() <= old_cap);
+  assert(s.capacity() >= s.size());
 }
 
 template <class S>
@@ -53,8 +51,7 @@ bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 
   return 0;

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp
index 45c58677a5ffee9..bb804bf328b3b8d 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp
@@ -23,42 +23,36 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(typename S::size_type min_cap, typename S::size_type erased_index, typename S::size_type res_arg)
-{
-    S s(min_cap, 'a');
-    s.erase(erased_index);
-    assert(s.size() == erased_index);
-    assert(s.capacity() >= min_cap); // Check that we really have at least this capacity.
+test(typename S::size_type min_cap, typename S::size_type erased_index, typename S::size_type res_arg) {
+  S s(min_cap, 'a');
+  s.erase(erased_index);
+  assert(s.size() == erased_index);
+  assert(s.capacity() >= min_cap); // Check that we really have at least this capacity.
 
 #if TEST_STD_VER > 17
-    typename S::size_type old_cap = s.capacity();
+  typename S::size_type old_cap = s.capacity();
 #endif
-    S s0 = s;
-    if (res_arg <= s.max_size())
-    {
-        s.reserve(res_arg);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == s0);
-        assert(s.capacity() >= res_arg);
-        assert(s.capacity() >= s.size());
+  S s0 = s;
+  if (res_arg <= s.max_size()) {
+    s.reserve(res_arg);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == s0);
+    assert(s.capacity() >= res_arg);
+    assert(s.capacity() >= s.size());
 #if TEST_STD_VER > 17
-        assert(s.capacity() >= old_cap); // reserve never shrinks as of P0966 (C++20)
+    assert(s.capacity() >= old_cap); // reserve never shrinks as of P0966 (C++20)
 #endif
-    }
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.reserve(res_arg);
-            LIBCPP_ASSERT(s.__invariants());
-            assert(false);
-        }
-        catch (std::length_error&)
-        {
-            assert(res_arg > s.max_size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.reserve(res_arg);
+      LIBCPP_ASSERT(s.__invariants());
+      assert(false);
+    } catch (std::length_error&) {
+      assert(res_arg > s.max_size());
     }
+  }
 #endif
 }
 
@@ -88,8 +82,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/resize_and_overwrite.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/resize_and_overwrite.pass.cpp
index 3fafde81e8abf05..a0d7f782de1f5b3 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/resize_and_overwrite.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/resize_and_overwrite.pass.cpp
@@ -49,7 +49,7 @@ constexpr void test_truncating(std::size_t o, size_t N) {
     LIBCPP_ASSERT(s.begin().base() == p);
     assert(std::all_of(p, p + n, [](auto ch) { return ch == 'a'; }));
     p[n - 1] = 'b';
-    p[n] = 'c'; // will be overwritten
+    p[n]     = 'c'; // will be overwritten
     return n;
   });
   const S expected = S(N - 1, 'a') + S(1, 'b');

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp
index 16e1323e7a75f1e..487b12d9df87f33 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp
@@ -18,28 +18,21 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type n, S expected)
-{
-    if (n <= s.max_size())
-    {
-        s.resize(n);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type n, S expected) {
+  if (n <= s.max_size()) {
+    s.resize(n);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.resize(n);
-            assert(false);
-        }
-        catch (std::length_error&)
-        {
-            assert(n > s.max_size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.resize(n);
+      assert(false);
+    } catch (std::length_error&) {
+      assert(n > s.max_size());
     }
+  }
 #endif
 }
 
@@ -54,12 +47,13 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("12345"), 5, S("12345"));
   test(S("12345"), 15, S("12345\0\0\0\0\0\0\0\0\0\0", 15));
   test(S("12345678901234567890123456789012345678901234567890"), 0, S());
-  test(S("12345678901234567890123456789012345678901234567890"), 10,
-        S("1234567890"));
-  test(S("12345678901234567890123456789012345678901234567890"), 50,
-        S("12345678901234567890123456789012345678901234567890"));
-  test(S("12345678901234567890123456789012345678901234567890"), 60,
-        S("12345678901234567890123456789012345678901234567890\0\0\0\0\0\0\0\0\0\0", 60));
+  test(S("12345678901234567890123456789012345678901234567890"), 10, S("1234567890"));
+  test(S("12345678901234567890123456789012345678901234567890"),
+       50,
+       S("12345678901234567890123456789012345678901234567890"));
+  test(S("12345678901234567890123456789012345678901234567890"),
+       60,
+       S("12345678901234567890123456789012345678901234567890\0\0\0\0\0\0\0\0\0\0", 60));
   test(S(), S::npos, S("not going to happen"));
 }
 
@@ -72,8 +66,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp
index c35ffc2294239b1..3b6adc0b0afeb19 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp
@@ -18,28 +18,21 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type n, typename S::value_type c, S expected)
-{
-    if (n <= s.max_size())
-    {
-        s.resize(n, c);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type n, typename S::value_type c, S expected) {
+  if (n <= s.max_size()) {
+    s.resize(n, c);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.resize(n, c);
-            assert(false);
-        }
-        catch (std::length_error&)
-        {
-            assert(n > s.max_size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.resize(n, c);
+      assert(false);
+    } catch (std::length_error&) {
+      assert(n > s.max_size());
     }
+  }
 #endif
 }
 
@@ -54,12 +47,15 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("12345"), 5, 'a', S("12345"));
   test(S("12345"), 15, 'a', S("12345aaaaaaaaaa"));
   test(S("12345678901234567890123456789012345678901234567890"), 0, 'a', S());
-  test(S("12345678901234567890123456789012345678901234567890"), 10, 'a',
-        S("1234567890"));
-  test(S("12345678901234567890123456789012345678901234567890"), 50, 'a',
-        S("12345678901234567890123456789012345678901234567890"));
-  test(S("12345678901234567890123456789012345678901234567890"), 60, 'a',
-        S("12345678901234567890123456789012345678901234567890aaaaaaaaaa"));
+  test(S("12345678901234567890123456789012345678901234567890"), 10, 'a', S("1234567890"));
+  test(S("12345678901234567890123456789012345678901234567890"),
+       50,
+       'a',
+       S("12345678901234567890123456789012345678901234567890"));
+  test(S("12345678901234567890123456789012345678901234567890"),
+       60,
+       'a',
+       S("12345678901234567890123456789012345678901234567890aaaaaaaaaa"));
   test(S(), S::npos, 'a', S("not going to happen"));
 }
 
@@ -72,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.explicit_instantiation.sh.cpp b/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.explicit_instantiation.sh.cpp
index 9f0f2ed714bcfc5..12a0b4c1f532c5b 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.explicit_instantiation.sh.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.explicit_instantiation.sh.cpp
@@ -31,7 +31,7 @@ struct string16_char_traits {
   typedef std::mbstate_t state_type;
   typedef std::fpos<state_type> pos_type;
 
-  static void assign(char_type&, const char_type&) { }
+  static void assign(char_type&, const char_type&) {}
   static bool eq(const char_type&, const char_type&) { return false; }
   static bool lt(const char_type&, const char_type&) { return false; }
   static int compare(const char_type*, const char_type*, std::size_t) { return 0; }
@@ -53,7 +53,7 @@ template class std::basic_string<char16, string16_char_traits>;
 extern template class std::basic_string<char16, string16_char_traits>;
 
 int main(int, char**) {
-    std::basic_string<char16, string16_char_traits> s;
-    s.shrink_to_fit();
+  std::basic_string<char16, string16_char_traits> s;
+  s.shrink_to_fit();
 }
 #endif

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp
index 376182e3cbfff72..1efebfc9cea561b 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp
@@ -17,16 +17,14 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s)
-{
-    typename S::size_type old_cap = s.capacity();
-    S s0 = s;
-    s.shrink_to_fit();
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == s0);
-    assert(s.capacity() <= old_cap);
-    assert(s.capacity() >= s.size());
+TEST_CONSTEXPR_CXX20 void test(S s) {
+  typename S::size_type old_cap = s.capacity();
+  S s0                          = s;
+  s.shrink_to_fit();
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == s0);
+  assert(s.capacity() <= old_cap);
+  assert(s.capacity() >= s.size());
 }
 
 template <class S>
@@ -52,8 +50,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/size.pass.cpp
index 05d77487131bf18..9d53971779b6480 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/size.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::size_type c)
-{
-    assert(s.size() == c);
+TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::size_type c) {
+  assert(s.size() == c);
 }
 
 template <class S>
@@ -39,8 +37,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp
index 0021684bf34be80..edbc41f060cc560 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp
@@ -25,69 +25,55 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(SV sv, std::size_t pos, std::size_t n)
-{
-    typedef typename S::traits_type T;
-    typedef typename S::allocator_type A;
-    typedef typename S::size_type Size;
-    if (pos <= sv.size())
-    {
-        S s2(sv, static_cast<Size>(pos), static_cast<Size>(n));
-        LIBCPP_ASSERT(s2.__invariants());
-        assert(pos <= sv.size());
-        std::size_t rlen = std::min(sv.size() - pos, n);
-        assert(s2.size() == rlen);
-        assert(T::compare(s2.data(), sv.data() + pos, rlen) == 0);
-        assert(s2.get_allocator() == A());
-        assert(s2.capacity() >= s2.size());
-    }
+TEST_CONSTEXPR_CXX20 void test(SV sv, std::size_t pos, std::size_t n) {
+  typedef typename S::traits_type T;
+  typedef typename S::allocator_type A;
+  typedef typename S::size_type Size;
+  if (pos <= sv.size()) {
+    S s2(sv, static_cast<Size>(pos), static_cast<Size>(n));
+    LIBCPP_ASSERT(s2.__invariants());
+    assert(pos <= sv.size());
+    std::size_t rlen = std::min(sv.size() - pos, n);
+    assert(s2.size() == rlen);
+    assert(T::compare(s2.data(), sv.data() + pos, rlen) == 0);
+    assert(s2.get_allocator() == A());
+    assert(s2.capacity() >= s2.size());
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            S s2(sv, static_cast<Size>(pos), static_cast<Size>(n));
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > sv.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      S s2(sv, static_cast<Size>(pos), static_cast<Size>(n));
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > sv.size());
     }
+  }
 #endif
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(SV sv, std::size_t pos, std::size_t n, const typename S::allocator_type& a)
-{
-    typedef typename S::traits_type T;
-    typedef typename S::size_type Size;
-    if (pos <= sv.size())
-    {
-        S s2(sv, static_cast<Size>(pos), static_cast<Size>(n), a);
-        LIBCPP_ASSERT(s2.__invariants());
-        assert(pos <= sv.size());
-        std::size_t rlen = std::min(sv.size() - pos, n);
-        assert(s2.size() == rlen);
-        assert(T::compare(s2.data(), sv.data() + pos, rlen) == 0);
-        assert(s2.get_allocator() == a);
-        assert(s2.capacity() >= s2.size());
-    }
+TEST_CONSTEXPR_CXX20 void test(SV sv, std::size_t pos, std::size_t n, const typename S::allocator_type& a) {
+  typedef typename S::traits_type T;
+  typedef typename S::size_type Size;
+  if (pos <= sv.size()) {
+    S s2(sv, static_cast<Size>(pos), static_cast<Size>(n), a);
+    LIBCPP_ASSERT(s2.__invariants());
+    assert(pos <= sv.size());
+    std::size_t rlen = std::min(sv.size() - pos, n);
+    assert(s2.size() == rlen);
+    assert(T::compare(s2.data(), sv.data() + pos, rlen) == 0);
+    assert(s2.get_allocator() == a);
+    assert(s2.capacity() >= s2.size());
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            S s2(sv, static_cast<Size>(pos), static_cast<Size>(n), a);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > sv.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      S s2(sv, static_cast<Size>(pos), static_cast<Size>(n), a);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > sv.size());
     }
+  }
 #endif
 }
 
@@ -95,98 +81,97 @@ TEST_CONSTEXPR_CXX20 bool test() {
   {
     typedef test_allocator<char> A;
     typedef std::basic_string_view<char, std::char_traits<char> > SV;
-    typedef std::basic_string     <char, std::char_traits<char>, A> S;
-
-    test<S,SV>(SV(), 0, 0);
-    test<S,SV>(SV(), 0, 1);
-    test<S,SV>(SV(), 1, 0);
-    test<S,SV>(SV(), 1, 1);
-    test<S,SV>(SV(), 1, 2);
-    test<S,SV>(SV("1"), 0, 0);
-    test<S,SV>(SV("1"), 0, 1);
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50,   0);
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50,   1);
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50,  10);
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 100);
-
-    test<S,SV>(SV(), 0, 0, A(4));
-    test<S,SV>(SV(), 0, 1, A(4));
-    test<S,SV>(SV(), 1, 0, A(4));
-    test<S,SV>(SV(), 1, 1, A(4));
-    test<S,SV>(SV(), 1, 2, A(4));
-    test<S,SV>(SV("1"), 0, 0, A(6));
-    test<S,SV>(SV("1"), 0, 1, A(6));
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50,   0, A(8));
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50,   1, A(8));
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50,  10, A(8));
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 100, A(8));
+    typedef std::basic_string<char, std::char_traits<char>, A> S;
+
+    test<S, SV>(SV(), 0, 0);
+    test<S, SV>(SV(), 0, 1);
+    test<S, SV>(SV(), 1, 0);
+    test<S, SV>(SV(), 1, 1);
+    test<S, SV>(SV(), 1, 2);
+    test<S, SV>(SV("1"), 0, 0);
+    test<S, SV>(SV("1"), 0, 1);
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 0);
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 1);
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 10);
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 100);
+
+    test<S, SV>(SV(), 0, 0, A(4));
+    test<S, SV>(SV(), 0, 1, A(4));
+    test<S, SV>(SV(), 1, 0, A(4));
+    test<S, SV>(SV(), 1, 1, A(4));
+    test<S, SV>(SV(), 1, 2, A(4));
+    test<S, SV>(SV("1"), 0, 0, A(6));
+    test<S, SV>(SV("1"), 0, 1, A(6));
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 0, A(8));
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 1, A(8));
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 10, A(8));
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 100, A(8));
   }
 
 #if TEST_STD_VER >= 11
   {
     typedef min_allocator<char> A;
     typedef std::basic_string_view<char, std::char_traits<char> > SV;
-    typedef std::basic_string     <char, std::char_traits<char>, A> S;
-
-    test<S,SV>(SV(), 0, 0);
-    test<S,SV>(SV(), 0, 1);
-    test<S,SV>(SV(), 1, 0);
-    test<S,SV>(SV(), 1, 1);
-    test<S,SV>(SV(), 1, 2);
-    test<S,SV>(SV("1"), 0, 0);
-    test<S,SV>(SV("1"), 0, 1);
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 0);
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 1);
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 10);
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 100);
-
-    test<S,SV>(SV(), 0, 0, A());
-    test<S,SV>(SV(), 0, 1, A());
-    test<S,SV>(SV(), 1, 0, A());
-    test<S,SV>(SV(), 1, 1, A());
-    test<S,SV>(SV(), 1, 2, A());
-    test<S,SV>(SV("1"), 0, 0, A());
-    test<S,SV>(SV("1"), 0, 1, A());
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 0, A());
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 1, A());
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 10, A());
-    test<S,SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 100, A());
+    typedef std::basic_string<char, std::char_traits<char>, A> S;
+
+    test<S, SV>(SV(), 0, 0);
+    test<S, SV>(SV(), 0, 1);
+    test<S, SV>(SV(), 1, 0);
+    test<S, SV>(SV(), 1, 1);
+    test<S, SV>(SV(), 1, 2);
+    test<S, SV>(SV("1"), 0, 0);
+    test<S, SV>(SV("1"), 0, 1);
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 0);
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 1);
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 10);
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 100);
+
+    test<S, SV>(SV(), 0, 0, A());
+    test<S, SV>(SV(), 0, 1, A());
+    test<S, SV>(SV(), 1, 0, A());
+    test<S, SV>(SV(), 1, 1, A());
+    test<S, SV>(SV(), 1, 2, A());
+    test<S, SV>(SV("1"), 0, 0, A());
+    test<S, SV>(SV("1"), 0, 1, A());
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 0, A());
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 1, A());
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 10, A());
+    test<S, SV>(SV("1234567890123456789012345678901234567890123456789012345678901234567890"), 50, 100, A());
   }
 #endif
   {
     typedef std::string S;
     typedef std::string_view SV;
-    S s = "ABCD";
-    SV sv = "EFGH";
+    S s        = "ABCD";
+    SV sv      = "EFGH";
     char arr[] = "IJKL";
 
-    S s1("CDEF", 4);    // calls ctor(const char *, len)
+    S s1("CDEF", 4); // calls ctor(const char *, len)
     assert(s1 == "CDEF");
 
     S s2("QRST", 0, 3); // calls ctor(string("QRST", pos, len)
     assert(s2 == "QRS");
 
-    S s3(sv, 0, std::string::npos);   // calls ctor(T, pos, npos)
+    S s3(sv, 0, std::string::npos); // calls ctor(T, pos, npos)
     assert(s3 == sv);
 
-    S s4(sv, 0, 3);   // calls ctor(T, pos, len)
+    S s4(sv, 0, 3); // calls ctor(T, pos, len)
     assert(s4 == "EFG");
 
-    S s5(arr, 0, 2);     // calls ctor(const char *, len)
+    S s5(arr, 0, 2); // calls ctor(const char *, len)
     assert(s5 == "IJ");
 
-    S s6(arr, 0);     // calls ctor(const char *, len)
+    S s6(arr, 0); // calls ctor(const char *, len)
     assert(s6 == "");
 
-    S s7(s.data(), 2);     // calls ctor(const char *, len)
+    S s7(s.data(), 2); // calls ctor(const char *, len)
     assert(s7 == "AB");
   }
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/alloc.pass.cpp
index add77f8e5732598..97a0566ba031b00 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/alloc.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/alloc.pass.cpp
@@ -18,14 +18,12 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test()
-{
-    {
+TEST_CONSTEXPR_CXX20 void test() {
+  {
 #if TEST_STD_VER > 14
-    static_assert((noexcept(S{})), "" );
+    static_assert((noexcept(S{})), "");
 #elif TEST_STD_VER >= 11
-    static_assert((noexcept(S()) == noexcept(typename S::allocator_type())), "" );
+    static_assert((noexcept(S()) == noexcept(typename S::allocator_type())), "");
 #endif
     S s;
     LIBCPP_ASSERT(s.__invariants());
@@ -33,12 +31,14 @@ test()
     assert(s.size() == 0);
     assert(s.capacity() >= s.size());
     assert(s.get_allocator() == typename S::allocator_type());
-    }
-    {
+  }
+  {
 #if TEST_STD_VER > 14
-    static_assert((noexcept(S{typename S::allocator_type{}})), "" );
+    static_assert((noexcept(S{typename S::allocator_type{}})), "");
 #elif TEST_STD_VER >= 11
-    static_assert((noexcept(S(typename S::allocator_type())) == std::is_nothrow_copy_constructible<typename S::allocator_type>::value), "" );
+    static_assert((noexcept(S(typename S::allocator_type())) ==
+                   std::is_nothrow_copy_constructible<typename S::allocator_type>::value),
+                  "");
 #endif
     S s(typename S::allocator_type(5));
     LIBCPP_ASSERT(s.__invariants());
@@ -46,41 +46,41 @@ test()
     assert(s.size() == 0);
     assert(s.capacity() >= s.size());
     assert(s.get_allocator() == typename S::allocator_type(5));
-    }
+  }
 }
 
 #if TEST_STD_VER >= 11
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test2()
-{
-    {
-#if TEST_STD_VER > 14
-    static_assert((noexcept(S{})), "" );
-#elif TEST_STD_VER >= 11
-    static_assert((noexcept(S()) == noexcept(typename S::allocator_type())), "" );
-#endif
+TEST_CONSTEXPR_CXX20 void test2() {
+  {
+#  if TEST_STD_VER > 14
+    static_assert((noexcept(S{})), "");
+#  elif TEST_STD_VER >= 11
+    static_assert((noexcept(S()) == noexcept(typename S::allocator_type())), "");
+#  endif
     S s;
     LIBCPP_ASSERT(s.__invariants());
     assert(s.data());
     assert(s.size() == 0);
     assert(s.capacity() >= s.size());
     assert(s.get_allocator() == typename S::allocator_type());
-    }
-    {
-#if TEST_STD_VER > 14
-    static_assert((noexcept(S{typename S::allocator_type{}})), "" );
-#elif TEST_STD_VER >= 11
-    static_assert((noexcept(S(typename S::allocator_type())) == std::is_nothrow_copy_constructible<typename S::allocator_type>::value), "" );
-#endif
+  }
+  {
+#  if TEST_STD_VER > 14
+    static_assert((noexcept(S{typename S::allocator_type{}})), "");
+#  elif TEST_STD_VER >= 11
+    static_assert((noexcept(S(typename S::allocator_type())) ==
+                   std::is_nothrow_copy_constructible<typename S::allocator_type>::value),
+                  "");
+#  endif
     S s(typename S::allocator_type{});
     LIBCPP_ASSERT(s.__invariants());
     assert(s.data());
     assert(s.size() == 0);
     assert(s.capacity() >= s.size());
     assert(s.get_allocator() == typename S::allocator_type());
-    }
+  }
 }
 
 #endif
@@ -95,8 +95,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/brace_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/brace_assignment.pass.cpp
index 6c676b7ce15b5f7..e7d18b4ca87179d 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/brace_assignment.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/brace_assignment.pass.cpp
@@ -23,20 +23,19 @@ TEST_CONSTEXPR_CXX20 bool test() {
   // ambiguous.
   {
     std::string s = "hello world";
-    s = {};
+    s             = {};
     assert(s.empty());
   }
   {
     std::string s = "hello world";
-    s = {"abc", 2};
+    s             = {"abc", 2};
     assert(s == "ab");
   }
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp
index 38130b1b4bcb59a..3cffc82e9483526 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp
@@ -17,15 +17,13 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s1, typename S::value_type s2)
-{
-    typedef typename S::traits_type T;
-    s1 = s2;
-    LIBCPP_ASSERT(s1.__invariants());
-    assert(s1.size() == 1);
-    assert(T::eq(s1[0], s2));
-    assert(s1.capacity() >= s1.size());
+TEST_CONSTEXPR_CXX20 void test(S s1, typename S::value_type s2) {
+  typedef typename S::traits_type T;
+  s1 = s2;
+  LIBCPP_ASSERT(s1.__invariants());
+  assert(s1.size() == 1);
+  assert(T::eq(s1[0], s2));
+  assert(s1.capacity() >= s1.size());
 }
 
 template <class S>
@@ -45,8 +43,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp
index 6ce2b12127e0f26..6b10388f5258bea 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp
@@ -18,14 +18,12 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s1)
-{
-    S s2 = s1;
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s2 == s1);
-    assert(s2.capacity() >= s2.size());
-    assert(s2.get_allocator() == s1.get_allocator());
+TEST_CONSTEXPR_CXX20 void test(S s1) {
+  S s2 = s1;
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s2 == s1);
+  assert(s2.capacity() >= s2.size());
+  assert(s2.get_allocator() == s1.get_allocator());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -49,8 +47,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp
index 9d6c162399f2b38..2d45f38d6afc24e 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp
@@ -19,73 +19,70 @@
 
 #ifndef TEST_HAS_NO_EXCEPTIONS
 struct alloc_imp {
-    bool active;
-
-    TEST_CONSTEXPR alloc_imp() : active(true) {}
-
-    template <class T>
-    T* allocate(std::size_t n)
-    {
-        if (active)
-            return static_cast<T*>(std::malloc(n * sizeof(T)));
-        else
-            throw std::bad_alloc();
-    }
-
-    template <class T>
-    void deallocate(T* p, std::size_t) { std::free(p); }
-    void activate  ()                  { active = true; }
-    void deactivate()                  { active = false; }
+  bool active;
+
+  TEST_CONSTEXPR alloc_imp() : active(true) {}
+
+  template <class T>
+  T* allocate(std::size_t n) {
+    if (active)
+      return static_cast<T*>(std::malloc(n * sizeof(T)));
+    else
+      throw std::bad_alloc();
+  }
+
+  template <class T>
+  void deallocate(T* p, std::size_t) {
+    std::free(p);
+  }
+  void activate() { active = true; }
+  void deactivate() { active = false; }
 };
 
 template <class T>
 struct poca_alloc {
-    typedef T value_type;
-    typedef std::true_type propagate_on_container_copy_assignment;
+  typedef T value_type;
+  typedef std::true_type propagate_on_container_copy_assignment;
 
-    alloc_imp *imp;
+  alloc_imp* imp;
 
-    TEST_CONSTEXPR poca_alloc(alloc_imp *imp_) : imp (imp_) {}
+  TEST_CONSTEXPR poca_alloc(alloc_imp* imp_) : imp(imp_) {}
 
-    template <class U>
-    TEST_CONSTEXPR poca_alloc(const poca_alloc<U>& other) : imp(other.imp) {}
+  template <class U>
+  TEST_CONSTEXPR poca_alloc(const poca_alloc<U>& other) : imp(other.imp) {}
 
-    T*   allocate  (std::size_t n)       { return imp->allocate<T>(n);}
-    void deallocate(T* p, std::size_t n) { imp->deallocate(p, n); }
+  T* allocate(std::size_t n) { return imp->allocate<T>(n); }
+  void deallocate(T* p, std::size_t n) { imp->deallocate(p, n); }
 };
 
 template <typename T, typename U>
-bool operator==(const poca_alloc<T>& lhs, const poca_alloc<U>& rhs)
-{
-    return lhs.imp == rhs.imp;
+bool operator==(const poca_alloc<T>& lhs, const poca_alloc<U>& rhs) {
+  return lhs.imp == rhs.imp;
 }
 
 template <typename T, typename U>
-bool operator!=(const poca_alloc<T>& lhs, const poca_alloc<U>& rhs)
-{
-    return lhs.imp != rhs.imp;
+bool operator!=(const poca_alloc<T>& lhs, const poca_alloc<U>& rhs) {
+  return lhs.imp != rhs.imp;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test_assign(S &s1, const S& s2)
-{
-    try { s1 = s2; }
-    catch ( std::bad_alloc &) { return; }
-    assert(false);
+TEST_CONSTEXPR_CXX20 void test_assign(S& s1, const S& s2) {
+  try {
+    s1 = s2;
+  } catch (std::bad_alloc&) {
+    return;
+  }
+  assert(false);
 }
 #endif
 
-
-
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s1, const typename S::allocator_type& a)
-{
-    S s2(s1, a);
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s2 == s1);
-    assert(s2.capacity() >= s2.size());
-    assert(s2.get_allocator() == a);
+TEST_CONSTEXPR_CXX20 void test(S s1, const typename S::allocator_type& a) {
+  S s2(s1, a);
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s2 == s1);
+  assert(s2.capacity() >= s2.size());
+  assert(s2.get_allocator() == a);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -105,12 +102,12 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test(S("1234567890123456789012345678901234567890123456789012345678901234567890"), A());
   }
 
-#ifndef TEST_HAS_NO_EXCEPTIONS
+#  ifndef TEST_HAS_NO_EXCEPTIONS
   if (!TEST_IS_CONSTANT_EVALUATED) {
     typedef poca_alloc<char> A;
     typedef std::basic_string<char, std::char_traits<char>, A> S;
-    const char * p1 = "This is my first string";
-    const char * p2 = "This is my second string";
+    const char* p1 = "This is my first string";
+    const char* p2 = "This is my second string";
 
     alloc_imp imp1;
     alloc_imp imp2;
@@ -125,14 +122,13 @@ TEST_CONSTEXPR_CXX20 bool test() {
     assert(s1 == p1);
     assert(s2 == p2);
   }
-#endif
+#  endif
 #endif
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/copy_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/copy_assignment.pass.cpp
index 3b925d31cb913d6..8d0fcb3c6d2943f 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/copy_assignment.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/copy_assignment.pass.cpp
@@ -18,13 +18,11 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s1, const S& s2)
-{
-    s1 = s2;
-    LIBCPP_ASSERT(s1.__invariants());
-    assert(s1 == s2);
-    assert(s1.capacity() >= s1.size());
+TEST_CONSTEXPR_CXX20 void test(S s1, const S& s2) {
+  s1 = s2;
+  LIBCPP_ASSERT(s1.__invariants());
+  assert(s1 == s2);
+  assert(s1.capacity() >= s1.size());
 }
 
 template <class S>
@@ -35,15 +33,13 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("1"), S("2"));
   test(S("1"), S("2"));
 
-  test(S(),
-        S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
-  test(S("123456789"),
-        S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
+  test(S(), S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
+  test(S("123456789"), S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
   test(S("1234567890123456789012345678901234567890123456789012345678901234567890"),
-        S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
+       S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
   test(S("1234567890123456789012345678901234567890123456789012345678901234567890"
-          "1234567890123456789012345678901234567890123456789012345678901234567890"),
-        S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
+         "1234567890123456789012345678901234567890123456789012345678901234567890"),
+       S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -53,7 +49,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
 #endif
 
 #if TEST_STD_VER >= 11
-  {   // LWG 2946
+  { // LWG 2946
     std::string s;
     s = {"abc", 1};
     assert(s.size() == 1);
@@ -64,8 +60,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/default.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/default.pass.cpp
index beb16c099f025b1..3993a40dd5a165c 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/default.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/default.pass.cpp
@@ -20,9 +20,11 @@
 // Test the noexcept specification, which is a conforming extension
 LIBCPP_STATIC_ASSERT(std::is_nothrow_default_constructible<std::string>::value, "");
 LIBCPP_STATIC_ASSERT(std::is_nothrow_default_constructible<
-                     std::basic_string<char, std::char_traits<char>, test_allocator<char>>>::value, "");
+                         std::basic_string<char, std::char_traits<char>, test_allocator<char>>>::value,
+                     "");
 LIBCPP_STATIC_ASSERT(!std::is_nothrow_default_constructible<
-                     std::basic_string<char, std::char_traits<char>, limited_allocator<char, 10>>>::value, "");
+                         std::basic_string<char, std::char_traits<char>, limited_allocator<char, 10>>>::value,
+                     "");
 #endif
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -32,8 +34,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/dtor.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/dtor.pass.cpp
index 92d6531224cc180..e9f174068473d55 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/dtor.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/dtor.pass.cpp
@@ -19,12 +19,11 @@
 #include "test_allocator.h"
 
 template <class T>
-struct throwing_alloc
-{
-    typedef T value_type;
-    throwing_alloc(const throwing_alloc&);
-    T *allocate(std::size_t);
-    ~throwing_alloc() noexcept(false);
+struct throwing_alloc {
+  typedef T value_type;
+  throwing_alloc(const throwing_alloc&);
+  T* allocate(std::size_t);
+  ~throwing_alloc() noexcept(false);
 };
 
 // Test that it's possible to take the address of basic_string's destructors
@@ -35,10 +34,10 @@ std::wstring unused_wide_string;
 #endif
 
 static_assert(std::is_nothrow_destructible<std::string>::value, "");
-static_assert(std::is_nothrow_destructible<
-                std::basic_string<char, std::char_traits<char>, test_allocator<char>>>::value, "");
-LIBCPP_STATIC_ASSERT(!std::is_nothrow_destructible<
-                     std::basic_string<char, std::char_traits<char>, throwing_alloc<char>>>::value, "");
+static_assert(
+    std::is_nothrow_destructible< std::basic_string<char, std::char_traits<char>, test_allocator<char>>>::value, "");
+LIBCPP_STATIC_ASSERT(
+    !std::is_nothrow_destructible< std::basic_string<char, std::char_traits<char>, throwing_alloc<char>>>::value, "");
 
 TEST_CONSTEXPR_CXX20 bool test() {
   test_allocator_statistics alloc_stats;
@@ -53,8 +52,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/from_range.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/from_range.pass.cpp
index b8ec2f47f8d86ae..3ae5b74a3504a04 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/from_range.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/from_range.pass.cpp
@@ -21,9 +21,8 @@
 #include "test_macros.h"
 
 template <class Container, class Range, class Alloc>
-concept StringHasFromRangeAllocCtr = requires (Range&& range, const Alloc& alloc) {
-  Container(std::from_range, std::forward<Range>(range), alloc);
-};
+concept StringHasFromRangeAllocCtr =
+    requires(Range&& range, const Alloc& alloc) { Container(std::from_range, std::forward<Range>(range), alloc); };
 
 constexpr bool test_constraints() {
   // (from_range, range)
@@ -42,7 +41,7 @@ constexpr bool test_constraints() {
   // (from_range, range, alloc)
   //
   // Input range with the same value type.
-  using Alloc = test_allocator<char>;
+  using Alloc           = test_allocator<char>;
   using StringWithAlloc = std::basic_string<char, std::char_traits<char>, Alloc>;
   static_assert(StringHasFromRangeAllocCtr<StringWithAlloc, InputRange<char>, Alloc>);
   // Input range with a convertible value type.
@@ -59,9 +58,7 @@ constexpr bool test_constraints() {
   return true;
 }
 
-template <class Iter,
-          class Sent,
-          class Alloc>
+template <class Iter, class Sent, class Alloc>
 constexpr void test_with_input(std::vector<char> input) {
   auto b = Iter(input.data());
   auto e = Iter(input.data() + input.size());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/from_range_deduction.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/from_range_deduction.pass.cpp
index 4df4d39c2355eea..b2dab03506f03a4 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/from_range_deduction.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/from_range_deduction.pass.cpp
@@ -43,7 +43,9 @@ int main(int, char**) {
 
   // Note: defining `value_type` is a workaround because one of the deduction guides will end up instantiating
   // `basic_string`, and that would fail with a hard error if the given allocator doesn't define `value_type`.
-  struct BadAlloc { using value_type = char; };
+  struct BadAlloc {
+    using value_type = char;
+  };
   SequenceContainerDeductionGuidesSfinaeAway<std::basic_string, std::basic_string<char>, BadAlloc>();
 
   return 0;

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/implicit_deduction_guides.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/implicit_deduction_guides.pass.cpp
index 5f3064bc0452bae..e0fa234639bd06e 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/implicit_deduction_guides.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/implicit_deduction_guides.pass.cpp
@@ -46,18 +46,17 @@ using BStr = std::basic_string<T, std::char_traits<T>, Alloc>;
 // (14) basic_string(BSV, A const& = A())
 // (15) basic_string(const T&, size_type, size_type, A const& = A())
 TEST_CONSTEXPR_CXX20 bool test() {
-
   using TestSizeT = test_allocator<char>::size_type;
-  { // Testing (1)
-    // Nothing to do. Cannot deduce without any arguments.
-  }
-  { // Testing (2)
-    // This overload isn't compatible with implicit deduction guides as
-    // specified in the standard.
-    // const test_allocator<char> alloc{};
-    // std::basic_string s(alloc);
-  }
-  { // Testing (3) w/o allocator
+  {
+      // Testing (1)
+      // Nothing to do. Cannot deduce without any arguments.
+  } {
+      // Testing (2)
+      // This overload isn't compatible with implicit deduction guides as
+      // specified in the standard.
+      // const test_allocator<char> alloc{};
+      // std::basic_string s(alloc);
+  } { // Testing (3) w/o allocator
     std::basic_string s(6ull, 'a');
     ASSERT_SAME_TYPE(decltype(s), std::string);
     assert(s == "aaaaaa");
@@ -70,7 +69,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   }
   { // Testing (3) w/ allocator
     std::basic_string s(6ull, 'a', test_allocator<char>{});
-    ASSERT_SAME_TYPE(decltype(s), BStr<char,test_allocator<char>>);
+    ASSERT_SAME_TYPE(decltype(s), BStr<char, test_allocator<char>>);
     assert(s == "aaaaaa");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
@@ -86,9 +85,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
     assert(s == "bc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using WStr = std::basic_string<wchar_t,
-                                  constexpr_char_traits<wchar_t>,
-                                  test_allocator<wchar_t>>;
+    using WStr = std::basic_string<wchar_t, constexpr_char_traits<wchar_t>, test_allocator<wchar_t>>;
     const WStr win(L"abcdef");
     std::basic_string w(win, (TestSizeT)3);
     ASSERT_SAME_TYPE(decltype(w), WStr);
@@ -102,9 +99,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
     assert(s == "bc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using WStr = std::basic_string<wchar_t,
-                                  constexpr_char_traits<wchar_t>,
-                                  test_allocator<wchar_t>>;
+    using WStr = std::basic_string<wchar_t, constexpr_char_traits<wchar_t>, test_allocator<wchar_t>>;
     const WStr win(L"abcdef");
     std::basic_string w(win, (TestSizeT)3, test_allocator<wchar_t>{});
     ASSERT_SAME_TYPE(decltype(w), WStr);
@@ -118,9 +113,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
     assert(s == "bc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using WStr = std::basic_string<wchar_t,
-                                  constexpr_char_traits<wchar_t>,
-                                  test_allocator<wchar_t>>;
+    using WStr = std::basic_string<wchar_t, constexpr_char_traits<wchar_t>, test_allocator<wchar_t>>;
     const WStr win(L"abcdef");
     std::basic_string w(win, (TestSizeT)2, (TestSizeT)3);
     ASSERT_SAME_TYPE(decltype(w), WStr);
@@ -134,9 +127,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
     assert(s == "bc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using WStr = std::basic_string<wchar_t,
-                                  constexpr_char_traits<wchar_t>,
-                                  test_allocator<wchar_t>>;
+    using WStr = std::basic_string<wchar_t, constexpr_char_traits<wchar_t>, test_allocator<wchar_t>>;
     const WStr win(L"abcdef");
     std::basic_string w(win, (TestSizeT)2, (TestSizeT)3, test_allocator<wchar_t>{});
     ASSERT_SAME_TYPE(decltype(w), WStr);
@@ -160,9 +151,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
     assert(s == "ab");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using WStr = std::basic_string<wchar_t,
-                                  std::char_traits<wchar_t>,
-                                  test_allocator<wchar_t>>;
+    using WStr = std::basic_string<wchar_t, std::char_traits<wchar_t>, test_allocator<wchar_t>>;
     std::basic_string w(L"abcdef", (TestSizeT)3, test_allocator<wchar_t>{});
     ASSERT_SAME_TYPE(decltype(w), WStr);
     assert(w == L"abc");
@@ -185,191 +174,178 @@ TEST_CONSTEXPR_CXX20 bool test() {
     assert(s == "abc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using WStr = std::basic_string<wchar_t,
-                                  std::char_traits<wchar_t>,
-                                  test_allocator<wchar_t>>;
+    using WStr = std::basic_string<wchar_t, std::char_traits<wchar_t>, test_allocator<wchar_t>>;
     std::basic_string w(L"abcdef", test_allocator<wchar_t>{});
     ASSERT_SAME_TYPE(decltype(w), WStr);
     assert(w == L"abcdef");
 #endif
   }
   { // (8) w/o allocator
-    using It = cpp17_input_iterator<const char*>;
+    using It          = cpp17_input_iterator<const char*>;
     const char* input = "abcdef";
     std::basic_string s(It(input), It(input + 3), std::allocator<char>{});
     ASSERT_SAME_TYPE(decltype(s), std::string);
     assert(s == "abc");
   }
-  { // (8) w/ allocator
-    {
-      using Expect = std::basic_string<char, std::char_traits<char>, test_allocator<char>>;
-      using It = cpp17_input_iterator<const char*>;
-      const char* input = "abcdef";
-      std::basic_string s(It(input), It(input + 3), test_allocator<char>{});
-      ASSERT_SAME_TYPE(decltype(s), Expect);
-      assert(s == "abc");
-    }
+  {// (8) w/ allocator
+   {using Expect = std::basic_string<char, std::char_traits<char>, test_allocator<char>>;
+  using It          = cpp17_input_iterator<const char*>;
+  const char* input = "abcdef";
+  std::basic_string s(It(input), It(input + 3), test_allocator<char>{});
+  ASSERT_SAME_TYPE(decltype(s), Expect);
+  assert(s == "abc");
+}
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-      using ExpectW = std::basic_string<wchar_t, std::char_traits<wchar_t>, test_allocator<wchar_t>>;
-      using It = cpp17_input_iterator<const wchar_t*>;
-      const wchar_t* input = L"abcdef";
-      std::basic_string s(It(input), It(input + 3), test_allocator<wchar_t>{});
-      ASSERT_SAME_TYPE(decltype(s), ExpectW);
-      assert(s == L"abc");
-    }
+{
+  using ExpectW        = std::basic_string<wchar_t, std::char_traits<wchar_t>, test_allocator<wchar_t>>;
+  using It             = cpp17_input_iterator<const wchar_t*>;
+  const wchar_t* input = L"abcdef";
+  std::basic_string s(It(input), It(input + 3), test_allocator<wchar_t>{});
+  ASSERT_SAME_TYPE(decltype(s), ExpectW);
+  assert(s == L"abc");
+}
 #endif
-  }
-  { // Testing (9)
-    const std::string sin("abc");
-    std::basic_string s(sin);
-    ASSERT_SAME_TYPE(decltype(s), std::string);
-    assert(s == "abc");
+}
+{ // Testing (9)
+  const std::string sin("abc");
+  std::basic_string s(sin);
+  ASSERT_SAME_TYPE(decltype(s), std::string);
+  assert(s == "abc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using WStr = std::basic_string<wchar_t,
-                                  constexpr_char_traits<wchar_t>,
-                                  test_allocator<wchar_t>>;
-    const WStr win(L"abcdef");
-    std::basic_string w(win);
-    ASSERT_SAME_TYPE(decltype(w), WStr);
-    assert(w == L"abcdef");
+  using WStr = std::basic_string<wchar_t, constexpr_char_traits<wchar_t>, test_allocator<wchar_t>>;
+  const WStr win(L"abcdef");
+  std::basic_string w(win);
+  ASSERT_SAME_TYPE(decltype(w), WStr);
+  assert(w == L"abcdef");
 #endif
-  }
-  { // Testing (10)
-    const std::string sin("abc");
-    std::basic_string s(sin, std::allocator<char>{});
-    ASSERT_SAME_TYPE(decltype(s), std::string);
-    assert(s == "abc");
+}
+{ // Testing (10)
+  const std::string sin("abc");
+  std::basic_string s(sin, std::allocator<char>{});
+  ASSERT_SAME_TYPE(decltype(s), std::string);
+  assert(s == "abc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using WStr = std::basic_string<wchar_t,
-                                  constexpr_char_traits<wchar_t>,
-                                  test_allocator<wchar_t>>;
-    const WStr win(L"abcdef");
-    std::basic_string w(win, test_allocator<wchar_t>{});
-    ASSERT_SAME_TYPE(decltype(w), WStr);
-    assert(w == L"abcdef");
+  using WStr = std::basic_string<wchar_t, constexpr_char_traits<wchar_t>, test_allocator<wchar_t>>;
+  const WStr win(L"abcdef");
+  std::basic_string w(win, test_allocator<wchar_t>{});
+  ASSERT_SAME_TYPE(decltype(w), WStr);
+  assert(w == L"abcdef");
 #endif
-  }
-  { // Testing (11)
-    std::string sin("abc");
-    std::basic_string s(std::move(sin));
-    ASSERT_SAME_TYPE(decltype(s), std::string);
-    assert(s == "abc");
+}
+{ // Testing (11)
+  std::string sin("abc");
+  std::basic_string s(std::move(sin));
+  ASSERT_SAME_TYPE(decltype(s), std::string);
+  assert(s == "abc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using WStr = std::basic_string<wchar_t,
-                                  constexpr_char_traits<wchar_t>,
-                                  test_allocator<wchar_t>>;
-    WStr win(L"abcdef");
-    std::basic_string w(std::move(win));
-    ASSERT_SAME_TYPE(decltype(w), WStr);
-    assert(w == L"abcdef");
+  using WStr = std::basic_string<wchar_t, constexpr_char_traits<wchar_t>, test_allocator<wchar_t>>;
+  WStr win(L"abcdef");
+  std::basic_string w(std::move(win));
+  ASSERT_SAME_TYPE(decltype(w), WStr);
+  assert(w == L"abcdef");
 #endif
-  }
-  { // Testing (12)
-    std::string sin("abc");
-    std::basic_string s(std::move(sin), std::allocator<char>{});
-    ASSERT_SAME_TYPE(decltype(s), std::string);
-    assert(s == "abc");
+}
+{ // Testing (12)
+  std::string sin("abc");
+  std::basic_string s(std::move(sin), std::allocator<char>{});
+  ASSERT_SAME_TYPE(decltype(s), std::string);
+  assert(s == "abc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using WStr = std::basic_string<wchar_t,
-                                  constexpr_char_traits<wchar_t>,
-                                  test_allocator<wchar_t>>;
-    WStr win(L"abcdef");
-    std::basic_string w(std::move(win), test_allocator<wchar_t>{});
-    ASSERT_SAME_TYPE(decltype(w), WStr);
-    assert(w == L"abcdef");
+  using WStr = std::basic_string<wchar_t, constexpr_char_traits<wchar_t>, test_allocator<wchar_t>>;
+  WStr win(L"abcdef");
+  std::basic_string w(std::move(win), test_allocator<wchar_t>{});
+  ASSERT_SAME_TYPE(decltype(w), WStr);
+  assert(w == L"abcdef");
 #endif
-  }
-  { // Testing (13) w/o allocator
-    std::basic_string s({'a', 'b', 'c'});
-    ASSERT_SAME_TYPE(decltype(s), std::string);
-    assert(s == "abc");
+}
+{ // Testing (13) w/o allocator
+  std::basic_string s({'a', 'b', 'c'});
+  ASSERT_SAME_TYPE(decltype(s), std::string);
+  assert(s == "abc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    std::basic_string w({L'a', L'b', L'c'});
-    ASSERT_SAME_TYPE(decltype(w), std::wstring);
-    assert(w == L"abc");
+  std::basic_string w({L'a', L'b', L'c'});
+  ASSERT_SAME_TYPE(decltype(w), std::wstring);
+  assert(w == L"abc");
 #endif
-  }
-  { // Testing (13) w/ allocator
-    std::basic_string s({'a', 'b', 'c'}, test_allocator<char>{});
-    ASSERT_SAME_TYPE(decltype(s), BStr<char, test_allocator<char>>);
-    assert(s == "abc");
+}
+{ // Testing (13) w/ allocator
+  std::basic_string s({'a', 'b', 'c'}, test_allocator<char>{});
+  ASSERT_SAME_TYPE(decltype(s), BStr<char, test_allocator<char>>);
+  assert(s == "abc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    std::basic_string w({L'a', L'b', L'c'}, test_allocator<wchar_t>{});
-    ASSERT_SAME_TYPE(decltype(w), BStr<wchar_t, test_allocator<wchar_t>>);
-    assert(w == L"abc");
+  std::basic_string w({L'a', L'b', L'c'}, test_allocator<wchar_t>{});
+  ASSERT_SAME_TYPE(decltype(w), BStr<wchar_t, test_allocator<wchar_t>>);
+  assert(w == L"abc");
 #endif
-  }
-  { // Testing (14) w/o allocator
-    std::string_view sv("abc");
-    std::basic_string s(sv);
-    ASSERT_SAME_TYPE(decltype(s), std::string);
-    assert(s == "abc");
+}
+{ // Testing (14) w/o allocator
+  std::string_view sv("abc");
+  std::basic_string s(sv);
+  ASSERT_SAME_TYPE(decltype(s), std::string);
+  assert(s == "abc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using Expect = std::basic_string<wchar_t, constexpr_char_traits<wchar_t>>;
-    std::basic_string_view<wchar_t, constexpr_char_traits<wchar_t>> BSV(L"abcdef");
-    std::basic_string w(BSV);
-    ASSERT_SAME_TYPE(decltype(w), Expect);
-    assert(w == L"abcdef");
+  using Expect = std::basic_string<wchar_t, constexpr_char_traits<wchar_t>>;
+  std::basic_string_view<wchar_t, constexpr_char_traits<wchar_t>> BSV(L"abcdef");
+  std::basic_string w(BSV);
+  ASSERT_SAME_TYPE(decltype(w), Expect);
+  assert(w == L"abcdef");
 #endif
-  }
-  { // Testing (14) w/ allocator
-    using ExpectS = std::basic_string<char, std::char_traits<char>, test_allocator<char>>;
-    std::string_view sv("abc");
-    std::basic_string s(sv, test_allocator<char>{});
-    ASSERT_SAME_TYPE(decltype(s), ExpectS);
-    assert(s == "abc");
+}
+{ // Testing (14) w/ allocator
+  using ExpectS = std::basic_string<char, std::char_traits<char>, test_allocator<char>>;
+  std::string_view sv("abc");
+  std::basic_string s(sv, test_allocator<char>{});
+  ASSERT_SAME_TYPE(decltype(s), ExpectS);
+  assert(s == "abc");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using ExpectW = std::basic_string<wchar_t, constexpr_char_traits<wchar_t>,
-                                      test_allocator<wchar_t>>;
-    std::basic_string_view<wchar_t, constexpr_char_traits<wchar_t>> BSV(L"abcdef");
-    std::basic_string w(BSV, test_allocator<wchar_t>{});
-    ASSERT_SAME_TYPE(decltype(w), ExpectW);
-    assert(w == L"abcdef");
+  using ExpectW = std::basic_string<wchar_t, constexpr_char_traits<wchar_t>, test_allocator<wchar_t>>;
+  std::basic_string_view<wchar_t, constexpr_char_traits<wchar_t>> BSV(L"abcdef");
+  std::basic_string w(BSV, test_allocator<wchar_t>{});
+  ASSERT_SAME_TYPE(decltype(w), ExpectW);
+  assert(w == L"abcdef");
 #endif
-  }
-  { // Testing (15) w/o allocator
-    std::string s0("abc");
-    std::basic_string s(s0, 1, 1);
-    ASSERT_SAME_TYPE(decltype(s), std::string);
-    assert(s == "b");
+}
+{ // Testing (15) w/o allocator
+  std::string s0("abc");
+  std::basic_string s(s0, 1, 1);
+  ASSERT_SAME_TYPE(decltype(s), std::string);
+  assert(s == "b");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    std::wstring w0(L"abcdef");
-    std::basic_string w(w0, 2, 2);
-    ASSERT_SAME_TYPE(decltype(w), std::wstring);
-    assert(w == L"cd");
+  std::wstring w0(L"abcdef");
+  std::basic_string w(w0, 2, 2);
+  ASSERT_SAME_TYPE(decltype(w), std::wstring);
+  assert(w == L"cd");
 #endif
-  }
-  { // Testing (15) w/ allocator
-    using ExpectS = std::basic_string<char, std::char_traits<char>, test_allocator<char>>;
-    ExpectS s0("abc");
-    std::basic_string s(s0, 1, 1, test_allocator<char>{4});
-    ASSERT_SAME_TYPE(decltype(s), ExpectS);
-    assert(s == "b");
+}
+{ // Testing (15) w/ allocator
+  using ExpectS = std::basic_string<char, std::char_traits<char>, test_allocator<char>>;
+  ExpectS s0("abc");
+  std::basic_string s(s0, 1, 1, test_allocator<char>{4});
+  ASSERT_SAME_TYPE(decltype(s), ExpectS);
+  assert(s == "b");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    using ExpectW = std::basic_string<wchar_t, std::char_traits<wchar_t>, test_allocator<wchar_t>>;
-    ExpectW w0(L"abcdef");
-    std::basic_string w(w0, 2, 2, test_allocator<wchar_t>{6});
-    ASSERT_SAME_TYPE(decltype(w), ExpectW);
-    assert(w == L"cd");
+  using ExpectW = std::basic_string<wchar_t, std::char_traits<wchar_t>, test_allocator<wchar_t>>;
+  ExpectW w0(L"abcdef");
+  std::basic_string w(w0, 2, 2, test_allocator<wchar_t>{6});
+  ASSERT_SAME_TYPE(decltype(w), ExpectW);
+  assert(w == L"cd");
 #endif
-  }
+}
 
-  return true;
+return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/initializer_list.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/initializer_list.pass.cpp
index fb003737525cbc5..78518aed7e59181 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/initializer_list.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/initializer_list.pass.cpp
@@ -48,8 +48,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp
index 500a09bb3e98492..edc31eac0b07efc 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp
@@ -34,8 +34,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/iter_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/iter_alloc.pass.cpp
index 273501880c49904..7cf2b194c6d1e68 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/iter_alloc.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/iter_alloc.pass.cpp
@@ -12,7 +12,6 @@
 //   basic_string(InputIterator begin, InputIterator end,
 //   const Allocator& a = Allocator()); // constexpr since C++20
 
-
 #include <string>
 #include <iterator>
 #include <cassert>
@@ -24,42 +23,38 @@
 #include "min_allocator.h"
 
 template <class It>
-TEST_CONSTEXPR_CXX20 void
-test(It first, It last)
-{
-    typedef typename std::iterator_traits<It>::value_type charT;
-    typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
-    typedef typename S::allocator_type A;
-    S s2(first, last);
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s2.size() == static_cast<std::size_t>(std::distance(first, last)));
-    unsigned i = 0;
-    for (It it = first; it != last;) {
-        assert(s2[i] == *it);
-        ++it;
-        ++i;
-    }
-    assert(s2.get_allocator() == A());
-    assert(s2.capacity() >= s2.size());
+TEST_CONSTEXPR_CXX20 void test(It first, It last) {
+  typedef typename std::iterator_traits<It>::value_type charT;
+  typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
+  typedef typename S::allocator_type A;
+  S s2(first, last);
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s2.size() == static_cast<std::size_t>(std::distance(first, last)));
+  unsigned i = 0;
+  for (It it = first; it != last;) {
+    assert(s2[i] == *it);
+    ++it;
+    ++i;
+  }
+  assert(s2.get_allocator() == A());
+  assert(s2.capacity() >= s2.size());
 }
 
 template <class It, class A>
-TEST_CONSTEXPR_CXX20 void
-test(It first, It last, const A& a)
-{
-    typedef typename std::iterator_traits<It>::value_type charT;
-    typedef std::basic_string<charT, std::char_traits<charT>, A> S;
-    S s2(first, last, a);
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s2.size() == static_cast<std::size_t>(std::distance(first, last)));
-    unsigned i = 0;
-    for (It it = first; it != last;) {
-        assert(s2[i] == *it);
-        ++it;
-        ++i;
-    }
-    assert(s2.get_allocator() == a);
-    assert(s2.capacity() >= s2.size());
+TEST_CONSTEXPR_CXX20 void test(It first, It last, const A& a) {
+  typedef typename std::iterator_traits<It>::value_type charT;
+  typedef std::basic_string<charT, std::char_traits<charT>, A> S;
+  S s2(first, last, a);
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s2.size() == static_cast<std::size_t>(std::distance(first, last)));
+  unsigned i = 0;
+  for (It it = first; it != last;) {
+    assert(s2[i] == *it);
+    ++it;
+    ++i;
+  }
+  assert(s2.get_allocator() == a);
+  assert(s2.capacity() >= s2.size());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,26 +65,26 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test(s, s);
     test(s, s, A(2));
 
-    test(s, s+1);
-    test(s, s+1, A(2));
+    test(s, s + 1);
+    test(s, s + 1, A(2));
 
-    test(s, s+10);
-    test(s, s+10, A(2));
+    test(s, s + 10);
+    test(s, s + 10, A(2));
 
-    test(s, s+50);
-    test(s, s+50, A(2));
+    test(s, s + 50);
+    test(s, s + 50, A(2));
 
     test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s));
     test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), A(2));
 
-    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1));
-    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1), A(2));
+    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 1));
+    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 1), A(2));
 
-    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10));
-    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10), A(2));
+    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 10));
+    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 10), A(2));
 
-    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+50));
-    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+50), A(2));
+    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 50));
+    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 50), A(2));
   }
 #if TEST_STD_VER >= 11
   {
@@ -99,43 +94,37 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test(s, s);
     test(s, s, A());
 
-    test(s, s+1);
-    test(s, s+1, A());
+    test(s, s + 1);
+    test(s, s + 1, A());
 
-    test(s, s+10);
-    test(s, s+10, A());
+    test(s, s + 10);
+    test(s, s + 10, A());
 
-    test(s, s+50);
-    test(s, s+50, A());
+    test(s, s + 50);
+    test(s, s + 50, A());
 
     test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s));
     test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), A());
 
-    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1));
-    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1), A());
+    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 1));
+    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 1), A());
 
-    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10));
-    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10), A());
+    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 10));
+    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 10), A());
 
-    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+50));
-    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+50), A());
+    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 50));
+    test(cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 50), A());
   }
 #endif
   {
-      static_assert((!std::is_constructible<std::string, std::string,
-                                            std::string>::value),
-                    "");
-      static_assert(
-          (!std::is_constructible<std::string, std::string, std::string,
-                                  std::allocator<char> >::value),
-          "");
+    static_assert((!std::is_constructible<std::string, std::string, std::string>::value), "");
+    static_assert((!std::is_constructible<std::string, std::string, std::string, std::allocator<char> >::value), "");
   }
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/iter_alloc_deduction.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/iter_alloc_deduction.pass.cpp
index d90d3f598bc3f49..65762ccf89d9304 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/iter_alloc_deduction.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/iter_alloc_deduction.pass.cpp
@@ -34,74 +34,77 @@ class NotAnIterator {};
 using NotAnInputIterator = std::back_insert_iterator<std::basic_string<char16_t>>;
 
 template <typename T>
-struct NotAnAllocator { typedef T value_type; };
+struct NotAnAllocator {
+  typedef T value_type;
+};
 
 template <class Iter, class Alloc, class = void>
-struct CanDeduce : std::false_type { };
+struct CanDeduce : std::false_type {};
 
 template <class Iter, class Alloc>
-struct CanDeduce<Iter, Alloc, decltype((void)
-  std::basic_string{std::declval<Iter>(), std::declval<Iter>(), std::declval<Alloc>()}
-)> : std::true_type { };
+struct CanDeduce<Iter,
+                 Alloc,
+                 decltype((void)std::basic_string{std::declval<Iter>(), std::declval<Iter>(), std::declval<Alloc>()})>
+    : std::true_type {};
 
-static_assert( CanDeduce<char*, std::allocator<char>>::value);
+static_assert(CanDeduce<char*, std::allocator<char>>::value);
 static_assert(!CanDeduce<NotAnIterator, std::allocator<char>>::value);
 static_assert(!CanDeduce<NotAnInputIterator, std::allocator<char16_t>>::value);
 static_assert(!CanDeduce<char*, NotAnAllocator<char>>::value);
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-static_assert( CanDeduce<wchar_t*, std::allocator<wchar_t>>::value);
+static_assert(CanDeduce<wchar_t*, std::allocator<wchar_t>>::value);
 static_assert(!CanDeduce<wchar_t const*, NotAnAllocator<wchar_t>>::value);
 #endif
 
 TEST_CONSTEXPR_CXX20 bool test() {
   {
     const char* s = "12345678901234";
-    std::basic_string s1(s, s+10);  // Can't use {} here
-    using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      char>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<char>>, "");
-    static_assert(std::is_same_v<S::allocator_type,   std::allocator<char>>, "");
+    std::basic_string s1(s, s + 10); // Can't use {} here
+    using S = decltype(s1);          // what type did we get?
+    static_assert(std::is_same_v<S::value_type, char>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char>>, "");
+    static_assert(std::is_same_v<S::allocator_type, std::allocator<char>>, "");
     assert(s1.size() == 10);
     assert(s1.compare(0, s1.size(), s, s1.size()) == 0);
   }
   {
     const char* s = "12345678901234";
-    std::basic_string s1{s, s+10, std::allocator<char>{}};
+    std::basic_string s1{s, s + 10, std::allocator<char>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      char>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<char>>, "");
-    static_assert(std::is_same_v<S::allocator_type,   std::allocator<char>>, "");
+    static_assert(std::is_same_v<S::value_type, char>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char>>, "");
+    static_assert(std::is_same_v<S::allocator_type, std::allocator<char>>, "");
     assert(s1.size() == 10);
     assert(s1.compare(0, s1.size(), s, s1.size()) == 0);
   }
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
   {
     const wchar_t* s = L"12345678901234";
-    std::basic_string s1{s, s+10, test_allocator<wchar_t>{}};
+    std::basic_string s1{s, s + 10, test_allocator<wchar_t>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      wchar_t>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<wchar_t>>, "");
-    static_assert(std::is_same_v<S::allocator_type,   test_allocator<wchar_t>>, "");
+    static_assert(std::is_same_v<S::value_type, wchar_t>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<wchar_t>>, "");
+    static_assert(std::is_same_v<S::allocator_type, test_allocator<wchar_t>>, "");
     assert(s1.size() == 10);
     assert(s1.compare(0, s1.size(), s, s1.size()) == 0);
   }
 #endif
   {
     const char16_t* s = u"12345678901234";
-    std::basic_string s1{s, s+10, min_allocator<char16_t>{}};
+    std::basic_string s1{s, s + 10, min_allocator<char16_t>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      char16_t>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<char16_t>>, "");
-    static_assert(std::is_same_v<S::allocator_type,    min_allocator<char16_t>>, "");
+    static_assert(std::is_same_v<S::value_type, char16_t>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char16_t>>, "");
+    static_assert(std::is_same_v<S::allocator_type, min_allocator<char16_t>>, "");
     assert(s1.size() == 10);
     assert(s1.compare(0, s1.size(), s, s1.size()) == 0);
   }
   {
     const char32_t* s = U"12345678901234";
-    std::basic_string s1{s, s+10, explicit_allocator<char32_t>{}};
+    std::basic_string s1{s, s + 10, explicit_allocator<char32_t>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                        char32_t>,  "");
-    static_assert(std::is_same_v<S::traits_type,      std::char_traits<char32_t>>, "");
+    static_assert(std::is_same_v<S::value_type, char32_t>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char32_t>>, "");
     static_assert(std::is_same_v<S::allocator_type, explicit_allocator<char32_t>>, "");
     assert(s1.size() == 10);
     assert(s1.compare(0, s1.size(), s, s1.size()) == 0);
@@ -110,8 +113,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/move.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/move.pass.cpp
index 336ed40ad632743..29579b26df71d82 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/move.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/move.pass.cpp
@@ -20,16 +20,14 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s0)
-{
-    S s1 = s0;
-    S s2 = std::move(s0);
-    LIBCPP_ASSERT(s2.__invariants());
-    LIBCPP_ASSERT(s0.__invariants());
-    assert(s2 == s1);
-    assert(s2.capacity() >= s2.size());
-    assert(s2.get_allocator() == s1.get_allocator());
+TEST_CONSTEXPR_CXX20 void test(S s0) {
+  S s1 = s0;
+  S s2 = std::move(s0);
+  LIBCPP_ASSERT(s2.__invariants());
+  LIBCPP_ASSERT(s0.__invariants());
+  assert(s2 == s1);
+  assert(s2.capacity() >= s2.size());
+  assert(s2.get_allocator() == s1.get_allocator());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -51,8 +49,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/move_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/move_alloc.pass.cpp
index a6cf5fb1ab4e4fb..0e5c72192adea64 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/move_alloc.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/move_alloc.pass.cpp
@@ -20,16 +20,14 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s0, const typename S::allocator_type& a)
-{
-    S s1 = s0;
-    S s2(std::move(s0), a);
-    LIBCPP_ASSERT(s2.__invariants());
-    LIBCPP_ASSERT(s0.__invariants());
-    assert(s2 == s1);
-    assert(s2.capacity() >= s2.size());
-    assert(s2.get_allocator() == a);
+TEST_CONSTEXPR_CXX20 void test(S s0, const typename S::allocator_type& a) {
+  S s1 = s0;
+  S s2(std::move(s0), a);
+  LIBCPP_ASSERT(s2.__invariants());
+  LIBCPP_ASSERT(s0.__invariants());
+  assert(s2 == s1);
+  assert(s2.capacity() >= s2.size());
+  assert(s2.get_allocator() == a);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -38,35 +36,35 @@ TEST_CONSTEXPR_CXX20 bool test() {
     typedef test_allocator<char> A;
     typedef std::basic_string<char, std::char_traits<char>, A> S;
 #if TEST_STD_VER > 14
-    static_assert((noexcept(S{})), "" );
+    static_assert((noexcept(S{})), "");
 #elif TEST_STD_VER >= 11
-    static_assert((noexcept(S()) == std::is_nothrow_move_constructible<A>::value), "" );
+    static_assert((noexcept(S()) == std::is_nothrow_move_constructible<A>::value), "");
 #endif
     test(S(), A(3, &alloc_stats));
     test(S("1"), A(5, &alloc_stats));
     test(S("1234567890123456789012345678901234567890123456789012345678901234567890"), A(7, &alloc_stats));
   }
 
-    int alloc_count = alloc_stats.alloc_count;
+  int alloc_count = alloc_stats.alloc_count;
   {
     typedef test_allocator<char> A;
     typedef std::basic_string<char, std::char_traits<char>, A> S;
 #if TEST_STD_VER > 14
-    static_assert((noexcept(S{})), "" );
+    static_assert((noexcept(S{})), "");
 #elif TEST_STD_VER >= 11
-    static_assert((noexcept(S()) == std::is_nothrow_move_constructible<A>::value), "" );
+    static_assert((noexcept(S()) == std::is_nothrow_move_constructible<A>::value), "");
 #endif
-    S s1 ( "Twas brillig, and the slivy toves did gyre and gymbal in the wabe", A(&alloc_stats));
-    S s2 (std::move(s1), A(1, &alloc_stats));
+    S s1("Twas brillig, and the slivy toves did gyre and gymbal in the wabe", A(&alloc_stats));
+    S s2(std::move(s1), A(1, &alloc_stats));
   }
-    assert ( alloc_stats.alloc_count == alloc_count );
+  assert(alloc_stats.alloc_count == alloc_count);
   {
     typedef min_allocator<char> A;
     typedef std::basic_string<char, std::char_traits<char>, A> S;
 #if TEST_STD_VER > 14
-    static_assert((noexcept(S{})), "" );
+    static_assert((noexcept(S{})), "");
 #elif TEST_STD_VER >= 11
-    static_assert((noexcept(S()) == std::is_nothrow_move_constructible<A>::value), "" );
+    static_assert((noexcept(S()) == std::is_nothrow_move_constructible<A>::value), "");
 #endif
     test(S(), A());
     test(S("1"), A());
@@ -76,8 +74,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp
index 1e24c20b4b101c8..bba86b3acffee8b 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp
@@ -27,39 +27,36 @@
 #include "test_allocator.h"
 
 template <class T>
-struct some_alloc
-{
-    typedef T value_type;
-    some_alloc(const some_alloc&);
-    T *allocate(std::size_t);
+struct some_alloc {
+  typedef T value_type;
+  some_alloc(const some_alloc&);
+  T* allocate(std::size_t);
 };
 
 template <class T>
-struct some_alloc2
-{
-    typedef T value_type;
+struct some_alloc2 {
+  typedef T value_type;
 
-    some_alloc2() {}
-    some_alloc2(const some_alloc2&);
-    T *allocate(std::size_t);
-    void deallocate(void*, unsigned) {}
+  some_alloc2() {}
+  some_alloc2(const some_alloc2&);
+  T* allocate(std::size_t);
+  void deallocate(void*, unsigned) {}
 
-    typedef std::false_type propagate_on_container_move_assignment;
-    typedef std::true_type is_always_equal;
+  typedef std::false_type propagate_on_container_move_assignment;
+  typedef std::true_type is_always_equal;
 };
 
 template <class T>
-struct some_alloc3
-{
-    typedef T value_type;
+struct some_alloc3 {
+  typedef T value_type;
 
-    some_alloc3() {}
-    some_alloc3(const some_alloc3&);
-    T *allocate(std::size_t);
-    void deallocate(void*, unsigned) {}
+  some_alloc3() {}
+  some_alloc3(const some_alloc3&);
+  T* allocate(std::size_t);
+  void deallocate(void*, unsigned) {}
 
-    typedef std::false_type propagate_on_container_move_assignment;
-    typedef std::false_type is_always_equal;
+  typedef std::false_type propagate_on_container_move_assignment;
+  typedef std::false_type is_always_equal;
 };
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -75,16 +72,16 @@ TEST_CONSTEXPR_CXX20 bool test() {
     typedef std::basic_string<char, std::char_traits<char>, some_alloc<char>> C;
 #if TEST_STD_VER > 14
     // if the allocators are always equal, then the move assignment can be noexcept
-    static_assert( std::is_nothrow_move_assignable<C>::value, "");
+    static_assert(std::is_nothrow_move_assignable<C>::value, "");
 #else
-      static_assert(!std::is_nothrow_move_assignable<C>::value, "");
+    static_assert(!std::is_nothrow_move_assignable<C>::value, "");
 #endif
   }
 #if TEST_STD_VER > 14
   {
     //  POCMA is false, always equal
     typedef std::basic_string<char, std::char_traits<char>, some_alloc2<char>> C;
-    static_assert( std::is_nothrow_move_assignable<C>::value, "");
+    static_assert(std::is_nothrow_move_assignable<C>::value, "");
   }
   {
     //  POCMA is false, not always equal
@@ -96,8 +93,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/move_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/move_assignment.pass.cpp
index bdae97a332f20f3..89cb44d62ef2b6c 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/move_assignment.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/move_assignment.pass.cpp
@@ -21,15 +21,13 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s1, S s2)
-{
-    S s0 = s2;
-    s1 = std::move(s2);
-    LIBCPP_ASSERT(s1.__invariants());
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s1 == s0);
-    assert(s1.capacity() >= s1.size());
+TEST_CONSTEXPR_CXX20 void test(S s1, S s2) {
+  S s0 = s2;
+  s1   = std::move(s2);
+  LIBCPP_ASSERT(s1.__invariants());
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s1 == s0);
+  assert(s1.capacity() >= s1.size());
 }
 
 template <class S>
@@ -40,15 +38,13 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("1"), S("2"));
   test(S("1"), S("2"));
 
-  test(S(),
-        S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
-  test(S("123456789"),
-        S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
+  test(S(), S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
+  test(S("123456789"), S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
   test(S("1234567890123456789012345678901234567890123456789012345678901234567890"),
-        S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
+       S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
   test(S("1234567890123456789012345678901234567890123456789012345678901234567890"
-          "1234567890123456789012345678901234567890123456789012345678901234567890"),
-        S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
+         "1234567890123456789012345678901234567890123456789012345678901234567890"),
+       S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -60,8 +56,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/move_noexcept.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/move_noexcept.pass.cpp
index 5d88f7f18dfc8c3..d807cac2c72c848 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/move_noexcept.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/move_noexcept.pass.cpp
@@ -21,24 +21,23 @@
 #include "test_macros.h"
 #include "test_allocator.h"
 
-int main(int, char**)
-{
-    {
-        typedef std::string C;
-        static_assert(std::is_nothrow_move_constructible<C>::value, "");
-    }
-    {
-        typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> C;
-        static_assert(std::is_nothrow_move_constructible<C>::value, "");
-    }
-    {
-        typedef std::basic_string<char, std::char_traits<char>, limited_allocator<char, 10>> C;
+int main(int, char**) {
+  {
+    typedef std::string C;
+    static_assert(std::is_nothrow_move_constructible<C>::value, "");
+  }
+  {
+    typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> C;
+    static_assert(std::is_nothrow_move_constructible<C>::value, "");
+  }
+  {
+    typedef std::basic_string<char, std::char_traits<char>, limited_allocator<char, 10>> C;
 #if TEST_STD_VER <= 14
-        static_assert(!std::is_nothrow_move_constructible<C>::value, "");
+    static_assert(!std::is_nothrow_move_constructible<C>::value, "");
 #else
-        static_assert( std::is_nothrow_move_constructible<C>::value, "");
+    static_assert(std::is_nothrow_move_constructible<C>::value, "");
 #endif
-    }
+  }
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp
index b466eb14bd832f8..c7e31f5e64e0466 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp
@@ -21,38 +21,34 @@
 #include "min_allocator.h"
 
 template <class charT>
-TEST_CONSTEXPR_CXX20 void
-test(const charT* s)
-{
-    typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
-    typedef typename S::traits_type T;
-    typedef typename S::allocator_type A;
-    std::size_t n = T::length(s);
-    S s2(s);
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s2.size() == n);
-    assert(T::compare(s2.data(), s, n) == 0);
-    assert(s2.get_allocator() == A());
-    assert(s2.capacity() >= s2.size());
+TEST_CONSTEXPR_CXX20 void test(const charT* s) {
+  typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
+  typedef typename S::traits_type T;
+  typedef typename S::allocator_type A;
+  std::size_t n = T::length(s);
+  S s2(s);
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s2.size() == n);
+  assert(T::compare(s2.data(), s, n) == 0);
+  assert(s2.get_allocator() == A());
+  assert(s2.capacity() >= s2.size());
 }
 
 template <class charT, class A>
-TEST_CONSTEXPR_CXX20 void
-test(const charT* s, const A& a)
-{
-    typedef std::basic_string<charT, std::char_traits<charT>, A> S;
-    typedef typename S::traits_type T;
-    std::size_t n = T::length(s);
-    S s2(s, a);
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s2.size() == n);
-    assert(T::compare(s2.data(), s, n) == 0);
-    assert(s2.get_allocator() == a);
-    assert(s2.capacity() >= s2.size());
+TEST_CONSTEXPR_CXX20 void test(const charT* s, const A& a) {
+  typedef std::basic_string<charT, std::char_traits<charT>, A> S;
+  typedef typename S::traits_type T;
+  std::size_t n = T::length(s);
+  S s2(s, a);
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s2.size() == n);
+  assert(T::compare(s2.data(), s, n) == 0);
+  assert(s2.get_allocator() == a);
+  assert(s2.capacity() >= s2.size());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
-    {
+  {
     typedef test_allocator<char> A;
 
     test("");
@@ -66,9 +62,9 @@ TEST_CONSTEXPR_CXX20 bool test() {
 
     test("123456798012345679801234567980123456798012345679801234567980");
     test("123456798012345679801234567980123456798012345679801234567980", A(2));
-    }
+  }
 #if TEST_STD_VER >= 11
-    {
+  {
     typedef min_allocator<char> A;
 
     test("");
@@ -82,14 +78,13 @@ TEST_CONSTEXPR_CXX20 bool test() {
 
     test("123456798012345679801234567980123456798012345679801234567980");
     test("123456798012345679801234567980123456798012345679801234567980", A());
-    }
+  }
 #endif
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/pointer_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/pointer_assignment.pass.cpp
index b8318dec6c061a8..4b3027a2aad1183 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/pointer_assignment.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/pointer_assignment.pass.cpp
@@ -18,15 +18,13 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s1, const typename S::value_type* s2)
-{
-    typedef typename S::traits_type T;
-    s1 = s2;
-    LIBCPP_ASSERT(s1.__invariants());
-    assert(s1.size() == T::length(s2));
-    assert(T::compare(s1.data(), s2, s1.size()) == 0);
-    assert(s1.capacity() >= s1.size());
+TEST_CONSTEXPR_CXX20 void test(S s1, const typename S::value_type* s2) {
+  typedef typename S::traits_type T;
+  s1 = s2;
+  LIBCPP_ASSERT(s1.__invariants());
+  assert(s1.size() == T::length(s2));
+  assert(T::compare(s1.data(), s2, s1.size()) == 0);
+  assert(s1.capacity() >= s1.size());
 }
 
 template <class S>
@@ -37,15 +35,13 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("1"), "2");
   test(S("1"), "2");
 
-  test(S(),
-        "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
-  test(S("123456789"),
-        "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
+  test(S(), "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
+  test(S("123456789"), "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
   test(S("1234567890123456789012345678901234567890123456789012345678901234567890"),
-        "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
+       "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
   test(S("1234567890123456789012345678901234567890123456789012345678901234567890"
-          "1234567890123456789012345678901234567890123456789012345678901234567890"),
-        "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
+         "1234567890123456789012345678901234567890123456789012345678901234567890"),
+       "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -57,8 +53,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp
index d98771c9129b6f8..a85ef27adb8de90 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp
@@ -20,32 +20,28 @@
 #include "min_allocator.h"
 
 template <class charT>
-TEST_CONSTEXPR_CXX20 void
-test(const charT* s, unsigned n)
-{
-    typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
-    typedef typename S::traits_type T;
-    typedef typename S::allocator_type A;
-    S s2(s, n);
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s2.size() == n);
-    assert(T::compare(s2.data(), s, n) == 0);
-    assert(s2.get_allocator() == A());
-    assert(s2.capacity() >= s2.size());
+TEST_CONSTEXPR_CXX20 void test(const charT* s, unsigned n) {
+  typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
+  typedef typename S::traits_type T;
+  typedef typename S::allocator_type A;
+  S s2(s, n);
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s2.size() == n);
+  assert(T::compare(s2.data(), s, n) == 0);
+  assert(s2.get_allocator() == A());
+  assert(s2.capacity() >= s2.size());
 }
 
 template <class charT, class A>
-TEST_CONSTEXPR_CXX20 void
-test(const charT* s, unsigned n, const A& a)
-{
-    typedef std::basic_string<charT, std::char_traits<charT>, A> S;
-    typedef typename S::traits_type T;
-    S s2(s, n, a);
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s2.size() == n);
-    assert(T::compare(s2.data(), s, n) == 0);
-    assert(s2.get_allocator() == a);
-    assert(s2.capacity() >= s2.size());
+TEST_CONSTEXPR_CXX20 void test(const charT* s, unsigned n, const A& a) {
+  typedef std::basic_string<charT, std::char_traits<charT>, A> S;
+  typedef typename S::traits_type T;
+  S s2(s, n, a);
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s2.size() == n);
+  assert(T::compare(s2.data(), s, n) == 0);
+  assert(s2.get_allocator() == a);
+  assert(s2.capacity() >= s2.size());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -83,7 +79,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
 #endif
 
 #if TEST_STD_VER >= 11
-  {   // LWG 2946
+  { // LWG 2946
     std::string s({"abc", 1});
     assert(s.size() == 1);
     assert(s == "a");
@@ -93,8 +89,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/size_char_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/size_char_alloc.pass.cpp
index c53d6c8cae031de..8d56cfa628f72a2 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/size_char_alloc.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/size_char_alloc.pass.cpp
@@ -21,63 +21,55 @@
 #include "min_allocator.h"
 
 template <class charT>
-TEST_CONSTEXPR_CXX20 void
-test(unsigned n, charT c)
-{
-    typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
-    typedef typename S::allocator_type A;
-    S s2(n, c);
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s2.size() == n);
-    for (unsigned i = 0; i < n; ++i)
-        assert(s2[i] == c);
-    assert(s2.get_allocator() == A());
-    assert(s2.capacity() >= s2.size());
+TEST_CONSTEXPR_CXX20 void test(unsigned n, charT c) {
+  typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
+  typedef typename S::allocator_type A;
+  S s2(n, c);
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s2.size() == n);
+  for (unsigned i = 0; i < n; ++i)
+    assert(s2[i] == c);
+  assert(s2.get_allocator() == A());
+  assert(s2.capacity() >= s2.size());
 }
 
 template <class charT, class A>
-TEST_CONSTEXPR_CXX20 void
-test(unsigned n, charT c, const A& a)
-{
-    typedef std::basic_string<charT, std::char_traits<charT>, A> S;
-    S s2(n, c, a);
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s2.size() == n);
-    for (unsigned i = 0; i < n; ++i)
-        assert(s2[i] == c);
-    assert(s2.get_allocator() == a);
-    assert(s2.capacity() >= s2.size());
+TEST_CONSTEXPR_CXX20 void test(unsigned n, charT c, const A& a) {
+  typedef std::basic_string<charT, std::char_traits<charT>, A> S;
+  S s2(n, c, a);
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s2.size() == n);
+  for (unsigned i = 0; i < n; ++i)
+    assert(s2[i] == c);
+  assert(s2.get_allocator() == a);
+  assert(s2.capacity() >= s2.size());
 }
 
 template <class Tp>
-TEST_CONSTEXPR_CXX20 void
-test(Tp n, Tp c)
-{
-    typedef char charT;
-    typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
-    typedef typename S::allocator_type A;
-    S s2(n, c);
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s2.size() == static_cast<std::size_t>(n));
-    for (int i = 0; i < n; ++i)
-        assert(s2[i] == c);
-    assert(s2.get_allocator() == A());
-    assert(s2.capacity() >= s2.size());
+TEST_CONSTEXPR_CXX20 void test(Tp n, Tp c) {
+  typedef char charT;
+  typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
+  typedef typename S::allocator_type A;
+  S s2(n, c);
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s2.size() == static_cast<std::size_t>(n));
+  for (int i = 0; i < n; ++i)
+    assert(s2[i] == c);
+  assert(s2.get_allocator() == A());
+  assert(s2.capacity() >= s2.size());
 }
 
 template <class Tp, class A>
-TEST_CONSTEXPR_CXX20 void
-test(Tp n, Tp c, const A& a)
-{
-    typedef char charT;
-    typedef std::basic_string<charT, std::char_traits<charT>, A> S;
-    S s2(n, c, a);
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s2.size() == static_cast<std::size_t>(n));
-    for (int i = 0; i < n; ++i)
-        assert(s2[i] == c);
-    assert(s2.get_allocator() == a);
-    assert(s2.capacity() >= s2.size());
+TEST_CONSTEXPR_CXX20 void test(Tp n, Tp c, const A& a) {
+  typedef char charT;
+  typedef std::basic_string<charT, std::char_traits<charT>, A> S;
+  S s2(n, c, a);
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s2.size() == static_cast<std::size_t>(n));
+  for (int i = 0; i < n; ++i)
+    assert(s2[i] == c);
+  assert(s2.get_allocator() == a);
+  assert(s2.capacity() >= s2.size());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -123,8 +115,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp
index 125bd40c7339bf1..d3804479612fac0 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp
@@ -25,12 +25,10 @@ static_assert(!std::is_convertible<std::string_view, std::string const&>::value,
 static_assert(!std::is_convertible<std::string_view, std::string>::value, "");
 
 template <class charT>
-TEST_CONSTEXPR_CXX20 void
-test(std::basic_string_view<charT> sv)
-{
-    typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
-    typedef typename S::traits_type T;
-    typedef typename S::allocator_type A;
+TEST_CONSTEXPR_CXX20 void test(std::basic_string_view<charT> sv) {
+  typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
+  typedef typename S::traits_type T;
+  typedef typename S::allocator_type A;
   {
     S s2(sv);
     LIBCPP_ASSERT(s2.__invariants());
@@ -51,11 +49,9 @@ test(std::basic_string_view<charT> sv)
 }
 
 template <class charT, class A>
-TEST_CONSTEXPR_CXX20 void
-test(std::basic_string_view<charT> sv, const A& a)
-{
-    typedef std::basic_string<charT, std::char_traits<charT>, A> S;
-    typedef typename S::traits_type T;
+TEST_CONSTEXPR_CXX20 void test(std::basic_string_view<charT> sv, const A& a) {
+  typedef std::basic_string<charT, std::char_traits<charT>, A> S;
+  typedef typename S::traits_type T;
   {
     S s2(sv, a);
     LIBCPP_ASSERT(s2.__invariants());
@@ -84,7 +80,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test(SV(""), A(2));
 
     test(SV("1"));
-    test(SV("1") ,A(2));
+    test(SV("1"), A(2));
 
     test(SV("1234567980"));
     test(SV("1234567980"), A(2));
@@ -101,7 +97,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test(SV(""), A());
 
     test(SV("1"));
-    test(SV("1") ,A());
+    test(SV("1"), A());
 
     test(SV("1234567980"));
     test(SV("1234567980"), A());
@@ -114,8 +110,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/string_view_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/string_view_assignment.pass.cpp
index ed09a1741d198f5..3c88f9e40fc0b3b 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/string_view_assignment.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/string_view_assignment.pass.cpp
@@ -17,15 +17,13 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(S s1, SV sv)
-{
-    typedef typename S::traits_type T;
-    s1 = sv;
-    LIBCPP_ASSERT(s1.__invariants());
-    assert(s1.size() == sv.size());
-    assert(T::compare(s1.data(), sv.data(), s1.size()) == 0);
-    assert(s1.capacity() >= s1.size());
+TEST_CONSTEXPR_CXX20 void test(S s1, SV sv) {
+  typedef typename S::traits_type T;
+  s1 = sv;
+  LIBCPP_ASSERT(s1.__invariants());
+  assert(s1.size() == sv.size());
+  assert(T::compare(s1.data(), sv.data(), s1.size()) == 0);
+  assert(s1.capacity() >= s1.size());
 }
 
 template <class S>
@@ -37,15 +35,13 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("1"), SV("2"));
   test(S("1"), SV("2"));
 
-  test(S(),
-        SV("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
-  test(S("123456789"),
-        SV("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
+  test(S(), SV("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
+  test(S("123456789"), SV("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
   test(S("1234567890123456789012345678901234567890123456789012345678901234567890"),
-        SV("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
+       SV("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
   test(S("1234567890123456789012345678901234567890123456789012345678901234567890"
-          "1234567890123456789012345678901234567890123456789012345678901234567890"),
-        SV("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
+         "1234567890123456789012345678901234567890123456789012345678901234567890"),
+       SV("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -57,8 +53,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/string_view_deduction.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/string_view_deduction.pass.cpp
index 1bd7ab2ccfee1a7..3a6f84f2699aca6 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/string_view_deduction.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/string_view_deduction.pass.cpp
@@ -32,15 +32,16 @@
 #include "min_allocator.h"
 
 template <class StringView, class Allocator, class = void>
-struct CanDeduce : std::false_type { };
+struct CanDeduce : std::false_type {};
 
 template <class StringView, class Allocator>
-struct CanDeduce<StringView, Allocator, decltype((void)
-  std::basic_string{std::declval<StringView>(), std::declval<Allocator>()}
-)> : std::true_type { };
+struct CanDeduce<StringView,
+                 Allocator,
+                 decltype((void)std::basic_string{std::declval<StringView>(), std::declval<Allocator>()})>
+    : std::true_type {};
 
-struct NotAnAllocator { };
-static_assert( CanDeduce<std::string_view, std::allocator<char>>::value);
+struct NotAnAllocator {};
+static_assert(CanDeduce<std::string_view, std::allocator<char>>::value);
 static_assert(!CanDeduce<std::string_view, NotAnAllocator>::value);
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -48,9 +49,9 @@ TEST_CONSTEXPR_CXX20 bool test() {
     std::string_view sv = "12345678901234";
     std::basic_string s1(sv);
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      char>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<char>>, "");
-    static_assert(std::is_same_v<S::allocator_type,   std::allocator<char>>, "");
+    static_assert(std::is_same_v<S::value_type, char>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char>>, "");
+    static_assert(std::is_same_v<S::allocator_type, std::allocator<char>>, "");
     assert(s1.size() == sv.size());
     assert(s1.compare(0, s1.size(), sv.data(), s1.size()) == 0);
   }
@@ -59,9 +60,9 @@ TEST_CONSTEXPR_CXX20 bool test() {
     std::string_view sv = "12345678901234";
     std::basic_string s1{sv, std::allocator<char>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      char>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<char>>, "");
-    static_assert(std::is_same_v<S::allocator_type,   std::allocator<char>>, "");
+    static_assert(std::is_same_v<S::value_type, char>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char>>, "");
+    static_assert(std::is_same_v<S::allocator_type, std::allocator<char>>, "");
     assert(s1.size() == sv.size());
     assert(s1.compare(0, s1.size(), sv.data(), s1.size()) == 0);
   }
@@ -70,9 +71,9 @@ TEST_CONSTEXPR_CXX20 bool test() {
     std::wstring_view sv = L"12345678901234";
     std::basic_string s1{sv, test_allocator<wchar_t>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      wchar_t>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<wchar_t>>, "");
-    static_assert(std::is_same_v<S::allocator_type,   test_allocator<wchar_t>>, "");
+    static_assert(std::is_same_v<S::value_type, wchar_t>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<wchar_t>>, "");
+    static_assert(std::is_same_v<S::allocator_type, test_allocator<wchar_t>>, "");
     assert(s1.size() == sv.size());
     assert(s1.compare(0, s1.size(), sv.data(), s1.size()) == 0);
   }
@@ -82,9 +83,9 @@ TEST_CONSTEXPR_CXX20 bool test() {
     std::u8string_view sv = u8"12345678901234";
     std::basic_string s1{sv, min_allocator<char8_t>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      char8_t>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<char8_t>>, "");
-    static_assert(std::is_same_v<S::allocator_type,    min_allocator<char8_t>>, "");
+    static_assert(std::is_same_v<S::value_type, char8_t>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char8_t>>, "");
+    static_assert(std::is_same_v<S::allocator_type, min_allocator<char8_t>>, "");
     assert(s1.size() == sv.size());
     assert(s1.compare(0, s1.size(), sv.data(), s1.size()) == 0);
   }
@@ -93,9 +94,9 @@ TEST_CONSTEXPR_CXX20 bool test() {
     std::u16string_view sv = u"12345678901234";
     std::basic_string s1{sv, min_allocator<char16_t>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      char16_t>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<char16_t>>, "");
-    static_assert(std::is_same_v<S::allocator_type,    min_allocator<char16_t>>, "");
+    static_assert(std::is_same_v<S::value_type, char16_t>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char16_t>>, "");
+    static_assert(std::is_same_v<S::allocator_type, min_allocator<char16_t>>, "");
     assert(s1.size() == sv.size());
     assert(s1.compare(0, s1.size(), sv.data(), s1.size()) == 0);
   }
@@ -103,8 +104,8 @@ TEST_CONSTEXPR_CXX20 bool test() {
     std::u32string_view sv = U"12345678901234";
     std::basic_string s1{sv, explicit_allocator<char32_t>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                        char32_t>,  "");
-    static_assert(std::is_same_v<S::traits_type,      std::char_traits<char32_t>>, "");
+    static_assert(std::is_same_v<S::value_type, char32_t>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char32_t>>, "");
     static_assert(std::is_same_v<S::allocator_type, explicit_allocator<char32_t>>, "");
     assert(s1.size() == sv.size());
     assert(s1.compare(0, s1.size(), sv.data(), s1.size()) == 0);
@@ -113,8 +114,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/string_view_size_size_deduction.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/string_view_size_size_deduction.pass.cpp
index ce263560c6dd561..08e696b7a091bd4 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/string_view_size_size_deduction.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/string_view_size_size_deduction.pass.cpp
@@ -36,15 +36,19 @@
 #include "min_allocator.h"
 
 template <class StringView, class Size, class Allocator, class = void>
-struct CanDeduce : std::false_type { };
+struct CanDeduce : std::false_type {};
 
 template <class StringView, class Size, class Allocator>
-struct CanDeduce<StringView, Size, Allocator, decltype((void)
-  std::basic_string{std::declval<StringView>(), std::declval<Size>(), std::declval<Size>(), std::declval<Allocator>()}
-)> : std::true_type { };
+struct CanDeduce<
+    StringView,
+    Size,
+    Allocator,
+    decltype((void)std::basic_string{
+        std::declval<StringView>(), std::declval<Size>(), std::declval<Size>(), std::declval<Allocator>()})>
+    : std::true_type {};
 
-struct NotAnAllocator { };
-static_assert( CanDeduce<std::string_view, std::size_t, std::allocator<char>>::value);
+struct NotAnAllocator {};
+static_assert(CanDeduce<std::string_view, std::size_t, std::allocator<char>>::value);
 static_assert(!CanDeduce<std::string_view, std::size_t, NotAnAllocator>::value);
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -52,9 +56,9 @@ TEST_CONSTEXPR_CXX20 bool test() {
     std::string_view sv = "12345678901234";
     std::basic_string s1{sv, 0, 4};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      char>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<char>>, "");
-    static_assert(std::is_same_v<S::allocator_type,   std::allocator<char>>, "");
+    static_assert(std::is_same_v<S::value_type, char>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char>>, "");
+    static_assert(std::is_same_v<S::allocator_type, std::allocator<char>>, "");
     assert(s1.size() == 4);
     assert(s1.compare(0, s1.size(), sv.data(), s1.size()) == 0);
   }
@@ -63,9 +67,9 @@ TEST_CONSTEXPR_CXX20 bool test() {
     std::string_view sv = "12345678901234";
     std::basic_string s1{sv, 0, 4, std::allocator<char>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      char>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<char>>, "");
-    static_assert(std::is_same_v<S::allocator_type,   std::allocator<char>>, "");
+    static_assert(std::is_same_v<S::value_type, char>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char>>, "");
+    static_assert(std::is_same_v<S::allocator_type, std::allocator<char>>, "");
     assert(s1.size() == 4);
     assert(s1.compare(0, s1.size(), sv.data(), s1.size()) == 0);
   }
@@ -74,9 +78,9 @@ TEST_CONSTEXPR_CXX20 bool test() {
     std::wstring_view sv = L"12345678901234";
     std::basic_string s1{sv, 0, 4, test_allocator<wchar_t>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      wchar_t>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<wchar_t>>, "");
-    static_assert(std::is_same_v<S::allocator_type,   test_allocator<wchar_t>>, "");
+    static_assert(std::is_same_v<S::value_type, wchar_t>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<wchar_t>>, "");
+    static_assert(std::is_same_v<S::allocator_type, test_allocator<wchar_t>>, "");
     assert(s1.size() == 4);
     assert(s1.compare(0, s1.size(), sv.data(), s1.size()) == 0);
   }
@@ -86,9 +90,9 @@ TEST_CONSTEXPR_CXX20 bool test() {
     std::u8string_view sv = u8"12345678901234";
     std::basic_string s1{sv, 0, 4, min_allocator<char8_t>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      char8_t>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<char8_t>>, "");
-    static_assert(std::is_same_v<S::allocator_type,    min_allocator<char8_t>>, "");
+    static_assert(std::is_same_v<S::value_type, char8_t>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char8_t>>, "");
+    static_assert(std::is_same_v<S::allocator_type, min_allocator<char8_t>>, "");
     assert(s1.size() == 4);
     assert(s1.compare(0, s1.size(), sv.data(), s1.size()) == 0);
   }
@@ -97,9 +101,9 @@ TEST_CONSTEXPR_CXX20 bool test() {
     std::u16string_view sv = u"12345678901234";
     std::basic_string s1{sv, 0, 4, min_allocator<char16_t>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                      char16_t>,  "");
-    static_assert(std::is_same_v<S::traits_type,    std::char_traits<char16_t>>, "");
-    static_assert(std::is_same_v<S::allocator_type,    min_allocator<char16_t>>, "");
+    static_assert(std::is_same_v<S::value_type, char16_t>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char16_t>>, "");
+    static_assert(std::is_same_v<S::allocator_type, min_allocator<char16_t>>, "");
     assert(s1.size() == 4);
     assert(s1.compare(0, s1.size(), sv.data(), s1.size()) == 0);
   }
@@ -107,8 +111,8 @@ TEST_CONSTEXPR_CXX20 bool test() {
     std::u32string_view sv = U"12345678901234";
     std::basic_string s1{sv, 0, 4, explicit_allocator<char32_t>{}};
     using S = decltype(s1); // what type did we get?
-    static_assert(std::is_same_v<S::value_type,                        char32_t>,  "");
-    static_assert(std::is_same_v<S::traits_type,      std::char_traits<char32_t>>, "");
+    static_assert(std::is_same_v<S::value_type, char32_t>, "");
+    static_assert(std::is_same_v<S::traits_type, std::char_traits<char32_t>>, "");
     static_assert(std::is_same_v<S::allocator_type, explicit_allocator<char32_t>>, "");
     assert(s1.size() == 4);
     assert(s1.compare(0, s1.size(), sv.data(), s1.size()) == 0);
@@ -117,8 +121,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp
index e89f6cd659b0734..e8a72708007c383 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp
@@ -28,113 +28,94 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S str, unsigned pos)
-{
-    typedef typename S::traits_type T;
-    typedef typename S::allocator_type A;
-
-    if (pos <= str.size())
-    {
-        S s2(str, pos);
-        LIBCPP_ASSERT(s2.__invariants());
-        typename S::size_type rlen = str.size() - pos;
-        assert(s2.size() == rlen);
-        assert(T::compare(s2.data(), str.data() + pos, rlen) == 0);
-        assert(s2.get_allocator() == A());
-        assert(s2.capacity() >= s2.size());
-    }
+TEST_CONSTEXPR_CXX20 void test(S str, unsigned pos) {
+  typedef typename S::traits_type T;
+  typedef typename S::allocator_type A;
+
+  if (pos <= str.size()) {
+    S s2(str, pos);
+    LIBCPP_ASSERT(s2.__invariants());
+    typename S::size_type rlen = str.size() - pos;
+    assert(s2.size() == rlen);
+    assert(T::compare(s2.data(), str.data() + pos, rlen) == 0);
+    assert(s2.get_allocator() == A());
+    assert(s2.capacity() >= s2.size());
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            S s2(str, pos);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > str.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      S s2(str, pos);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > str.size());
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S str, unsigned pos, unsigned n)
-{
-    typedef typename S::traits_type T;
-    typedef typename S::allocator_type A;
-    if (pos <= str.size())
-    {
-        S s2(str, pos, n);
-        LIBCPP_ASSERT(s2.__invariants());
-        typename S::size_type rlen = std::min<typename S::size_type>(str.size() - pos, n);
-        assert(s2.size() == rlen);
-        assert(T::compare(s2.data(), str.data() + pos, rlen) == 0);
-        assert(s2.get_allocator() == A());
-        assert(s2.capacity() >= s2.size());
-    }
+TEST_CONSTEXPR_CXX20 void test(S str, unsigned pos, unsigned n) {
+  typedef typename S::traits_type T;
+  typedef typename S::allocator_type A;
+  if (pos <= str.size()) {
+    S s2(str, pos, n);
+    LIBCPP_ASSERT(s2.__invariants());
+    typename S::size_type rlen = std::min<typename S::size_type>(str.size() - pos, n);
+    assert(s2.size() == rlen);
+    assert(T::compare(s2.data(), str.data() + pos, rlen) == 0);
+    assert(s2.get_allocator() == A());
+    assert(s2.capacity() >= s2.size());
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            S s2(str, pos, n);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > str.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      S s2(str, pos, n);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > str.size());
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S str, unsigned pos, unsigned n, const typename S::allocator_type& a)
-{
-    typedef typename S::traits_type T;
-
-    if (pos <= str.size())
-    {
-        S s2(str, pos, n, a);
-        LIBCPP_ASSERT(s2.__invariants());
-        typename S::size_type rlen = std::min<typename S::size_type>(str.size() - pos, n);
-        assert(s2.size() == rlen);
-        assert(T::compare(s2.data(), str.data() + pos, rlen) == 0);
-        assert(s2.get_allocator() == a);
-        assert(s2.capacity() >= s2.size());
-    }
+TEST_CONSTEXPR_CXX20 void test(S str, unsigned pos, unsigned n, const typename S::allocator_type& a) {
+  typedef typename S::traits_type T;
+
+  if (pos <= str.size()) {
+    S s2(str, pos, n, a);
+    LIBCPP_ASSERT(s2.__invariants());
+    typename S::size_type rlen = std::min<typename S::size_type>(str.size() - pos, n);
+    assert(s2.size() == rlen);
+    assert(T::compare(s2.data(), str.data() + pos, rlen) == 0);
+    assert(s2.get_allocator() == a);
+    assert(s2.capacity() >= s2.size());
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            S s2(str, pos, n, a);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > str.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      S s2(str, pos, n, a);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > str.size());
     }
+  }
 #endif
 }
 
-void test_lwg2583()
-{
+void test_lwg2583() {
 #if TEST_STD_VER >= 11 && !defined(TEST_HAS_NO_EXCEPTIONS)
-    typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> StringA;
-    std::vector<StringA, std::scoped_allocator_adaptor<test_allocator<StringA>>> vs;
-    StringA s{"1234"};
-    vs.emplace_back(s, 2);
-
-    try { vs.emplace_back(s, 5); }
-    catch (const std::out_of_range&) { return; }
-    assert(false);
+  typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> StringA;
+  std::vector<StringA, std::scoped_allocator_adaptor<test_allocator<StringA>>> vs;
+  StringA s{"1234"};
+  vs.emplace_back(s, 2);
+
+  try {
+    vs.emplace_back(s, 5);
+  } catch (const std::out_of_range&) {
+    return;
+  }
+  assert(false);
 #endif
 }
 
@@ -221,8 +202,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp b/libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp
index 3b410f725f43bc8..6d632f4921e4c76 100644
--- a/libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp
@@ -16,27 +16,25 @@
 
 #include "test_macros.h"
 
-constexpr bool test()
-{
-    using S = std::string;
+constexpr bool test() {
+  using S = std::string;
 
-    S s1 {};
-    S s2 {"abcde", 5};
+  S s1{};
+  S s2{"abcde", 5};
 
-    ASSERT_NOEXCEPT(s1.contains('e'));
+  ASSERT_NOEXCEPT(s1.contains('e'));
 
-    assert(!s1.contains('c'));
-    assert(!s1.contains('e'));
-    assert(!s1.contains('x'));
-    assert( s2.contains('c'));
-    assert( s2.contains('e'));
-    assert(!s2.contains('x'));
+  assert(!s1.contains('c'));
+  assert(!s1.contains('e'));
+  assert(!s1.contains('x'));
+  assert(s2.contains('c'));
+  assert(s2.contains('e'));
+  assert(!s2.contains('x'));
 
-    return true;
+  return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
   static_assert(test());
 

diff  --git a/libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp b/libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp
index 978e8143475b06e..df5e4007acdf298 100644
--- a/libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp
@@ -16,57 +16,55 @@
 
 #include "test_macros.h"
 
-constexpr bool test()
-{
-    using S = std::string;
+constexpr bool test() {
+  using S = std::string;
 
-    const char* s = "abcde";
-    S s0;
-    S s1 {s + 4, 1};
-    S s3 {s + 2, 3};
-    S sNot {"xyz", 3};
+  const char* s = "abcde";
+  S s0;
+  S s1{s + 4, 1};
+  S s3{s + 2, 3};
+  S sNot{"xyz", 3};
 
-    assert(s0.contains(""));
-    assert(!s0.contains("e"));
+  assert(s0.contains(""));
+  assert(!s0.contains("e"));
 
-    assert( s1.contains(""));
-    assert(!s1.contains("d"));
-    assert( s1.contains("e"));
-    assert(!s1.contains("de"));
-    assert(!s1.contains("cd"));
-    assert(!s1.contains("cde"));
-    assert(!s1.contains("bcde"));
-    assert(!s1.contains("abcde"));
-    assert(!s1.contains("xyz"));
+  assert(s1.contains(""));
+  assert(!s1.contains("d"));
+  assert(s1.contains("e"));
+  assert(!s1.contains("de"));
+  assert(!s1.contains("cd"));
+  assert(!s1.contains("cde"));
+  assert(!s1.contains("bcde"));
+  assert(!s1.contains("abcde"));
+  assert(!s1.contains("xyz"));
 
-    assert( s3.contains(""));
-    assert( s3.contains("d"));
-    assert( s3.contains("e"));
-    assert( s3.contains("de"));
-    assert( s3.contains("cd"));
-    assert(!s3.contains("ce"));
-    assert( s3.contains("cde"));
-    assert(!s3.contains("edc"));
-    assert(!s3.contains("bcde"));
-    assert(!s3.contains("abcde"));
-    assert(!s3.contains("xyz"));
+  assert(s3.contains(""));
+  assert(s3.contains("d"));
+  assert(s3.contains("e"));
+  assert(s3.contains("de"));
+  assert(s3.contains("cd"));
+  assert(!s3.contains("ce"));
+  assert(s3.contains("cde"));
+  assert(!s3.contains("edc"));
+  assert(!s3.contains("bcde"));
+  assert(!s3.contains("abcde"));
+  assert(!s3.contains("xyz"));
 
-    assert( sNot.contains(""));
-    assert(!sNot.contains("d"));
-    assert(!sNot.contains("e"));
-    assert(!sNot.contains("de"));
-    assert(!sNot.contains("cd"));
-    assert(!sNot.contains("cde"));
-    assert(!sNot.contains("bcde"));
-    assert(!sNot.contains("abcde"));
-    assert( sNot.contains("xyz"));
-    assert(!sNot.contains("zyx"));
+  assert(sNot.contains(""));
+  assert(!sNot.contains("d"));
+  assert(!sNot.contains("e"));
+  assert(!sNot.contains("de"));
+  assert(!sNot.contains("cd"));
+  assert(!sNot.contains("cde"));
+  assert(!sNot.contains("bcde"));
+  assert(!sNot.contains("abcde"));
+  assert(sNot.contains("xyz"));
+  assert(!sNot.contains("zyx"));
 
-    return true;
+  return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
   static_assert(test());
 

diff  --git a/libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp
index 77301c7941b7624..74734d43fd22450 100644
--- a/libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp
@@ -16,78 +16,76 @@
 
 #include "test_macros.h"
 
-constexpr bool test()
-{
-    using S = std::string;
-    using SV = std::string_view;
-
-    const char* s = "abcde";
-    S s0;
-    S s1 {s + 1, 1};
-    S s3 {s + 1, 3};
-    S s5 {s    , 5};
-    S sNot {"xyz", 3};
-
-    SV sv0;
-    SV sv1 {s + 1, 1};
-    SV sv2 {s + 1, 2};
-    SV sv3 {s + 1, 3};
-    SV sv4 {s + 1, 4};
-    SV sv5 {s    , 5};
-    SV svNot  {"xyz", 3};
-    SV svNot2 {"bd" , 2};
-    SV svNot3 {"dcb", 3};
-
-    ASSERT_NOEXCEPT(s0.contains(sv0));
-
-    assert( s0.contains(sv0));
-    assert(!s0.contains(sv1));
-
-    assert( s1.contains(sv0));
-    assert( s1.contains(sv1));
-    assert(!s1.contains(sv2));
-    assert(!s1.contains(sv3));
-    assert(!s1.contains(sv4));
-    assert(!s1.contains(sv5));
-    assert(!s1.contains(svNot));
-    assert(!s1.contains(svNot2));
-    assert(!s1.contains(svNot3));
-
-    assert( s3.contains(sv0));
-    assert( s3.contains(sv1));
-    assert( s3.contains(sv2));
-    assert( s3.contains(sv3));
-    assert(!s3.contains(sv4));
-    assert(!s3.contains(sv5));
-    assert(!s3.contains(svNot));
-    assert(!s3.contains(svNot2));
-    assert(!s3.contains(svNot3));
-
-    assert( s5.contains(sv0));
-    assert( s5.contains(sv1));
-    assert( s5.contains(sv2));
-    assert( s5.contains(sv3));
-    assert( s5.contains(sv4));
-    assert( s5.contains(sv5));
-    assert(!s5.contains(svNot));
-    assert(!s5.contains(svNot2));
-    assert(!s5.contains(svNot3));
-
-    assert( sNot.contains(sv0));
-    assert(!sNot.contains(sv1));
-    assert(!sNot.contains(sv2));
-    assert(!sNot.contains(sv3));
-    assert(!sNot.contains(sv4));
-    assert(!sNot.contains(sv5));
-    assert( sNot.contains(svNot));
-    assert(!sNot.contains(svNot2));
-    assert(!sNot.contains(svNot3));
-
-    return true;
+constexpr bool test() {
+  using S  = std::string;
+  using SV = std::string_view;
+
+  const char* s = "abcde";
+  S s0;
+  S s1{s + 1, 1};
+  S s3{s + 1, 3};
+  S s5{s, 5};
+  S sNot{"xyz", 3};
+
+  SV sv0;
+  SV sv1{s + 1, 1};
+  SV sv2{s + 1, 2};
+  SV sv3{s + 1, 3};
+  SV sv4{s + 1, 4};
+  SV sv5{s, 5};
+  SV svNot{"xyz", 3};
+  SV svNot2{"bd", 2};
+  SV svNot3{"dcb", 3};
+
+  ASSERT_NOEXCEPT(s0.contains(sv0));
+
+  assert(s0.contains(sv0));
+  assert(!s0.contains(sv1));
+
+  assert(s1.contains(sv0));
+  assert(s1.contains(sv1));
+  assert(!s1.contains(sv2));
+  assert(!s1.contains(sv3));
+  assert(!s1.contains(sv4));
+  assert(!s1.contains(sv5));
+  assert(!s1.contains(svNot));
+  assert(!s1.contains(svNot2));
+  assert(!s1.contains(svNot3));
+
+  assert(s3.contains(sv0));
+  assert(s3.contains(sv1));
+  assert(s3.contains(sv2));
+  assert(s3.contains(sv3));
+  assert(!s3.contains(sv4));
+  assert(!s3.contains(sv5));
+  assert(!s3.contains(svNot));
+  assert(!s3.contains(svNot2));
+  assert(!s3.contains(svNot3));
+
+  assert(s5.contains(sv0));
+  assert(s5.contains(sv1));
+  assert(s5.contains(sv2));
+  assert(s5.contains(sv3));
+  assert(s5.contains(sv4));
+  assert(s5.contains(sv5));
+  assert(!s5.contains(svNot));
+  assert(!s5.contains(svNot2));
+  assert(!s5.contains(svNot3));
+
+  assert(sNot.contains(sv0));
+  assert(!sNot.contains(sv1));
+  assert(!sNot.contains(sv2));
+  assert(!sNot.contains(sv3));
+  assert(!sNot.contains(sv4));
+  assert(!sNot.contains(sv5));
+  assert(sNot.contains(svNot));
+  assert(!sNot.contains(svNot2));
+  assert(!sNot.contains(svNot3));
+
+  return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
   static_assert(test());
 

diff  --git a/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.char.pass.cpp b/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.char.pass.cpp
index da5f5ac96318f02..8e540606f38b9f6 100644
--- a/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.char.pass.cpp
@@ -19,22 +19,21 @@
 constexpr bool test() {
   {
     typedef std::string S;
-    S  s1 {};
-    S  s2 { "abcde", 5 };
+    S s1{};
+    S s2{"abcde", 5};
 
     ASSERT_NOEXCEPT(s1.ends_with('e'));
 
-    assert (!s1.ends_with('e'));
-    assert (!s1.ends_with('x'));
-    assert ( s2.ends_with('e'));
-    assert (!s2.ends_with('x'));
+    assert(!s1.ends_with('e'));
+    assert(!s1.ends_with('x'));
+    assert(s2.ends_with('e'));
+    assert(!s2.ends_with('x'));
   }
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
   static_assert(test());
 

diff  --git a/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.ptr.pass.cpp b/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.ptr.pass.cpp
index 86796c447c1a854..75abb0743268191 100644
--- a/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.ptr.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.ptr.pass.cpp
@@ -19,44 +19,44 @@
 constexpr bool test() {
   {
     typedef std::string S;
-    const char *s = "abcde";
+    const char* s = "abcde";
 
-    S   s0;
-    S   s1  { s + 4, 1 };
-    S   s2  { s + 3, 2 };
-//  S   s3  { s + 2, 3 };
-//  S   s4  { s + 1, 4 };
-//  S   s5  { s,     5 };
-    S  sNot { "def", 3 };
+    S s0;
+    S s1{s + 4, 1};
+    S s2{s + 3, 2};
+    //  S   s3  { s + 2, 3 };
+    //  S   s4  { s + 1, 4 };
+    //  S   s5  { s,     5 };
+    S sNot{"def", 3};
 
     LIBCPP_ASSERT_NOEXCEPT(s0.ends_with(""));
 
-    assert ( s0.ends_with(""));
-    assert (!s0.ends_with("e"));
+    assert(s0.ends_with(""));
+    assert(!s0.ends_with("e"));
 
-    assert ( s1.ends_with(""));
-    assert ( s1.ends_with("e"));
-    assert (!s1.ends_with("de"));
-    assert (!s1.ends_with("cde"));
-    assert (!s1.ends_with("bcde"));
-    assert (!s1.ends_with("abcde"));
-    assert (!s1.ends_with("def"));
+    assert(s1.ends_with(""));
+    assert(s1.ends_with("e"));
+    assert(!s1.ends_with("de"));
+    assert(!s1.ends_with("cde"));
+    assert(!s1.ends_with("bcde"));
+    assert(!s1.ends_with("abcde"));
+    assert(!s1.ends_with("def"));
 
-    assert ( s2.ends_with(""));
-    assert ( s2.ends_with("e"));
-    assert ( s2.ends_with("de"));
-    assert (!s2.ends_with("cde"));
-    assert (!s2.ends_with("bcde"));
-    assert (!s2.ends_with("abcde"));
-    assert (!s2.ends_with("def"));
+    assert(s2.ends_with(""));
+    assert(s2.ends_with("e"));
+    assert(s2.ends_with("de"));
+    assert(!s2.ends_with("cde"));
+    assert(!s2.ends_with("bcde"));
+    assert(!s2.ends_with("abcde"));
+    assert(!s2.ends_with("def"));
 
-    assert ( sNot.ends_with(""));
-    assert (!sNot.ends_with("e"));
-    assert (!sNot.ends_with("de"));
-    assert (!sNot.ends_with("cde"));
-    assert (!sNot.ends_with("bcde"));
-    assert (!sNot.ends_with("abcde"));
-    assert ( sNot.ends_with("def"));
+    assert(sNot.ends_with(""));
+    assert(!sNot.ends_with("e"));
+    assert(!sNot.ends_with("de"));
+    assert(!sNot.ends_with("cde"));
+    assert(!sNot.ends_with("bcde"));
+    assert(!sNot.ends_with("abcde"));
+    assert(sNot.ends_with("def"));
   }
 
   return true;

diff  --git a/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.string_view.pass.cpp
index a4600d74a78f8ad..ab0b4f10356d278 100644
--- a/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ends_with/ends_with.string_view.pass.cpp
@@ -20,52 +20,52 @@ constexpr bool test() {
   {
     typedef std::string S;
     typedef std::string_view SV;
-    const char *s = "abcde";
+    const char* s = "abcde";
 
-    S   s0;
-    S   s1  { s + 4, 1 };
-    S   s2  { s + 3, 2 };
-//  S   s3  { s + 2, 3 };
-//  S   s4  { s + 1, 4 };
-//  S   s5  { s,     5 };
-    S  sNot { "def", 3 };
+    S s0;
+    S s1{s + 4, 1};
+    S s2{s + 3, 2};
+    //  S   s3  { s + 2, 3 };
+    //  S   s4  { s + 1, 4 };
+    //  S   s5  { s,     5 };
+    S sNot{"def", 3};
 
-    SV  sv0;
-    SV  sv1 { s + 4, 1 };
-    SV  sv2 { s + 3, 2 };
-    SV  sv3 { s + 2, 3 };
-    SV  sv4 { s + 1, 4 };
-    SV  sv5 { s    , 5 };
-    SV svNot {"def", 3 };
+    SV sv0;
+    SV sv1{s + 4, 1};
+    SV sv2{s + 3, 2};
+    SV sv3{s + 2, 3};
+    SV sv4{s + 1, 4};
+    SV sv5{s, 5};
+    SV svNot{"def", 3};
 
     ASSERT_NOEXCEPT(s0.ends_with(sv0));
 
-    assert ( s0.ends_with(sv0));
-    assert (!s0.ends_with(sv1));
+    assert(s0.ends_with(sv0));
+    assert(!s0.ends_with(sv1));
 
-    assert ( s1.ends_with(sv0));
-    assert ( s1.ends_with(sv1));
-    assert (!s1.ends_with(sv2));
-    assert (!s1.ends_with(sv3));
-    assert (!s1.ends_with(sv4));
-    assert (!s1.ends_with(sv5));
-    assert (!s1.ends_with(svNot));
+    assert(s1.ends_with(sv0));
+    assert(s1.ends_with(sv1));
+    assert(!s1.ends_with(sv2));
+    assert(!s1.ends_with(sv3));
+    assert(!s1.ends_with(sv4));
+    assert(!s1.ends_with(sv5));
+    assert(!s1.ends_with(svNot));
 
-    assert ( s2.ends_with(sv0));
-    assert ( s2.ends_with(sv1));
-    assert ( s2.ends_with(sv2));
-    assert (!s2.ends_with(sv3));
-    assert (!s2.ends_with(sv4));
-    assert (!s2.ends_with(sv5));
-    assert (!s2.ends_with(svNot));
+    assert(s2.ends_with(sv0));
+    assert(s2.ends_with(sv1));
+    assert(s2.ends_with(sv2));
+    assert(!s2.ends_with(sv3));
+    assert(!s2.ends_with(sv4));
+    assert(!s2.ends_with(sv5));
+    assert(!s2.ends_with(svNot));
 
-    assert ( sNot.ends_with(sv0));
-    assert (!sNot.ends_with(sv1));
-    assert (!sNot.ends_with(sv2));
-    assert (!sNot.ends_with(sv3));
-    assert (!sNot.ends_with(sv4));
-    assert (!sNot.ends_with(sv5));
-    assert ( sNot.ends_with(svNot));
+    assert(sNot.ends_with(sv0));
+    assert(!sNot.ends_with(sv1));
+    assert(!sNot.ends_with(sv2));
+    assert(!sNot.ends_with(sv3));
+    assert(!sNot.ends_with(sv4));
+    assert(!sNot.ends_with(sv5));
+    assert(sNot.ends_with(svNot));
   }
 
   return true;

diff  --git a/libcxx/test/std/strings/basic.string/string.iterators/begin.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/begin.pass.cpp
index 8363262f0c201ad..592ca787c1d6fc3 100644
--- a/libcxx/test/std/strings/basic.string/string.iterators/begin.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.iterators/begin.pass.cpp
@@ -18,17 +18,14 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s)
-{
-    const S& cs = s;
-    typename S::iterator b = s.begin();
-    typename S::const_iterator cb = cs.begin();
-    if (!s.empty())
-    {
-        assert(*b == s[0]);
-    }
-    assert(b == cb);
+TEST_CONSTEXPR_CXX20 void test(S s) {
+  const S& cs                   = s;
+  typename S::iterator b        = s.begin();
+  typename S::const_iterator cb = cs.begin();
+  if (!s.empty()) {
+    assert(*b == s[0]);
+  }
+  assert(b == cb);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -48,8 +45,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.iterators/cbegin.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/cbegin.pass.cpp
index 0a53017c5c0fab0..5a0de9d5424ae65 100644
--- a/libcxx/test/std/strings/basic.string/string.iterators/cbegin.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.iterators/cbegin.pass.cpp
@@ -17,15 +17,12 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s)
-{
-    typename S::const_iterator cb = s.cbegin();
-    if (!s.empty())
-    {
-        assert(*cb == s[0]);
-    }
-    assert(cb == s.begin());
+TEST_CONSTEXPR_CXX20 void test(const S& s) {
+  typename S::const_iterator cb = s.cbegin();
+  if (!s.empty()) {
+    assert(*cb == s[0]);
+  }
+  assert(cb == s.begin());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -45,8 +42,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp
index c142cbad0c53121..54b4e2bcedc295c 100644
--- a/libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp
@@ -17,11 +17,9 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s)
-{
-    typename S::const_iterator ce = s.cend();
-    assert(ce == s.end());
+TEST_CONSTEXPR_CXX20 void test(const S& s) {
+  typename S::const_iterator ce = s.cend();
+  assert(ce == s.end());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -41,8 +39,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.iterators/crbegin.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/crbegin.pass.cpp
index 95da6d3e5f3bec9..a1acf691b73c725 100644
--- a/libcxx/test/std/strings/basic.string/string.iterators/crbegin.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.iterators/crbegin.pass.cpp
@@ -17,15 +17,12 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s)
-{
-    typename S::const_reverse_iterator cb = s.crbegin();
-    if (!s.empty())
-    {
-        assert(*cb == s.back());
-    }
-    assert(cb == s.rbegin());
+TEST_CONSTEXPR_CXX20 void test(const S& s) {
+  typename S::const_reverse_iterator cb = s.crbegin();
+  if (!s.empty()) {
+    assert(*cb == s.back());
+  }
+  assert(cb == s.rbegin());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -45,8 +42,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.iterators/crend.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/crend.pass.cpp
index 193dd579593c96a..cc63b6bcc608dcc 100644
--- a/libcxx/test/std/strings/basic.string/string.iterators/crend.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.iterators/crend.pass.cpp
@@ -17,11 +17,9 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s)
-{
-    typename S::const_reverse_iterator ce = s.crend();
-    assert(ce == s.rend());
+TEST_CONSTEXPR_CXX20 void test(const S& s) {
+  typename S::const_reverse_iterator ce = s.crend();
+  assert(ce == s.rend());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -41,8 +39,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.iterators/end.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/end.pass.cpp
index 214ba84cff8e60c..64f91cae7d33f96 100644
--- a/libcxx/test/std/strings/basic.string/string.iterators/end.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.iterators/end.pass.cpp
@@ -19,19 +19,16 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s)
-{
-    const S& cs = s;
-    typename S::iterator e = s.end();
-    typename S::const_iterator ce = cs.end();
-    if (s.empty())
-    {
-        assert(e == s.begin());
-        assert(ce == cs.begin());
-    }
-    assert(static_cast<std::size_t>(e - s.begin()) == s.size());
-    assert(static_cast<std::size_t>(ce - cs.begin()) == cs.size());
+TEST_CONSTEXPR_CXX20 void test(S s) {
+  const S& cs                   = s;
+  typename S::iterator e        = s.end();
+  typename S::const_iterator ce = cs.end();
+  if (s.empty()) {
+    assert(e == s.begin());
+    assert(ce == cs.begin());
+  }
+  assert(static_cast<std::size_t>(e - s.begin()) == s.size());
+  assert(static_cast<std::size_t>(ce - cs.begin()) == cs.size());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -51,8 +48,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.iterators/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/iterator_concept_conformance.compile.pass.cpp
index b5d18403d277969..bde2f9e9cde3278 100644
--- a/libcxx/test/std/strings/basic.string/string.iterators/iterator_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.iterators/iterator_concept_conformance.compile.pass.cpp
@@ -14,11 +14,11 @@
 
 #include <iterator>
 
-using iterator = std::string::iterator;
-using const_iterator = std::string::const_iterator;
-using reverse_iterator = std::string::reverse_iterator;
+using iterator               = std::string::iterator;
+using const_iterator         = std::string::const_iterator;
+using reverse_iterator       = std::string::reverse_iterator;
 using const_reverse_iterator = std::string::const_reverse_iterator;
-using value_type = char;
+using value_type             = char;
 
 static_assert(std::contiguous_iterator<iterator>);
 static_assert(std::indirectly_writable<iterator, value_type>);
@@ -30,23 +30,23 @@ static_assert(std::sized_sentinel_for<iterator, iterator>);
 static_assert(std::sized_sentinel_for<iterator, const_iterator>);
 static_assert(!std::sized_sentinel_for<iterator, reverse_iterator>);
 static_assert(!std::sized_sentinel_for<iterator, const_reverse_iterator>);
-static_assert( std::indirectly_movable<iterator, iterator>);
-static_assert( std::indirectly_movable_storable<iterator, iterator>);
+static_assert(std::indirectly_movable<iterator, iterator>);
+static_assert(std::indirectly_movable_storable<iterator, iterator>);
 static_assert(!std::indirectly_movable<iterator, const_iterator>);
 static_assert(!std::indirectly_movable_storable<iterator, const_iterator>);
-static_assert( std::indirectly_movable<iterator, reverse_iterator>);
-static_assert( std::indirectly_movable_storable<iterator, reverse_iterator>);
+static_assert(std::indirectly_movable<iterator, reverse_iterator>);
+static_assert(std::indirectly_movable_storable<iterator, reverse_iterator>);
 static_assert(!std::indirectly_movable<iterator, const_reverse_iterator>);
 static_assert(!std::indirectly_movable_storable<iterator, const_reverse_iterator>);
-static_assert( std::indirectly_copyable<iterator, iterator>);
-static_assert( std::indirectly_copyable_storable<iterator, iterator>);
+static_assert(std::indirectly_copyable<iterator, iterator>);
+static_assert(std::indirectly_copyable_storable<iterator, iterator>);
 static_assert(!std::indirectly_copyable<iterator, const_iterator>);
 static_assert(!std::indirectly_copyable_storable<iterator, const_iterator>);
-static_assert( std::indirectly_copyable<iterator, reverse_iterator>);
-static_assert( std::indirectly_copyable_storable<iterator, reverse_iterator>);
+static_assert(std::indirectly_copyable<iterator, reverse_iterator>);
+static_assert(std::indirectly_copyable_storable<iterator, reverse_iterator>);
 static_assert(!std::indirectly_copyable<iterator, const_reverse_iterator>);
 static_assert(!std::indirectly_copyable_storable<iterator, const_reverse_iterator>);
-static_assert( std::indirectly_swappable<iterator, iterator>);
+static_assert(std::indirectly_swappable<iterator, iterator>);
 
 static_assert(std::contiguous_iterator<const_iterator>);
 static_assert(!std::indirectly_writable<const_iterator, value_type>);
@@ -58,20 +58,20 @@ static_assert(std::sized_sentinel_for<const_iterator, iterator>);
 static_assert(std::sized_sentinel_for<const_iterator, const_iterator>);
 static_assert(!std::sized_sentinel_for<const_iterator, reverse_iterator>);
 static_assert(!std::sized_sentinel_for<const_iterator, const_reverse_iterator>);
-static_assert( std::indirectly_movable<const_iterator, iterator>);
-static_assert( std::indirectly_movable_storable<const_iterator, iterator>);
+static_assert(std::indirectly_movable<const_iterator, iterator>);
+static_assert(std::indirectly_movable_storable<const_iterator, iterator>);
 static_assert(!std::indirectly_movable<const_iterator, const_iterator>);
 static_assert(!std::indirectly_movable_storable<const_iterator, const_iterator>);
-static_assert( std::indirectly_movable<const_iterator, reverse_iterator>);
-static_assert( std::indirectly_movable_storable<const_iterator, reverse_iterator>);
+static_assert(std::indirectly_movable<const_iterator, reverse_iterator>);
+static_assert(std::indirectly_movable_storable<const_iterator, reverse_iterator>);
 static_assert(!std::indirectly_movable<const_iterator, const_reverse_iterator>);
 static_assert(!std::indirectly_movable_storable<const_iterator, const_reverse_iterator>);
-static_assert( std::indirectly_copyable<const_iterator, iterator>);
-static_assert( std::indirectly_copyable_storable<const_iterator, iterator>);
+static_assert(std::indirectly_copyable<const_iterator, iterator>);
+static_assert(std::indirectly_copyable_storable<const_iterator, iterator>);
 static_assert(!std::indirectly_copyable<const_iterator, const_iterator>);
 static_assert(!std::indirectly_copyable_storable<const_iterator, const_iterator>);
-static_assert( std::indirectly_copyable<const_iterator, reverse_iterator>);
-static_assert( std::indirectly_copyable_storable<const_iterator, reverse_iterator>);
+static_assert(std::indirectly_copyable<const_iterator, reverse_iterator>);
+static_assert(std::indirectly_copyable_storable<const_iterator, reverse_iterator>);
 static_assert(!std::indirectly_copyable<const_iterator, const_reverse_iterator>);
 static_assert(!std::indirectly_copyable_storable<const_iterator, const_reverse_iterator>);
 static_assert(!std::indirectly_swappable<const_iterator, const_iterator>);

diff  --git a/libcxx/test/std/strings/basic.string/string.iterators/iterators.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/iterators.pass.cpp
index 161c9add9027841..f44ca0b88835e1a 100644
--- a/libcxx/test/std/strings/basic.string/string.iterators/iterators.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.iterators/iterators.pass.cpp
@@ -22,64 +22,62 @@
 
 #include "test_macros.h"
 
-template<class C>
-TEST_CONSTEXPR_CXX20 void test()
-{
-    { // N3644 testing
-        typename C::iterator ii1{}, ii2{};
-        typename C::iterator ii4 = ii1;
-        typename C::const_iterator cii{};
+template <class C>
+TEST_CONSTEXPR_CXX20 void test() {
+  { // N3644 testing
+    typename C::iterator ii1{}, ii2{};
+    typename C::iterator ii4 = ii1;
+    typename C::const_iterator cii{};
 
-        assert ( ii1 == ii2 );
-        assert ( ii1 == ii4 );
+    assert(ii1 == ii2);
+    assert(ii1 == ii4);
 
-        assert (!(ii1 != ii2 ));
+    assert(!(ii1 != ii2));
 
-        assert ( (ii1 == cii ));
-        assert ( (cii == ii1 ));
-        assert (!(ii1 != cii ));
-        assert (!(cii != ii1 ));
-        assert (!(ii1 <  cii ));
-        assert (!(cii <  ii1 ));
-        assert ( (ii1 <= cii ));
-        assert ( (cii <= ii1 ));
-        assert (!(ii1 >  cii ));
-        assert (!(cii >  ii1 ));
-        assert ( (ii1 >= cii ));
-        assert ( (cii >= ii1 ));
-        assert (cii - ii1 == 0);
-        assert (ii1 - cii == 0);
-    }
-    {
-        C a;
-        typename C::iterator i1 = a.begin();
-        typename C::iterator i2;
-        i2 = i1;
-        assert ( i1 == i2 );
-    }
+    assert((ii1 == cii));
+    assert((cii == ii1));
+    assert(!(ii1 != cii));
+    assert(!(cii != ii1));
+    assert(!(ii1 < cii));
+    assert(!(cii < ii1));
+    assert((ii1 <= cii));
+    assert((cii <= ii1));
+    assert(!(ii1 > cii));
+    assert(!(cii > ii1));
+    assert((ii1 >= cii));
+    assert((cii >= ii1));
+    assert(cii - ii1 == 0);
+    assert(ii1 - cii == 0);
+  }
+  {
+    C a;
+    typename C::iterator i1 = a.begin();
+    typename C::iterator i2;
+    i2 = i1;
+    assert(i1 == i2);
+  }
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
-    test<std::string>();
+  test<std::string>();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test<std::wstring>();
+  test<std::wstring>();
 #endif
 
 #ifndef TEST_HAS_NO_CHAR8_T
-    test<std::u8string>();
+  test<std::u8string>();
 #endif
 
-    test<std::u16string>();
-    test<std::u32string>();
+  test<std::u16string>();
+  test<std::u32string>();
 
-    return true;
+  return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/basic.string/string.iterators/rbegin.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/rbegin.pass.cpp
index d39467e4d059920..66bac353e1afe85 100644
--- a/libcxx/test/std/strings/basic.string/string.iterators/rbegin.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.iterators/rbegin.pass.cpp
@@ -18,17 +18,14 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s)
-{
-    const S& cs = s;
-    typename S::reverse_iterator b = s.rbegin();
-    typename S::const_reverse_iterator cb = cs.rbegin();
-    if (!s.empty())
-    {
-        assert(*b == s.back());
-    }
-    assert(b == cb);
+TEST_CONSTEXPR_CXX20 void test(S s) {
+  const S& cs                           = s;
+  typename S::reverse_iterator b        = s.rbegin();
+  typename S::const_reverse_iterator cb = cs.rbegin();
+  if (!s.empty()) {
+    assert(*b == s.back());
+  }
+  assert(b == cb);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -48,8 +45,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp
index 0002f7444b8dec7..01b2e0165fc7ac3 100644
--- a/libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp
@@ -19,19 +19,16 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s)
-{
-    const S& cs = s;
-    typename S::reverse_iterator e = s.rend();
-    typename S::const_reverse_iterator ce = cs.rend();
-    if (s.empty())
-    {
-        assert(e == s.rbegin());
-        assert(ce == cs.rbegin());
-    }
-    assert(static_cast<std::size_t>(e - s.rbegin()) == s.size());
-    assert(static_cast<std::size_t>(ce - cs.rbegin()) == cs.size());
+TEST_CONSTEXPR_CXX20 void test(S s) {
+  const S& cs                           = s;
+  typename S::reverse_iterator e        = s.rend();
+  typename S::const_reverse_iterator ce = cs.rend();
+  if (s.empty()) {
+    assert(e == s.rbegin());
+    assert(ce == cs.rbegin());
+  }
+  assert(static_cast<std::size_t>(e - s.rbegin()) == s.size());
+  assert(static_cast<std::size_t>(ce - cs.rbegin()) == cs.size());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -51,8 +48,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp
index 90b275b6c3c651e..fe231d84ddb6707 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp
@@ -14,29 +14,31 @@
 #include "test_macros.h"
 
 struct Incomplete;
-template<class T> struct Holder { T t; };
+template <class T>
+struct Holder {
+  T t;
+};
 
-template<class T>
+template <class T>
 struct Charlike {
-    char ch_;
-    TEST_CONSTEXPR Charlike(char ch) : ch_(ch) {}
-    TEST_CONSTEXPR operator char() const { return ch_; }
+  char ch_;
+  TEST_CONSTEXPR Charlike(char ch) : ch_(ch) {}
+  TEST_CONSTEXPR operator char() const { return ch_; }
 };
 
 TEST_CONSTEXPR_CXX20 bool test() {
   std::string s;
   Charlike<Holder<Incomplete> > a[] = {'m', 'a', 'h', 'i'};
-  s.append(a, a+4);
-  s.assign(a, a+4);
-  s.insert(s.begin(), a, a+4);
-  s.replace(s.begin(), s.begin()+4, a, a+4);
+  s.append(a, a + 4);
+  s.assign(a, a + 4);
+  s.insert(s.begin(), a, a + 4);
+  s.replace(s.begin(), s.begin() + 4, a, a + 4);
   assert(s == "mahimahi");
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp
index 52239246ac5ca89..cf45b368ebbcaf6 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp
@@ -20,54 +20,40 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(S s, SV sv, typename S::size_type pos, typename S::size_type n, S expected)
-{
-    if (pos <= sv.size())
-    {
-        s.append(sv, pos, n);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, SV sv, typename S::size_type pos, typename S::size_type n, S expected) {
+  if (pos <= sv.size()) {
+    s.append(sv, pos, n);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.append(sv, pos, n);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > sv.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.append(sv, pos, n);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > sv.size());
     }
+  }
 #endif
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test_npos(S s, SV sv, typename S::size_type pos, S expected)
-{
-    if (pos <= sv.size())
-    {
-        s.append(sv, pos);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test_npos(S s, SV sv, typename S::size_type pos, S expected) {
+  if (pos <= sv.size()) {
+    s.append(sv, pos);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.append(sv, pos);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > sv.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.append(sv, pos);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > sv.size());
     }
+  }
 #endif
 }
 
@@ -93,8 +79,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
 
   test(S("12345678901234567890"), SV(), 0, 0, S("12345678901234567890"));
   test(S("12345678901234567890"), SV("12345"), 1, 3, S("12345678901234567890234"));
-  test(S("12345678901234567890"), SV("12345678901234567890"), 5, 10,
-        S("123456789012345678906789012345"));
+  test(S("12345678901234567890"), SV("12345678901234567890"), 5, 10, S("123456789012345678906789012345"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -118,9 +103,9 @@ TEST_CONSTEXPR_CXX20 bool test() {
   {
     std::string s;
     std::string_view sv = "EFGH";
-    char arr[] = "IJKL";
+    char arr[]          = "IJKL";
 
-    s.append("CDEF", 0);    // calls append(const char *, len)
+    s.append("CDEF", 0); // calls append(const char *, len)
     assert(s == "");
     s.clear();
 
@@ -128,29 +113,29 @@ TEST_CONSTEXPR_CXX20 bool test() {
     assert(s == "QRST");
     s.clear();
 
-    s.append(sv, 0);  // calls append(T, pos, npos)
+    s.append(sv, 0); // calls append(T, pos, npos)
     assert(s == sv);
     s.clear();
 
-    s.append(sv, 0, std::string::npos);   // calls append(T, pos, npos)
+    s.append(sv, 0, std::string::npos); // calls append(T, pos, npos)
     assert(s == sv);
     s.clear();
 
-    s.append(arr, 0);     // calls append(const char *, len)
+    s.append(arr, 0); // calls append(const char *, len)
     assert(s == "");
     s.clear();
 
-    s.append(arr, 0, std::string::npos);    // calls append(string("IJKL"), pos, npos)
+    s.append(arr, 0, std::string::npos); // calls append(string("IJKL"), pos, npos)
     assert(s == "IJKL");
     s.clear();
 
-    s.append(arr, 0);     // calls append(const char *, len)
+    s.append(arr, 0); // calls append(const char *, len)
     assert(s == "");
     s.clear();
   }
 
   {
-    std::string s = "ABCD";
+    std::string s       = "ABCD";
     std::string_view sv = s;
     s.append(sv);
     assert(s == "ABCDABCD");
@@ -165,20 +150,20 @@ TEST_CONSTEXPR_CXX20 bool test() {
   }
 
   {
-    std::string s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+    std::string s       = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     std::string_view sv = s;
     s.append(sv);
     assert(s == "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ");
 
     sv = s;
     s.append(sv, 0, std::string::npos);
-    assert(s == "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ");
+    assert(s ==
+           "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ");
   }
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/append_range.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/append_range.pass.cpp
index bc736971ea16852..68327f65bdb381a 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/append_range.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/append_range.pass.cpp
@@ -43,9 +43,7 @@ int main(int, char**) {
 
   { // Check that `append_range` returns a reference to the string.
     std::string c;
-    static_assert(std::is_lvalue_reference_v<decltype(
-        c.append_range(FullContainer_Begin_EmptyRange<char>.input)
-    )>);
+    static_assert(std::is_lvalue_reference_v<decltype(c.append_range(FullContainer_Begin_EmptyRange<char>.input))>);
     assert(&c.append_range(FullContainer_Begin_EmptyRange<char>.input) == &c);
     assert(&c.append_range(FullContainer_Begin_OneElementRange<char>.input) == &c);
     assert(&c.append_range(FullContainer_Begin_MidRange<char>.input) == &c);

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp
index cf740531364745a..6502e630d92878e 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp
@@ -19,36 +19,35 @@
 #include "min_allocator.h"
 
 template <class S, class It>
-TEST_CONSTEXPR_CXX20 void
-test(S s, It first, It last, S expected)
-{
-    s.append(first, last);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, It first, It last, S expected) {
+  s.append(first, last);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 #ifndef TEST_HAS_NO_EXCEPTIONS
-struct Widget { operator char() const { throw 42; } };
+struct Widget {
+  operator char() const { throw 42; }
+};
 
 template <class S, class It>
-TEST_CONSTEXPR_CXX20 void
-test_exceptions(S s, It first, It last)
-{
-    S original = s;
-    typename S::iterator begin = s.begin();
-    typename S::iterator end = s.end();
-
-    try {
-        s.append(first, last);
-        assert(false);
-    } catch (...) {}
-
-    // Part of "no effects" is that iterators and pointers
-    // into the string must not have been invalidated.
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == original);
-    assert(s.begin() == begin);
-    assert(s.end() == end);
+TEST_CONSTEXPR_CXX20 void test_exceptions(S s, It first, It last) {
+  S original                 = s;
+  typename S::iterator begin = s.begin();
+  typename S::iterator end   = s.end();
+
+  try {
+    s.append(first, last);
+    assert(false);
+  } catch (...) {
+  }
+
+  // Part of "no effects" is that iterators and pointers
+  // into the string must not have been invalidated.
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == original);
+  assert(s.begin() == begin);
+  assert(s.end() == end);
 }
 #endif
 
@@ -56,59 +55,89 @@ template <class S>
 TEST_CONSTEXPR_CXX20 void test_string() {
   const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
   test(S(), s, s, S());
-  test(S(), s, s+1, S("A"));
-  test(S(), s, s+10, S("ABCDEFGHIJ"));
-  test(S(), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S(), s, s + 1, S("A"));
+  test(S(), s, s + 10, S("ABCDEFGHIJ"));
+  test(S(), s, s + 52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S("12345"), s, s, S("12345"));
-  test(S("12345"), s, s+1, S("12345A"));
-  test(S("12345"), s, s+10, S("12345ABCDEFGHIJ"));
-  test(S("12345"), s, s+52, S("12345ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S("12345"), s, s + 1, S("12345A"));
+  test(S("12345"), s, s + 10, S("12345ABCDEFGHIJ"));
+  test(S("12345"), s, s + 52, S("12345ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S("1234567890"), s, s, S("1234567890"));
-  test(S("1234567890"), s, s+1, S("1234567890A"));
-  test(S("1234567890"), s, s+10, S("1234567890ABCDEFGHIJ"));
-  test(S("1234567890"), s, s+52, S("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S("1234567890"), s, s + 1, S("1234567890A"));
+  test(S("1234567890"), s, s + 10, S("1234567890ABCDEFGHIJ"));
+  test(S("1234567890"), s, s + 52, S("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S("12345678901234567890"), s, s, S("12345678901234567890"));
-  test(S("12345678901234567890"), s, s+1, S("12345678901234567890""A"));
-  test(S("12345678901234567890"), s, s+10, S("12345678901234567890""ABCDEFGHIJ"));
-  test(S("12345678901234567890"), s, s+52,
-      S("12345678901234567890""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S("12345678901234567890"),
+       s,
+       s + 1,
+       S("12345678901234567890"
+         "A"));
+  test(S("12345678901234567890"),
+       s,
+       s + 10,
+       S("12345678901234567890"
+         "ABCDEFGHIJ"));
+  test(S("12345678901234567890"),
+       s,
+       s + 52,
+       S("12345678901234567890"
+         "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S(), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), S());
-  test(S(), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1), S("A"));
-  test(S(), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10),
-      S("ABCDEFGHIJ"));
-  test(S(), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+52),
-      S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
-
-  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s),
-      S("12345"));
-  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1),
-      S("12345A"));
-  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10),
-      S("12345ABCDEFGHIJ"));
-  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+52),
-      S("12345ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
-
-  test(S("1234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s),
-      S("1234567890"));
-  test(S("1234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1),
-      S("1234567890A"));
-  test(S("1234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10),
-      S("1234567890ABCDEFGHIJ"));
-  test(S("1234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+52),
-      S("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
-
-  test(S("12345678901234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s),
-      S("12345678901234567890"));
-  test(S("12345678901234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1),
-      S("12345678901234567890""A"));
-  test(S("12345678901234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10),
-      S("12345678901234567890""ABCDEFGHIJ"));
-  test(S("12345678901234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+52),
-      S("12345678901234567890""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S(), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 1), S("A"));
+  test(S(), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 10), S("ABCDEFGHIJ"));
+  test(S(),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 52),
+       S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+
+  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), S("12345"));
+  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 1), S("12345A"));
+  test(S("12345"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 10),
+       S("12345ABCDEFGHIJ"));
+  test(S("12345"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 52),
+       S("12345ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+
+  test(S("1234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), S("1234567890"));
+  test(S("1234567890"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 1),
+       S("1234567890A"));
+  test(S("1234567890"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 10),
+       S("1234567890ABCDEFGHIJ"));
+  test(S("1234567890"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 52),
+       S("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+
+  test(S("12345678901234567890"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s),
+       S("12345678901234567890"));
+  test(S("12345678901234567890"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 1),
+       S("12345678901234567890"
+         "A"));
+  test(S("12345678901234567890"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 10),
+       S("12345678901234567890"
+         "ABCDEFGHIJ"));
+  test(S("12345678901234567890"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 52),
+       S("12345678901234567890"
+         "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -123,16 +152,16 @@ TEST_CONSTEXPR_CXX20 bool test() {
     typedef ThrowingIterator<char> TIter;
     typedef cpp17_input_iterator<TIter> IIter;
     const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-    test_exceptions(S(), IIter(TIter(s, s+10, 4, TIter::TAIncrement)), IIter(TIter()));
-    test_exceptions(S(), IIter(TIter(s, s+10, 5, TIter::TADereference)), IIter(TIter()));
-    test_exceptions(S(), IIter(TIter(s, s+10, 6, TIter::TAComparison)), IIter(TIter()));
+    test_exceptions(S(), IIter(TIter(s, s + 10, 4, TIter::TAIncrement)), IIter(TIter()));
+    test_exceptions(S(), IIter(TIter(s, s + 10, 5, TIter::TADereference)), IIter(TIter()));
+    test_exceptions(S(), IIter(TIter(s, s + 10, 6, TIter::TAComparison)), IIter(TIter()));
 
-    test_exceptions(S(), TIter(s, s+10, 4, TIter::TAIncrement), TIter());
-    test_exceptions(S(), TIter(s, s+10, 5, TIter::TADereference), TIter());
-    test_exceptions(S(), TIter(s, s+10, 6, TIter::TAComparison), TIter());
+    test_exceptions(S(), TIter(s, s + 10, 4, TIter::TAIncrement), TIter());
+    test_exceptions(S(), TIter(s, s + 10, 5, TIter::TADereference), TIter());
+    test_exceptions(S(), TIter(s, s + 10, 6, TIter::TAComparison), TIter());
 
     Widget w[100];
-    test_exceptions(S(), w, w+100);
+    test_exceptions(S(), w, w + 100);
   }
 #endif
 
@@ -162,23 +191,24 @@ TEST_CONSTEXPR_CXX20 bool test() {
   }
 
   { // regression-test appending to self in sneaky ways
-    std::string s_short = "hello";
-    std::string s_long = "Lorem ipsum dolor sit amet, consectetur/";
+    std::string s_short     = "hello";
+    std::string s_long      = "Lorem ipsum dolor sit amet, consectetur/";
     std::string s_othertype = "hello";
-    std::string s_sneaky = "hello";
+    std::string s_sneaky    = "hello";
 
-    test(s_short, s_short.data() + s_short.size(), s_short.data() + s_short.size() + 1,
-         std::string("hello\0", 6));
-    test(s_long, s_long.data() + s_long.size(), s_long.data() + s_long.size() + 1,
+    test(s_short, s_short.data() + s_short.size(), s_short.data() + s_short.size() + 1, std::string("hello\0", 6));
+    test(s_long,
+         s_long.data() + s_long.size(),
+         s_long.data() + s_long.size() + 1,
          std::string("Lorem ipsum dolor sit amet, consectetur/\0", 41));
 
     s_sneaky.reserve(12);
     test(s_sneaky, s_sneaky.data(), s_sneaky.data() + 6, std::string("hellohello\0", 11));
 
-     if (!TEST_IS_CONSTANT_EVALUATED) {
-       const unsigned char *first = reinterpret_cast<const unsigned char*>(s_othertype.data());
-       test(s_othertype, first + 2, first + 5, std::string("hellollo"));
-     }
+    if (!TEST_IS_CONSTANT_EVALUATED) {
+      const unsigned char* first = reinterpret_cast<const unsigned char*>(s_othertype.data());
+      test(s_othertype, first + 2, first + 5, std::string("hellollo"));
+    }
   }
 
   { // test with a move iterator that returns char&&
@@ -201,8 +231,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp
index 526fed83daca348..68f5838ccf2f02a 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp
@@ -18,12 +18,10 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, const typename S::value_type* str, S expected)
-{
-    s.append(str);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, S expected) {
+  s.append(str);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 template <class S>
@@ -38,8 +36,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
 
   test(S("12345678901234567890"), "", S("12345678901234567890"));
   test(S("12345678901234567890"), "12345", S("1234567890123456789012345"));
-  test(S("12345678901234567890"), "12345678901234567890",
-        S("1234567890123456789012345678901234567890"));
+  test(S("12345678901234567890"), "12345678901234567890", S("1234567890123456789012345678901234567890"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -66,8 +63,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp
index 57390cadb7c4a24..b98c91cf097b1a0 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp
@@ -19,12 +19,10 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, const typename S::value_type* str, typename S::size_type n, S expected)
-{
-    s.append(str, n);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, typename S::size_type n, S expected) {
+  s.append(str, n);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 template <class S>
@@ -43,8 +41,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
 
   test(S("12345678901234567890"), "", 0, S("12345678901234567890"));
   test(S("12345678901234567890"), "12345", 5, S("1234567890123456789012345"));
-  test(S("12345678901234567890"), "12345678901234567890", 20,
-        S("1234567890123456789012345678901234567890"));
+  test(S("12345678901234567890"), "12345678901234567890", 20, S("1234567890123456789012345678901234567890"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -72,8 +69,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp
index 809ed97decd7936..c985d89f88ffad7 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/push_back.pass.cpp
@@ -23,46 +23,44 @@ struct VeryLarge {
 };
 
 namespace std {
-  template <>
-  struct char_traits<VeryLarge> {
-    using char_type           = VeryLarge;
-    using int_type            = int;
-    using off_type            = streamoff;
-    using pos_type            = streampos;
-    using state_type          = mbstate_t;
+template <>
+struct char_traits<VeryLarge> {
+  using char_type  = VeryLarge;
+  using int_type   = int;
+  using off_type   = streamoff;
+  using pos_type   = streampos;
+  using state_type = mbstate_t;
 
-    static TEST_CONSTEXPR_CXX20 void assign(char_type& c1, const char_type& c2) { c1 = c2; }
-    static bool eq(char_type c1, char_type c2);
-    static bool lt(char_type c1, char_type c2);
+  static TEST_CONSTEXPR_CXX20 void assign(char_type& c1, const char_type& c2) { c1 = c2; }
+  static bool eq(char_type c1, char_type c2);
+  static bool lt(char_type c1, char_type c2);
 
-    static int compare(const char_type* s1, const char_type* s2, std::size_t n);
-    static std::size_t length(const char_type* s);
-    static const char_type* find(const char_type* s, std::size_t n, const char_type& a);
-    static char_type* move(char_type* s1, const char_type* s2, std::size_t n);
-    static TEST_CONSTEXPR_CXX20 char_type* copy(char_type* s1, const char_type* s2, std::size_t n) {
-      std::copy_n(s2, n, s1);
-      return s1;
-    }
-    static TEST_CONSTEXPR_CXX20 char_type* assign(char_type* s, std::size_t n, char_type a) {
-      std::fill_n(s, n, a);
-      return s;
-    }
+  static int compare(const char_type* s1, const char_type* s2, std::size_t n);
+  static std::size_t length(const char_type* s);
+  static const char_type* find(const char_type* s, std::size_t n, const char_type& a);
+  static char_type* move(char_type* s1, const char_type* s2, std::size_t n);
+  static TEST_CONSTEXPR_CXX20 char_type* copy(char_type* s1, const char_type* s2, std::size_t n) {
+    std::copy_n(s2, n, s1);
+    return s1;
+  }
+  static TEST_CONSTEXPR_CXX20 char_type* assign(char_type* s, std::size_t n, char_type a) {
+    std::fill_n(s, n, a);
+    return s;
+  }
 
-    static int_type not_eof(int_type c);
-    static char_type to_char_type(int_type c);
-    static int_type to_int_type(char_type c);
-    static bool eq_int_type(int_type c1, int_type c2);
-    static int_type eof();
-  };
+  static int_type not_eof(int_type c);
+  static char_type to_char_type(int_type c);
+  static int_type to_int_type(char_type c);
+  static bool eq_int_type(int_type c1, int_type c2);
+  static int_type eof();
+};
 } // end namespace std
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::value_type c, S expected)
-{
-    s.push_back(c);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::value_type c, S expected) {
+  s.push_back(c);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -93,8 +91,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/size_char.pass.cpp
index d6c38d2f00d31e2..eb0728456df5be4 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/size_char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/size_char.pass.cpp
@@ -18,12 +18,10 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type n, typename S::value_type c, S expected)
-{
-    s.append(n, c);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type n, typename S::value_type c, S expected) {
+  s.append(n, c);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 template <class S>
@@ -51,8 +49,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string.pass.cpp
index cd4b1a4ec5c92b3..21f2ff53004d158 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string.pass.cpp
@@ -18,12 +18,10 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, S str, S expected)
-{
-    s.append(str);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, S str, S expected) {
+  s.append(str);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 template <class S>
@@ -46,8 +44,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("12345678901234567890"), S(), S("12345678901234567890"));
   test(S("12345678901234567890"), S("12345"), S("1234567890123456789012345"));
   test(S("12345678901234567890"), S("1234567890"), S("123456789012345678901234567890"));
-  test(S("12345678901234567890"), S("12345678901234567890"),
-        S("1234567890123456789012345678901234567890"));
+  test(S("12345678901234567890"), S("12345678901234567890"), S("1234567890123456789012345678901234567890"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -57,7 +54,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
 #endif
 
 #if TEST_STD_VER >= 11
-  {   // LWG 2946
+  { // LWG 2946
     std::string s;
     s.append({"abc", 1});
     assert(s.size() == 1);
@@ -68,8 +65,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp
index 069775d4b30911a..902d29c53ac69f5 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp
@@ -20,54 +20,40 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, S str, typename S::size_type pos, typename S::size_type n, S expected)
-{
-    if (pos <= str.size())
-    {
-        s.append(str, pos, n);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, S str, typename S::size_type pos, typename S::size_type n, S expected) {
+  if (pos <= str.size()) {
+    s.append(str, pos, n);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.append(str, pos, n);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > str.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.append(str, pos, n);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > str.size());
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test_npos(S s, S str, typename S::size_type pos, S expected)
-{
-    if (pos <= str.size())
-    {
-        s.append(str, pos);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test_npos(S s, S str, typename S::size_type pos, S expected) {
+  if (pos <= str.size()) {
+    s.append(str, pos);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.append(str, pos);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > str.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.append(str, pos);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > str.size());
     }
+  }
 #endif
 }
 
@@ -92,8 +78,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
 
   test(S("12345678901234567890"), S(), 0, 0, S("12345678901234567890"));
   test(S("12345678901234567890"), S("12345"), 1, 3, S("12345678901234567890234"));
-  test(S("12345678901234567890"), S("12345678901234567890"), 5, 10,
-        S("123456789012345678906789012345"));
+  test(S("12345678901234567890"), S("12345678901234567890"), 5, 10, S("123456789012345678906789012345"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -116,8 +101,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_view.pass.cpp
index c68445eaa08ea06..c09cdde1bc105e3 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_view.pass.cpp
@@ -19,12 +19,10 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(S s, SV sv, S expected)
-{
-    s.append(sv);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, SV sv, S expected) {
+  s.append(sv);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 template <class S>
@@ -48,8 +46,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("12345678901234567890"), SV(), S("12345678901234567890"));
   test(S("12345678901234567890"), SV("12345"), S("1234567890123456789012345"));
   test(S("12345678901234567890"), SV("1234567890"), S("123456789012345678901234567890"));
-  test(S("12345678901234567890"), SV("12345678901234567890"),
-        S("1234567890123456789012345678901234567890"));
+  test(S("12345678901234567890"), SV("12345678901234567890"), S("1234567890123456789012345678901234567890"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -61,8 +58,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp
index 727e1986f37a42b..a2a954cb94aac6a 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp
@@ -19,54 +19,40 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(S s, SV sv, typename S::size_type pos, typename S::size_type n, S expected)
-{
-    if (pos <= sv.size())
-    {
-        s.assign(sv, pos, n);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, SV sv, typename S::size_type pos, typename S::size_type n, S expected) {
+  if (pos <= sv.size()) {
+    s.assign(sv, pos, n);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.assign(sv, pos, n);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > sv.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.assign(sv, pos, n);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > sv.size());
     }
+  }
 #endif
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test_npos(S s, SV sv, typename S::size_type pos, S expected)
-{
-    if (pos <= sv.size())
-    {
-        s.assign(sv, pos);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test_npos(S s, SV sv, typename S::size_type pos, S expected) {
+  if (pos <= sv.size()) {
+    s.assign(sv, pos);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.assign(sv, pos);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > sv.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.assign(sv, pos);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > sv.size());
     }
+  }
 #endif
 }
 
@@ -92,8 +78,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
 
   test(S("12345678901234567890"), SV(), 0, 0, S());
   test(S("12345678901234567890"), SV("12345"), 1, 3, S("234"));
-  test(S("12345678901234567890"), SV("12345678901234567890"), 5, 10,
-        S("6789012345"));
+  test(S("12345678901234567890"), SV("12345678901234567890"), 5, 10, S("6789012345"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -115,11 +100,11 @@ TEST_CONSTEXPR_CXX20 bool test() {
   }
 
   {
-    std::string s = "ABCD";
+    std::string s       = "ABCD";
     std::string_view sv = "EFGH";
-    char arr[] = "IJKL";
+    char arr[]          = "IJKL";
 
-    s.assign("CDEF", 0);    // calls assign(const char *, len)
+    s.assign("CDEF", 0); // calls assign(const char *, len)
     assert(s == "");
     s.clear();
 
@@ -127,29 +112,29 @@ TEST_CONSTEXPR_CXX20 bool test() {
     assert(s == "QRST");
     s.clear();
 
-    s.assign(sv, 0);  // calls assign(T, pos, npos)
+    s.assign(sv, 0); // calls assign(T, pos, npos)
     assert(s == sv);
     s.clear();
 
-    s.assign(sv, 0, std::string::npos);   // calls assign(T, pos, npos)
+    s.assign(sv, 0, std::string::npos); // calls assign(T, pos, npos)
     assert(s == sv);
     s.clear();
 
-    s.assign(arr, 0);     // calls assign(const char *, len)
+    s.assign(arr, 0); // calls assign(const char *, len)
     assert(s == "");
     s.clear();
 
-    s.assign(arr, 0, std::string::npos);    // calls assign(string("IJKL"), pos, npos)
+    s.assign(arr, 0, std::string::npos); // calls assign(string("IJKL"), pos, npos)
     assert(s == "IJKL");
     s.clear();
 
-    s.assign(arr, 0);     // calls assign(const char *, len)
+    s.assign(arr, 0); // calls assign(const char *, len)
     assert(s == "");
     s.clear();
   }
 
   {
-    std::string s = "ABCD";
+    std::string s       = "ABCD";
     std::string_view sv = s;
     s.assign(sv);
     assert(s == "ABCD");
@@ -160,7 +145,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   }
 
   {
-    std::string s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+    std::string s       = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     std::string_view sv = s;
     s.assign(sv);
     assert(s == "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
@@ -172,8 +157,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/assign_range.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/assign_range.pass.cpp
index fe213df5ab55971..5c43eeaf39dfff4 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/assign_range.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/assign_range.pass.cpp
@@ -43,9 +43,7 @@ int main(int, char**) {
 
   { // Check that `assign_range` returns a reference to the string.
     std::string c;
-    static_assert(std::is_lvalue_reference_v<decltype(
-        c.assign_range(FullContainer_Begin_EmptyRange<char>.input)
-    )>);
+    static_assert(std::is_lvalue_reference_v<decltype(c.assign_range(FullContainer_Begin_EmptyRange<char>.input))>);
     assert(&c.assign_range(FullContainer_Begin_EmptyRange<char>.input) == &c);
     assert(&c.assign_range(FullContainer_Begin_OneElementRange<char>.input) == &c);
     assert(&c.assign_range(FullContainer_Begin_MidRange<char>.input) == &c);

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/initializer_list.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/initializer_list.pass.cpp
index cee16ef6fba5f8c..baabe167ff17a0f 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/initializer_list.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/initializer_list.pass.cpp
@@ -34,8 +34,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp
index 9af2f12bdb308fe..81e28391dbd68d0 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp
@@ -19,36 +19,35 @@
 #include "min_allocator.h"
 
 template <class S, class It>
-TEST_CONSTEXPR_CXX20 void
-test(S s, It first, It last, S expected)
-{
-    s.assign(first, last);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, It first, It last, S expected) {
+  s.assign(first, last);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 #ifndef TEST_HAS_NO_EXCEPTIONS
-struct Widget { operator char() const { throw 42; } };
+struct Widget {
+  operator char() const { throw 42; }
+};
 
 template <class S, class It>
-void
-test_exceptions(S s, It first, It last)
-{
-    S original = s;
-    typename S::iterator begin = s.begin();
-    typename S::iterator end = s.end();
-
-    try {
-        s.assign(first, last);
-        assert(false);
-    } catch (...) {}
-
-    // Part of "no effects" is that iterators and pointers
-    // into the string must not have been invalidated.
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == original);
-    assert(s.begin() == begin);
-    assert(s.end() == end);
+void test_exceptions(S s, It first, It last) {
+  S original                 = s;
+  typename S::iterator begin = s.begin();
+  typename S::iterator end   = s.end();
+
+  try {
+    s.assign(first, last);
+    assert(false);
+  } catch (...) {
+  }
+
+  // Part of "no effects" is that iterators and pointers
+  // into the string must not have been invalidated.
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == original);
+  assert(s.begin() == begin);
+  assert(s.end() == end);
 }
 #endif
 
@@ -56,59 +55,65 @@ template <class S>
 TEST_CONSTEXPR_CXX20 void test_string() {
   const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
   test(S(), s, s, S());
-  test(S(), s, s+1, S("A"));
-  test(S(), s, s+10, S("ABCDEFGHIJ"));
-  test(S(), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S(), s, s + 1, S("A"));
+  test(S(), s, s + 10, S("ABCDEFGHIJ"));
+  test(S(), s, s + 52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S("12345"), s, s, S());
-  test(S("12345"), s, s+1, S("A"));
-  test(S("12345"), s, s+10, S("ABCDEFGHIJ"));
-  test(S("12345"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S("12345"), s, s + 1, S("A"));
+  test(S("12345"), s, s + 10, S("ABCDEFGHIJ"));
+  test(S("12345"), s, s + 52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S("1234567890"), s, s, S());
-  test(S("1234567890"), s, s+1, S("A"));
-  test(S("1234567890"), s, s+10, S("ABCDEFGHIJ"));
-  test(S("1234567890"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S("1234567890"), s, s + 1, S("A"));
+  test(S("1234567890"), s, s + 10, S("ABCDEFGHIJ"));
+  test(S("1234567890"), s, s + 52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S("12345678901234567890"), s, s, S());
-  test(S("12345678901234567890"), s, s+1, S("A"));
-  test(S("12345678901234567890"), s, s+10, S("ABCDEFGHIJ"));
-  test(S("12345678901234567890"), s, s+52,
-      S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S("12345678901234567890"), s, s + 1, S("A"));
+  test(S("12345678901234567890"), s, s + 10, S("ABCDEFGHIJ"));
+  test(S("12345678901234567890"), s, s + 52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S(), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), S());
-  test(S(), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1), S("A"));
-  test(S(), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10),
-      S("ABCDEFGHIJ"));
-  test(S(), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+52),
-      S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
-
-  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s),
-      S());
-  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1),
-      S("A"));
-  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10),
-      S("ABCDEFGHIJ"));
-  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+52),
-      S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
-
-  test(S("1234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s),
-      S());
-  test(S("1234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1),
-      S("A"));
-  test(S("1234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10),
-      S("ABCDEFGHIJ"));
-  test(S("1234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+52),
-      S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
-
-  test(S("12345678901234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s),
-      S());
-  test(S("12345678901234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1),
-      S("A"));
-  test(S("12345678901234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10),
-      S("ABCDEFGHIJ"));
-  test(S("12345678901234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+52),
-      S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S(), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 1), S("A"));
+  test(S(), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 10), S("ABCDEFGHIJ"));
+  test(S(),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 52),
+       S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+
+  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), S());
+  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 1), S("A"));
+  test(S("12345"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 10), S("ABCDEFGHIJ"));
+  test(S("12345"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 52),
+       S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+
+  test(S("1234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), S());
+  test(S("1234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 1), S("A"));
+  test(S("1234567890"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 10),
+       S("ABCDEFGHIJ"));
+  test(S("1234567890"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 52),
+       S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+
+  test(S("12345678901234567890"), cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), S());
+  test(S("12345678901234567890"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 1),
+       S("A"));
+  test(S("12345678901234567890"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 10),
+       S("ABCDEFGHIJ"));
+  test(S("12345678901234567890"),
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 52),
+       S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -123,16 +128,16 @@ TEST_CONSTEXPR_CXX20 bool test() {
     typedef ThrowingIterator<char> TIter;
     typedef cpp17_input_iterator<TIter> IIter;
     const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-    test_exceptions(S(), IIter(TIter(s, s+10, 4, TIter::TAIncrement)), IIter(TIter()));
-    test_exceptions(S(), IIter(TIter(s, s+10, 5, TIter::TADereference)), IIter(TIter()));
-    test_exceptions(S(), IIter(TIter(s, s+10, 6, TIter::TAComparison)), IIter(TIter()));
+    test_exceptions(S(), IIter(TIter(s, s + 10, 4, TIter::TAIncrement)), IIter(TIter()));
+    test_exceptions(S(), IIter(TIter(s, s + 10, 5, TIter::TADereference)), IIter(TIter()));
+    test_exceptions(S(), IIter(TIter(s, s + 10, 6, TIter::TAComparison)), IIter(TIter()));
 
-    test_exceptions(S(), TIter(s, s+10, 4, TIter::TAIncrement), TIter());
-    test_exceptions(S(), TIter(s, s+10, 5, TIter::TADereference), TIter());
-    test_exceptions(S(), TIter(s, s+10, 6, TIter::TAComparison), TIter());
+    test_exceptions(S(), TIter(s, s + 10, 4, TIter::TAIncrement), TIter());
+    test_exceptions(S(), TIter(s, s + 10, 5, TIter::TADereference), TIter());
+    test_exceptions(S(), TIter(s, s + 10, 6, TIter::TAComparison), TIter());
 
     Widget w[100];
-    test_exceptions(S(), w, w+100);
+    test_exceptions(S(), w, w + 100);
   }
 #endif
 
@@ -171,12 +176,11 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp
index 5148f46c1891fbd..11e12c318a2e800 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer.pass.cpp
@@ -18,12 +18,10 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, const typename S::value_type* str, S expected)
-{
-    s.assign(str);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, S expected) {
+  s.assign(str);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 template <class S>
@@ -38,8 +36,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
 
   test(S("12345678901234567890"), "", S());
   test(S("12345678901234567890"), "12345", S("12345"));
-  test(S("12345678901234567890"), "12345678901234567890",
-        S("12345678901234567890"));
+  test(S("12345678901234567890"), "12345678901234567890", S("12345678901234567890"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -65,8 +62,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp
index 25a62b72b75e016..2738a9a6ffad594 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/pointer_size.pass.cpp
@@ -19,12 +19,10 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, const typename S::value_type* str, typename S::size_type n, S expected)
-{
-    s.assign(str, n);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, typename S::size_type n, S expected) {
+  s.assign(str, n);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 template <class S>
@@ -43,8 +41,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
 
   test(S("12345678901234567890"), "", 0, S());
   test(S("12345678901234567890"), "12345", 5, S("12345"));
-  test(S("12345678901234567890"), "12345678901234567890", 20,
-        S("12345678901234567890"));
+  test(S("12345678901234567890"), "12345678901234567890", 20, S("12345678901234567890"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -66,14 +63,13 @@ TEST_CONSTEXPR_CXX20 bool test() {
     s_long.assign(s_long.data(), s_long.size());
     assert(s_long == "Lorem ipsum dolor sit amet, consectetur/");
 
-    s_long.assign(s_long.data() + 2, 8 );
+    s_long.assign(s_long.data() + 2, 8);
     assert(s_long == "rem ipsu");
   }
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/rv_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/rv_string.pass.cpp
index f491ae04e597c44..a33e8e97157c40b 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/rv_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/rv_string.pass.cpp
@@ -19,12 +19,10 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, S str, S expected)
-{
-    s.assign(std::move(str));
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, S str, S expected) {
+  s.assign(std::move(str));
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 template <class S>
@@ -47,8 +45,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("12345678901234567890"), S(), S());
   test(S("12345678901234567890"), S("12345"), S("12345"));
   test(S("12345678901234567890"), S("1234567890"), S("1234567890"));
-  test(S("12345678901234567890"), S("12345678901234567890"),
-        S("12345678901234567890"));
+  test(S("12345678901234567890"), S("12345678901234567890"), S("12345678901234567890"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -60,8 +57,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/size_char.pass.cpp
index 82672e07d2fb0dc..b52c66103395f19 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/size_char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/size_char.pass.cpp
@@ -18,12 +18,10 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type n, typename S::value_type c, S expected)
-{
-    s.assign(n, c);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type n, typename S::value_type c, S expected) {
+  s.assign(n, c);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 template <class S>
@@ -51,8 +49,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp
index 99503741743f766..311778c35dcbaa9 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string.pass.cpp
@@ -27,72 +27,70 @@ TEST_CONSTEXPR_CXX20 void test(S dest, S src) {
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-testAlloc(S dest, S src, const typename S::allocator_type& a)
-{
-    dest.assign(src);
-    LIBCPP_ASSERT(dest.__invariants());
-    assert(dest == src);
-    assert(dest.get_allocator() == a);
+TEST_CONSTEXPR_CXX20 void testAlloc(S dest, S src, const typename S::allocator_type& a) {
+  dest.assign(src);
+  LIBCPP_ASSERT(dest.__invariants());
+  assert(dest == src);
+  assert(dest.get_allocator() == a);
 }
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void test_assign() {
-    using CharT = typename S::value_type;
-
-    test(S(), S());
-    test(S(), S(CONVERT_TO_CSTRING(CharT, "12345")));
-    test(S(), S(CONVERT_TO_CSTRING(CharT, "1234567890")));
-    test(S(), S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")));
-
-    test(S(CONVERT_TO_CSTRING(CharT, "12345")), S());
-    test(S(CONVERT_TO_CSTRING(CharT, "12345")), S(CONVERT_TO_CSTRING(CharT, "12345")));
-    test(S(CONVERT_TO_CSTRING(CharT, "12345")), S(CONVERT_TO_CSTRING(CharT, "1234567890")));
-    test(S(CONVERT_TO_CSTRING(CharT, "12345")), S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")));
-
-    test(S(CONVERT_TO_CSTRING(CharT, "1234567890")), S());
-    test(S(CONVERT_TO_CSTRING(CharT, "1234567890")), S(CONVERT_TO_CSTRING(CharT, "12345")));
-    test(S(CONVERT_TO_CSTRING(CharT, "1234567890")), S(CONVERT_TO_CSTRING(CharT, "1234567890")));
-    test(S(CONVERT_TO_CSTRING(CharT, "1234567890")), S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")));
-
-    test(S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")), S());
-    test(S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")), S(CONVERT_TO_CSTRING(CharT, "12345")));
-    test(S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")), S(CONVERT_TO_CSTRING(CharT, "1234567890")));
-    test(S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")), S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")));
+  using CharT = typename S::value_type;
+
+  test(S(), S());
+  test(S(), S(CONVERT_TO_CSTRING(CharT, "12345")));
+  test(S(), S(CONVERT_TO_CSTRING(CharT, "1234567890")));
+  test(S(), S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")));
+
+  test(S(CONVERT_TO_CSTRING(CharT, "12345")), S());
+  test(S(CONVERT_TO_CSTRING(CharT, "12345")), S(CONVERT_TO_CSTRING(CharT, "12345")));
+  test(S(CONVERT_TO_CSTRING(CharT, "12345")), S(CONVERT_TO_CSTRING(CharT, "1234567890")));
+  test(S(CONVERT_TO_CSTRING(CharT, "12345")), S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")));
+
+  test(S(CONVERT_TO_CSTRING(CharT, "1234567890")), S());
+  test(S(CONVERT_TO_CSTRING(CharT, "1234567890")), S(CONVERT_TO_CSTRING(CharT, "12345")));
+  test(S(CONVERT_TO_CSTRING(CharT, "1234567890")), S(CONVERT_TO_CSTRING(CharT, "1234567890")));
+  test(S(CONVERT_TO_CSTRING(CharT, "1234567890")), S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")));
+
+  test(S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")), S());
+  test(S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")), S(CONVERT_TO_CSTRING(CharT, "12345")));
+  test(S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")), S(CONVERT_TO_CSTRING(CharT, "1234567890")));
+  test(S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")), S(CONVERT_TO_CSTRING(CharT, "12345678901234567890")));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
-    test_assign<std::string>();
+  test_assign<std::string>();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test_assign<std::wstring>();
+  test_assign<std::wstring>();
 #endif
 #if TEST_STD_VER >= 20
-    test_assign<std::u8string>();
+  test_assign<std::u8string>();
 #endif
 #if TEST_STD_VER >= 11
-    test_assign<std::u16string>();
-    test_assign<std::u32string>();
+  test_assign<std::u16string>();
+  test_assign<std::u32string>();
 #endif
 #ifndef TEST_HAS_NO_NASTY_STRING
-    test_assign<nasty_string>();
+  test_assign<nasty_string>();
 #endif
 
-    {
-      typedef std::string S;
-      testAlloc(S(), S(), std::allocator<char>());
-      testAlloc(S(), S("12345"), std::allocator<char>());
-      testAlloc(S(), S("1234567890"), std::allocator<char>());
-      testAlloc(S(), S("12345678901234567890"), std::allocator<char>());
-    }
-
-    {                                  //  LWG#5579 make sure assign takes the allocators where appropriate
-      typedef other_allocator<char> A; // has POCCA --> true
-      typedef std::basic_string<char, std::char_traits<char>, A> S;
-      testAlloc(S(A(5)), S(A(3)), A(3));
-      testAlloc(S(A(5)), S("1"), A());
-      testAlloc(S(A(5)), S("1", A(7)), A(7));
-      testAlloc(S(A(5)), S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), A(7));
-    }
+  {
+    typedef std::string S;
+    testAlloc(S(), S(), std::allocator<char>());
+    testAlloc(S(), S("12345"), std::allocator<char>());
+    testAlloc(S(), S("1234567890"), std::allocator<char>());
+    testAlloc(S(), S("12345678901234567890"), std::allocator<char>());
+  }
+
+  {                                  //  LWG#5579 make sure assign takes the allocators where appropriate
+    typedef other_allocator<char> A; // has POCCA --> true
+    typedef std::basic_string<char, std::char_traits<char>, A> S;
+    testAlloc(S(A(5)), S(A(3)), A(3));
+    testAlloc(S(A(5)), S("1"), A());
+    testAlloc(S(A(5)), S("1", A(7)), A(7));
+    testAlloc(S(A(5)), S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), A(7));
+  }
 
 #if TEST_STD_VER >= 11
   {
@@ -107,15 +105,14 @@ TEST_CONSTEXPR_CXX20 bool test() {
 #if TEST_STD_VER > 14
   {
     typedef std::string S;
-    static_assert(noexcept(S().assign(S())), "");  // LWG#2063
+    static_assert(noexcept(S().assign(S())), ""); // LWG#2063
   }
 #endif
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_size_size.pass.cpp
index 4246366a29f0cc6..9448452bafad9c3 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_size_size.pass.cpp
@@ -20,54 +20,40 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, S str, typename S::size_type pos, typename S::size_type n, S expected)
-{
-    if (pos <= str.size())
-    {
-        s.assign(str, pos, n);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, S str, typename S::size_type pos, typename S::size_type n, S expected) {
+  if (pos <= str.size()) {
+    s.assign(str, pos, n);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.assign(str, pos, n);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > str.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.assign(str, pos, n);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > str.size());
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test_npos(S s, S str, typename S::size_type pos, S expected)
-{
-    if (pos <= str.size())
-    {
-        s.assign(str, pos);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test_npos(S s, S str, typename S::size_type pos, S expected) {
+  if (pos <= str.size()) {
+    s.assign(str, pos);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.assign(str, pos);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > str.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.assign(str, pos);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > str.size());
     }
+  }
 #endif
 }
 
@@ -92,8 +78,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
 
   test(S("12345678901234567890"), S(), 0, 0, S());
   test(S("12345678901234567890"), S("12345"), 1, 3, S("234"));
-  test(S("12345678901234567890"), S("12345678901234567890"), 5, 10,
-        S("6789012345"));
+  test(S("12345678901234567890"), S("12345678901234567890"), 5, 10, S("6789012345"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -116,8 +101,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_view.pass.cpp
index 2a07424b78a0854..aeda9db36a840ed 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/string_view.pass.cpp
@@ -20,22 +20,18 @@
 #include "test_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(S s, SV sv, S expected)
-{
-    s.assign(sv);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, SV sv, S expected) {
+  s.assign(sv);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-testAlloc(S s, SV sv, const typename S::allocator_type& a)
-{
-    s.assign(sv);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == sv);
-    assert(s.get_allocator() == a);
+TEST_CONSTEXPR_CXX20 void testAlloc(S s, SV sv, const typename S::allocator_type& a) {
+  s.assign(sv);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == sv);
+  assert(s.get_allocator() == a);
 }
 
 template <class S>
@@ -59,8 +55,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("12345678901234567890"), SV(), S());
   test(S("12345678901234567890"), SV("12345"), S("12345"));
   test(S("12345678901234567890"), SV("1234567890"), S("1234567890"));
-  test(S("12345678901234567890"), SV("12345678901234567890"),
-        S("12345678901234567890"));
+  test(S("12345678901234567890"), SV("12345678901234567890"), S("12345678901234567890"));
 
   using A = typename S::allocator_type;
 
@@ -79,8 +74,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_copy/copy.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_copy/copy.pass.cpp
index 9c8c01878a7349c..e1904baeb9033b0 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_copy/copy.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_copy/copy.pass.cpp
@@ -19,33 +19,25 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S str, typename S::value_type* s, typename S::size_type n,
-     typename S::size_type pos)
-{
-    const S& cs = str;
-    if (pos <= cs.size())
-    {
-        typename S::size_type r = cs.copy(s, n, pos);
-        typename S::size_type rlen = std::min(n, cs.size() - pos);
-        assert(r == rlen);
-        for (r = 0; r < rlen; ++r)
-            assert(S::traits_type::eq(cs[pos+r], s[r]));
-    }
+TEST_CONSTEXPR_CXX20 void test(S str, typename S::value_type* s, typename S::size_type n, typename S::size_type pos) {
+  const S& cs = str;
+  if (pos <= cs.size()) {
+    typename S::size_type r    = cs.copy(s, n, pos);
+    typename S::size_type rlen = std::min(n, cs.size() - pos);
+    assert(r == rlen);
+    for (r = 0; r < rlen; ++r)
+      assert(S::traits_type::eq(cs[pos + r], s[r]));
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            typename S::size_type r = cs.copy(s, n, pos);
-            ((void)r); // Prevent unused warning
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > str.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      typename S::size_type r = cs.copy(s, n, pos);
+      ((void)r); // Prevent unused warning
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > str.size());
     }
+  }
 #endif
 }
 
@@ -121,8 +113,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter.pass.cpp
index dde2e65a2cc5eab..03c5b965537c6fe 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter.pass.cpp
@@ -17,15 +17,13 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::
diff erence_type pos, S expected)
-{
-    typename S::const_iterator p = s.begin() + pos;
-    typename S::iterator i = s.erase(p);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s[s.size()] == typename S::value_type());
-    assert(s == expected);
-    assert(i - s.begin() == pos);
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::
diff erence_type pos, S expected) {
+  typename S::const_iterator p = s.begin() + pos;
+  typename S::iterator i       = s.erase(p);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s[s.size()] == typename S::value_type());
+  assert(s == expected);
+  assert(i - s.begin() == pos);
 }
 
 template <class S>
@@ -53,8 +51,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter_iter.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter_iter.pass.cpp
index 7976ab3b8ffdacc..f092ad718cdaa89 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter_iter.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/iter_iter.pass.cpp
@@ -17,16 +17,14 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::
diff erence_type pos, typename S::
diff erence_type n, S expected)
-{
-    typename S::const_iterator first = s.cbegin() + pos;
-    typename S::const_iterator last = s.cbegin() + pos + n;
-    typename S::iterator i = s.erase(first, last);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s[s.size()] == typename S::value_type());
-    assert(s == expected);
-    assert(i - s.begin() == pos);
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::
diff erence_type pos, typename S::
diff erence_type n, S expected) {
+  typename S::const_iterator first = s.cbegin() + pos;
+  typename S::const_iterator last  = s.cbegin() + pos + n;
+  typename S::iterator i           = s.erase(first, last);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s[s.size()] == typename S::value_type());
+  assert(s == expected);
+  assert(i - s.begin() == pos);
 }
 
 template <class S>
@@ -96,8 +94,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp
index 28c8d0572b762c8..9c63fa47a7e4a7f 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp
@@ -17,13 +17,11 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, S expected)
-{
-    s.pop_back();
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s[s.size()] == typename S::value_type());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, S expected) {
+  s.pop_back();
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s[s.size()] == typename S::value_type());
+  assert(s == expected);
 }
 
 template <class S>
@@ -42,8 +40,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/size_size.pass.cpp
index 28b650740a105c9..610256061a5f2cd 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_erase/size_size.pass.cpp
@@ -19,73 +19,57 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos, typename S::size_type n, S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos <= old_size)
-    {
-        s.erase(pos, n);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s[s.size()] == typename S::value_type());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos, typename S::size_type n, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos <= old_size) {
+    s.erase(pos, n);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s[s.size()] == typename S::value_type());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.erase(pos, n);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > old_size);
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.erase(pos, n);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > old_size);
+      assert(s == s0);
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos, S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos <= old_size)
-    {
-        s.erase(pos);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s[s.size()] == typename S::value_type());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos <= old_size) {
+    s.erase(pos);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s[s.size()] == typename S::value_type());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.erase(pos);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > old_size);
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.erase(pos);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > old_size);
+      assert(s == s0);
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, S expected)
-{
-    s.erase();
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s[s.size()] == typename S::value_type());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, S expected) {
+  s.erase();
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s[s.size()] == typename S::value_type());
+  assert(s == expected);
 }
 
 template <class S>
@@ -201,8 +185,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp
index 0e5eb1b60700614..bc3ce511ab5c221 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp
@@ -18,18 +18,16 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S& s, typename S::const_iterator p, typename S::value_type c, S expected)
-{
-    bool sufficient_cap = s.size() < s.capacity();
-    typename S::
diff erence_type pos = p - s.begin();
-    typename S::iterator i = s.insert(p, c);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
-    assert(i - s.begin() == pos);
-    assert(*i == c);
-    if (sufficient_cap)
-        assert(i == p);
+TEST_CONSTEXPR_CXX20 void test(S& s, typename S::const_iterator p, typename S::value_type c, S expected) {
+  bool sufficient_cap             = s.size() < s.capacity();
+  typename S::
diff erence_type pos = p - s.begin();
+  typename S::iterator i          = s.insert(p, c);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
+  assert(i - s.begin() == pos);
+  assert(*i == c);
+  if (sufficient_cap)
+    assert(i == p);
 }
 
 template <class S>
@@ -38,17 +36,17 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(s, s.begin(), '1', S("1"));
   test(s, s.begin(), 'a', S("a1"));
   test(s, s.end(), 'b', S("a1b"));
-  test(s, s.end()-1, 'c', S("a1cb"));
-  test(s, s.end()-2, 'd', S("a1dcb"));
-  test(s, s.end()-3, '2', S("a12dcb"));
-  test(s, s.end()-4, '3', S("a132dcb"));
-  test(s, s.end()-5, '4', S("a1432dcb"));
-  test(s, s.begin()+1, '5', S("a51432dcb"));
-  test(s, s.begin()+2, '6', S("a561432dcb"));
-  test(s, s.begin()+3, '7', S("a5671432dcb"));
-  test(s, s.begin()+4, 'A', S("a567A1432dcb"));
-  test(s, s.begin()+5, 'B', S("a567AB1432dcb"));
-  test(s, s.begin()+6, 'C', S("a567ABC1432dcb"));
+  test(s, s.end() - 1, 'c', S("a1cb"));
+  test(s, s.end() - 2, 'd', S("a1dcb"));
+  test(s, s.end() - 3, '2', S("a12dcb"));
+  test(s, s.end() - 4, '3', S("a132dcb"));
+  test(s, s.end() - 5, '4', S("a1432dcb"));
+  test(s, s.begin() + 1, '5', S("a51432dcb"));
+  test(s, s.begin() + 2, '6', S("a561432dcb"));
+  test(s, s.begin() + 3, '7', S("a5671432dcb"));
+  test(s, s.begin() + 4, 'A', S("a567A1432dcb"));
+  test(s, s.begin() + 5, 'B', S("a567AB1432dcb"));
+  test(s, s.begin() + 6, 'C', S("a567ABC1432dcb"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -60,8 +58,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp
index 622afadea0fe3b6..7da74031f0d4afb 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp
@@ -12,7 +12,6 @@
 
 // iterator insert(const_iterator p, initializer_list<charT> il); // constexpr since C++20
 
-
 #include <string>
 #include <cassert>
 
@@ -37,8 +36,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.infinite_recursion.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.infinite_recursion.pass.cpp
index f5c492f587048de..e40528e516531bb 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.infinite_recursion.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.infinite_recursion.pass.cpp
@@ -18,90 +18,82 @@
 #include "test_macros.h"
 
 struct char_ascii {
-    char char_;
+  char char_;
 
-    char_ascii() = default;
-    char_ascii(char ch) : char_(ch) {
-        assert(ch <= 0x7f);
-    }
+  char_ascii() = default;
+  char_ascii(char ch) : char_(ch) { assert(ch <= 0x7f); }
 };
 
 template <>
 struct std::char_traits<char_ascii> {
-    using char_type = char_ascii;
-    using int_type = typename std::char_traits<char>::int_type;
-    using off_type = typename std::char_traits<char>::off_type;
-    using pos_type = typename std::char_traits<char>::pos_type;
-    using state_type = typename std::char_traits<char>::state_type;
-
-    static void assign(char_type& r, char_type const& a) TEST_NOEXCEPT {
-        r = a;
-    }
+  using char_type  = char_ascii;
+  using int_type   = typename std::char_traits<char>::int_type;
+  using off_type   = typename std::char_traits<char>::off_type;
+  using pos_type   = typename std::char_traits<char>::pos_type;
+  using state_type = typename std::char_traits<char>::state_type;
 
-    static char_type* assign(char_type* p, std::size_t count, char_type a) {
-        std::fill(p, p + count, a);
-        return p;
-    }
+  static void assign(char_type& r, char_type const& a) TEST_NOEXCEPT { r = a; }
 
-    static bool eq(char_type a, char_type b) TEST_NOEXCEPT {
-        return a.char_ == b.char_;
-    }
+  static char_type* assign(char_type* p, std::size_t count, char_type a) {
+    std::fill(p, p + count, a);
+    return p;
+  }
 
-    static bool lt(char_type a, char_type b) TEST_NOEXCEPT {
-        return a.char_ < b.char_;
-    }
+  static bool eq(char_type a, char_type b) TEST_NOEXCEPT { return a.char_ == b.char_; }
 
-    static std::size_t length(char_type const* s) {
-        std::size_t n = 0;
-        if (s) {
-            while (s->char_)
-                ++n;
-        }
-        return n;
-    }
+  static bool lt(char_type a, char_type b) TEST_NOEXCEPT { return a.char_ < b.char_; }
 
-    static const char_type* find(char_type const* p, std::size_t count, char_type const& ch) {
-        while (count > 0) {
-            if (p->char_ == ch.char_) {
-                return p;
-            } else {
-                ++p;
-                --count;
-            }
-        }
-        return nullptr;
+  static std::size_t length(char_type const* s) {
+    std::size_t n = 0;
+    if (s) {
+      while (s->char_)
+        ++n;
     }
+    return n;
+  }
 
-    static int compare(char_type const* s1, char_type const* s2, std::size_t count) {
-        for (std::size_t i = 0; i < count; ++i) {
-            if (s1->char_ < s2->char_)
-                return -1;
-            else if (s2->char_ < s1->char_)
-                return 1;
-        }
-        return 0;
+  static const char_type* find(char_type const* p, std::size_t count, char_type const& ch) {
+    while (count > 0) {
+      if (p->char_ == ch.char_) {
+        return p;
+      } else {
+        ++p;
+        --count;
+      }
     }
-
-    static char_type* move(char_type* dest, char_type const* src, std::size_t count) {
-        if (src <= dest && dest < src + count) {
-            std::copy_backward(src, src + count, dest + count);
-        } else {
-            std::copy(src, src + count, dest);
-        }
-        return dest;
+    return nullptr;
+  }
+
+  static int compare(char_type const* s1, char_type const* s2, std::size_t count) {
+    for (std::size_t i = 0; i < count; ++i) {
+      if (s1->char_ < s2->char_)
+        return -1;
+      else if (s2->char_ < s1->char_)
+        return 1;
     }
+    return 0;
+  }
 
-    static char_type* copy(char_type* dest, char_type const* src, std::size_t count) {
-        return char_traits::move(dest, src, count);
+  static char_type* move(char_type* dest, char_type const* src, std::size_t count) {
+    if (src <= dest && dest < src + count) {
+      std::copy_backward(src, src + count, dest + count);
+    } else {
+      std::copy(src, src + count, dest);
     }
+    return dest;
+  }
+
+  static char_type* copy(char_type* dest, char_type const* src, std::size_t count) {
+    return char_traits::move(dest, src, count);
+  }
 };
 
 int main(int, char**) {
-    std::basic_string<char_ascii> str;
+  std::basic_string<char_ascii> str;
 
-    char_ascii ch('A');
-    str.insert(str.begin(), &ch, &ch + 1);
-    assert(str.size() == 1);
-    assert(str[0].char_ == 'A');
-    return 0;
+  char_ascii ch('A');
+  str.insert(str.begin(), &ch, &ch + 1);
+  assert(str.size() == 1);
+  assert(str[0].char_ == 'A');
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp
index d7f3ca3c4d4caa4..e3d0f1322e85de2 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp
@@ -19,40 +19,39 @@
 #include "min_allocator.h"
 
 template <class S, class It>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::
diff erence_type pos, It first, It last, S expected)
-{
-    typename S::const_iterator p = s.cbegin() + pos;
-    typename S::iterator i = s.insert(p, first, last);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(i - s.begin() == pos);
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::
diff erence_type pos, It first, It last, S expected) {
+  typename S::const_iterator p = s.cbegin() + pos;
+  typename S::iterator i       = s.insert(p, first, last);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(i - s.begin() == pos);
+  assert(s == expected);
 }
 
 #ifndef TEST_HAS_NO_EXCEPTIONS
-struct Widget { operator char() const { throw 42; } };
+struct Widget {
+  operator char() const { throw 42; }
+};
 
 template <class S, class It>
-TEST_CONSTEXPR_CXX20 void
-test_exceptions(S s, typename S::
diff erence_type pos, It first, It last)
-{
-    typename S::const_iterator p = s.cbegin() + pos;
-
-    S original = s;
-    typename S::iterator begin = s.begin();
-    typename S::iterator end = s.end();
-
-    try {
-        s.insert(p, first, last);
-        assert(false);
-    } catch (...) {}
-
-    // Part of "no effects" is that iterators and pointers
-    // into the string must not have been invalidated.
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == original);
-    assert(s.begin() == begin);
-    assert(s.end() == end);
+TEST_CONSTEXPR_CXX20 void test_exceptions(S s, typename S::
diff erence_type pos, It first, It last) {
+  typename S::const_iterator p = s.cbegin() + pos;
+
+  S original                 = s;
+  typename S::iterator begin = s.begin();
+  typename S::iterator end   = s.end();
+
+  try {
+    s.insert(p, first, last);
+    assert(false);
+  } catch (...) {
+  }
+
+  // Part of "no effects" is that iterators and pointers
+  // into the string must not have been invalidated.
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == original);
+  assert(s.begin() == begin);
+  assert(s.end() == end);
 }
 #endif
 
@@ -60,46 +59,88 @@ template <class S>
 TEST_CONSTEXPR_CXX20 void test_string() {
   const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
   test(S(), 0, s, s, S());
-  test(S(), 0, s, s+1, S("A"));
-  test(S(), 0, s, s+10, S("ABCDEFGHIJ"));
-  test(S(), 0, s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S(), 0, s, s + 1, S("A"));
+  test(S(), 0, s, s + 10, S("ABCDEFGHIJ"));
+  test(S(), 0, s, s + 52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S("12345"), 0, s, s, S("12345"));
-  test(S("12345"), 1, s, s+1, S("1A2345"));
-  test(S("12345"), 4, s, s+10, S("1234ABCDEFGHIJ5"));
-  test(S("12345"), 5, s, s+52, S("12345ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S("12345"), 1, s, s + 1, S("1A2345"));
+  test(S("12345"), 4, s, s + 10, S("1234ABCDEFGHIJ5"));
+  test(S("12345"), 5, s, s + 52, S("12345ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S("1234567890"), 0, s, s, S("1234567890"));
-  test(S("1234567890"), 1, s, s+1, S("1A234567890"));
-  test(S("1234567890"), 10, s, s+10, S("1234567890ABCDEFGHIJ"));
-  test(S("1234567890"), 8, s, s+52, S("12345678ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz90"));
+  test(S("1234567890"), 1, s, s + 1, S("1A234567890"));
+  test(S("1234567890"), 10, s, s + 10, S("1234567890ABCDEFGHIJ"));
+  test(S("1234567890"), 8, s, s + 52, S("12345678ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz90"));
 
   test(S("12345678901234567890"), 3, s, s, S("12345678901234567890"));
-  test(S("12345678901234567890"), 3, s, s+1, S("123A45678901234567890"));
-  test(S("12345678901234567890"), 15, s, s+10, S("123456789012345ABCDEFGHIJ67890"));
-  test(S("12345678901234567890"), 20, s, s+52,
-        S("12345678901234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S("12345678901234567890"), 3, s, s + 1, S("123A45678901234567890"));
+  test(S("12345678901234567890"), 15, s, s + 10, S("123456789012345ABCDEFGHIJ67890"));
+  test(S("12345678901234567890"),
+       20,
+       s,
+       s + 52,
+       S("12345678901234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S(), 0, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), S());
-  test(S(), 0, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1), S("A"));
-  test(S(), 0, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10), S("ABCDEFGHIJ"));
-  test(S(), 0, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+52), S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S(), 0, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 1), S("A"));
+  test(S(), 0, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 10), S("ABCDEFGHIJ"));
+  test(S(),
+       0,
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 52),
+       S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S("12345"), 0, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), S("12345"));
-  test(S("12345"), 1, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1), S("1A2345"));
-  test(S("12345"), 4, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10), S("1234ABCDEFGHIJ5"));
-  test(S("12345"), 5, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+52), S("12345ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S("12345"), 1, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s + 1), S("1A2345"));
+  test(S("12345"),
+       4,
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 10),
+       S("1234ABCDEFGHIJ5"));
+  test(S("12345"),
+       5,
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 52),
+       S("12345ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 
   test(S("1234567890"), 0, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), S("1234567890"));
-  test(S("1234567890"), 1, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1), S("1A234567890"));
-  test(S("1234567890"), 10, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10), S("1234567890ABCDEFGHIJ"));
-  test(S("1234567890"), 8, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+52), S("12345678ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz90"));
-
-  test(S("12345678901234567890"), 3, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s), S("12345678901234567890"));
-  test(S("12345678901234567890"), 3, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+1), S("123A45678901234567890"));
-  test(S("12345678901234567890"), 15, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+10), S("123456789012345ABCDEFGHIJ67890"));
-  test(S("12345678901234567890"), 20, cpp17_input_iterator<const char*>(s), cpp17_input_iterator<const char*>(s+52),
-        S("12345678901234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
+  test(S("1234567890"),
+       1,
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 1),
+       S("1A234567890"));
+  test(S("1234567890"),
+       10,
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 10),
+       S("1234567890ABCDEFGHIJ"));
+  test(S("1234567890"),
+       8,
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 52),
+       S("12345678ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz90"));
+
+  test(S("12345678901234567890"),
+       3,
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s),
+       S("12345678901234567890"));
+  test(S("12345678901234567890"),
+       3,
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 1),
+       S("123A45678901234567890"));
+  test(S("12345678901234567890"),
+       15,
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 10),
+       S("123456789012345ABCDEFGHIJ67890"));
+  test(S("12345678901234567890"),
+       20,
+       cpp17_input_iterator<const char*>(s),
+       cpp17_input_iterator<const char*>(s + 52),
+       S("12345678901234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -114,16 +155,16 @@ TEST_CONSTEXPR_CXX20 bool test() {
     typedef ThrowingIterator<char> TIter;
     typedef cpp17_input_iterator<TIter> IIter;
     const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-    test_exceptions(S(), 0, IIter(TIter(s, s+10, 4, TIter::TAIncrement)), IIter(TIter()));
-    test_exceptions(S(), 0, IIter(TIter(s, s+10, 5, TIter::TADereference)), IIter(TIter()));
-    test_exceptions(S(), 0, IIter(TIter(s, s+10, 6, TIter::TAComparison)), IIter(TIter()));
+    test_exceptions(S(), 0, IIter(TIter(s, s + 10, 4, TIter::TAIncrement)), IIter(TIter()));
+    test_exceptions(S(), 0, IIter(TIter(s, s + 10, 5, TIter::TADereference)), IIter(TIter()));
+    test_exceptions(S(), 0, IIter(TIter(s, s + 10, 6, TIter::TAComparison)), IIter(TIter()));
 
-    test_exceptions(S(), 0, TIter(s, s+10, 4, TIter::TAIncrement), TIter());
-    test_exceptions(S(), 0, TIter(s, s+10, 5, TIter::TADereference), TIter());
-    test_exceptions(S(), 0, TIter(s, s+10, 6, TIter::TAComparison), TIter());
+    test_exceptions(S(), 0, TIter(s, s + 10, 4, TIter::TAIncrement), TIter());
+    test_exceptions(S(), 0, TIter(s, s + 10, 5, TIter::TADereference), TIter());
+    test_exceptions(S(), 0, TIter(s, s + 10, 6, TIter::TAComparison), TIter());
 
     Widget w[100];
-    test_exceptions(S(), 0, w, w+100);
+    test_exceptions(S(), 0, w, w + 100);
   }
 #endif
 
@@ -153,14 +194,16 @@ TEST_CONSTEXPR_CXX20 bool test() {
   }
 
   if (!TEST_IS_CONSTANT_EVALUATED) { // regression-test inserting into self in sneaky ways
-    std::string s_short = "hello";
-    std::string s_long = "Lorem ipsum dolor sit amet, consectetur/";
-    std::string s_othertype = "hello";
-    const unsigned char *first = reinterpret_cast<const unsigned char*>(s_othertype.data());
-
-    test(s_short, 0, s_short.data() + s_short.size(), s_short.data() + s_short.size() + 1,
-         std::string("\0hello", 6));
-    test(s_long, 0, s_long.data() + s_long.size(), s_long.data() + s_long.size() + 1,
+    std::string s_short        = "hello";
+    std::string s_long         = "Lorem ipsum dolor sit amet, consectetur/";
+    std::string s_othertype    = "hello";
+    const unsigned char* first = reinterpret_cast<const unsigned char*>(s_othertype.data());
+
+    test(s_short, 0, s_short.data() + s_short.size(), s_short.data() + s_short.size() + 1, std::string("\0hello", 6));
+    test(s_long,
+         0,
+         s_long.data() + s_long.size(),
+         s_long.data() + s_long.size() + 1,
          std::string("\0Lorem ipsum dolor sit amet, consectetur/", 41));
     test(s_othertype, 1, first + 2, first + 5, std::string("hlloello"));
   }
@@ -192,8 +235,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp
index a79b53445ae0387..1e0d16e4cc2e172 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp
@@ -18,14 +18,12 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::
diff erence_type pos, typename S::size_type n,
-     typename S::value_type c, S expected)
-{
-    typename S::const_iterator p = s.cbegin() + pos;
-    typename S::iterator i = s.insert(p, n, c);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(i - s.begin() == pos);
-    assert(s == expected);
+test(S s, typename S::
diff erence_type pos, typename S::size_type n, typename S::value_type c, S expected) {
+  typename S::const_iterator p = s.cbegin() + pos;
+  typename S::iterator i       = s.insert(p, n, c);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(i - s.begin() == pos);
+  assert(s == expected);
 }
 
 template <class S>
@@ -105,8 +103,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_T_size_size.pass.cpp
index 36e1261784b9adc..f7e6ca71180e330 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_T_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_T_size_size.pass.cpp
@@ -22,1810 +22,1764 @@
 
 template <class S, class SV>
 TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos1, SV sv, typename S::size_type pos2,
-     typename S::size_type n, S expected)
-{
-    static_assert((!std::is_same<S, SV>::value), "");
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos1 <= old_size && pos2 <= sv.size())
-    {
-        s.insert(pos1, sv, pos2, n);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+test(S s, typename S::size_type pos1, SV sv, typename S::size_type pos2, typename S::size_type n, S expected) {
+  static_assert((!std::is_same<S, SV>::value), "");
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos1 <= old_size && pos2 <= sv.size()) {
+    s.insert(pos1, sv, pos2, n);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.insert(pos1, sv, pos2, n);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > old_size || pos2 > sv.size());
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.insert(pos1, sv, pos2, n);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > old_size || pos2 > sv.size());
+      assert(s == s0);
     }
+  }
 #endif
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test_npos(S s, typename S::size_type pos1, SV sv, typename S::size_type pos2, S expected)
-{
-    static_assert((!std::is_same<S, SV>::value), "");
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos1 <= old_size && pos2 <= sv.size())
-    {
-        s.insert(pos1, sv, pos2);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test_npos(S s, typename S::size_type pos1, SV sv, typename S::size_type pos2, S expected) {
+  static_assert((!std::is_same<S, SV>::value), "");
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos1 <= old_size && pos2 <= sv.size()) {
+    s.insert(pos1, sv, pos2);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.insert(pos1, sv, pos2);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > old_size || pos2 > sv.size());
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.insert(pos1, sv, pos2);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > old_size || pos2 > sv.size());
+      assert(s == s0);
     }
+  }
 #endif
 }
 
-
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, SV(""), 0, 0, S(""));
-    test(S(""), 0, SV(""), 0, 1, S(""));
-    test(S(""), 0, SV(""), 1, 0, S("can't happen"));
-    test(S(""), 0, SV("12345"), 0, 0, S(""));
-    test(S(""), 0, SV("12345"), 0, 1, S("1"));
-    test(S(""), 0, SV("12345"), 0, 2, S("12"));
-    test(S(""), 0, SV("12345"), 0, 4, S("1234"));
-    test(S(""), 0, SV("12345"), 0, 5, S("12345"));
-    test(S(""), 0, SV("12345"), 0, 6, S("12345"));
-    test(S(""), 0, SV("12345"), 1, 0, S(""));
-    test(S(""), 0, SV("12345"), 1, 1, S("2"));
-    test(S(""), 0, SV("12345"), 1, 2, S("23"));
-    test(S(""), 0, SV("12345"), 1, 3, S("234"));
-    test(S(""), 0, SV("12345"), 1, 4, S("2345"));
-    test(S(""), 0, SV("12345"), 1, 5, S("2345"));
-    test(S(""), 0, SV("12345"), 2, 0, S(""));
-    test(S(""), 0, SV("12345"), 2, 1, S("3"));
-    test(S(""), 0, SV("12345"), 2, 2, S("34"));
-    test(S(""), 0, SV("12345"), 2, 3, S("345"));
-    test(S(""), 0, SV("12345"), 2, 4, S("345"));
-    test(S(""), 0, SV("12345"), 4, 0, S(""));
-    test(S(""), 0, SV("12345"), 4, 1, S("5"));
-    test(S(""), 0, SV("12345"), 4, 2, S("5"));
-    test(S(""), 0, SV("12345"), 5, 0, S(""));
-    test(S(""), 0, SV("12345"), 5, 1, S(""));
-    test(S(""), 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S(""), 0, SV("1234567890"), 0, 0, S(""));
-    test(S(""), 0, SV("1234567890"), 0, 1, S("1"));
-    test(S(""), 0, SV("1234567890"), 0, 5, S("12345"));
-    test(S(""), 0, SV("1234567890"), 0, 9, S("123456789"));
-    test(S(""), 0, SV("1234567890"), 0, 10, S("1234567890"));
-    test(S(""), 0, SV("1234567890"), 0, 11, S("1234567890"));
-    test(S(""), 0, SV("1234567890"), 1, 0, S(""));
-    test(S(""), 0, SV("1234567890"), 1, 1, S("2"));
-    test(S(""), 0, SV("1234567890"), 1, 4, S("2345"));
-    test(S(""), 0, SV("1234567890"), 1, 8, S("23456789"));
-    test(S(""), 0, SV("1234567890"), 1, 9, S("234567890"));
-    test(S(""), 0, SV("1234567890"), 1, 10, S("234567890"));
-    test(S(""), 0, SV("1234567890"), 5, 0, S(""));
-    test(S(""), 0, SV("1234567890"), 5, 1, S("6"));
-    test(S(""), 0, SV("1234567890"), 5, 2, S("67"));
-    test(S(""), 0, SV("1234567890"), 5, 4, S("6789"));
-    test(S(""), 0, SV("1234567890"), 5, 5, S("67890"));
-    test(S(""), 0, SV("1234567890"), 5, 6, S("67890"));
-    test(S(""), 0, SV("1234567890"), 9, 0, S(""));
-    test(S(""), 0, SV("1234567890"), 9, 1, S("0"));
-    test(S(""), 0, SV("1234567890"), 9, 2, S("0"));
-    test(S(""), 0, SV("1234567890"), 10, 0, S(""));
-    test(S(""), 0, SV("1234567890"), 10, 1, S(""));
-    test(S(""), 0, SV("1234567890"), 11, 0, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, SV(""), 0, 0, S(""));
+  test(S(""), 0, SV(""), 0, 1, S(""));
+  test(S(""), 0, SV(""), 1, 0, S("can't happen"));
+  test(S(""), 0, SV("12345"), 0, 0, S(""));
+  test(S(""), 0, SV("12345"), 0, 1, S("1"));
+  test(S(""), 0, SV("12345"), 0, 2, S("12"));
+  test(S(""), 0, SV("12345"), 0, 4, S("1234"));
+  test(S(""), 0, SV("12345"), 0, 5, S("12345"));
+  test(S(""), 0, SV("12345"), 0, 6, S("12345"));
+  test(S(""), 0, SV("12345"), 1, 0, S(""));
+  test(S(""), 0, SV("12345"), 1, 1, S("2"));
+  test(S(""), 0, SV("12345"), 1, 2, S("23"));
+  test(S(""), 0, SV("12345"), 1, 3, S("234"));
+  test(S(""), 0, SV("12345"), 1, 4, S("2345"));
+  test(S(""), 0, SV("12345"), 1, 5, S("2345"));
+  test(S(""), 0, SV("12345"), 2, 0, S(""));
+  test(S(""), 0, SV("12345"), 2, 1, S("3"));
+  test(S(""), 0, SV("12345"), 2, 2, S("34"));
+  test(S(""), 0, SV("12345"), 2, 3, S("345"));
+  test(S(""), 0, SV("12345"), 2, 4, S("345"));
+  test(S(""), 0, SV("12345"), 4, 0, S(""));
+  test(S(""), 0, SV("12345"), 4, 1, S("5"));
+  test(S(""), 0, SV("12345"), 4, 2, S("5"));
+  test(S(""), 0, SV("12345"), 5, 0, S(""));
+  test(S(""), 0, SV("12345"), 5, 1, S(""));
+  test(S(""), 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S(""), 0, SV("1234567890"), 0, 0, S(""));
+  test(S(""), 0, SV("1234567890"), 0, 1, S("1"));
+  test(S(""), 0, SV("1234567890"), 0, 5, S("12345"));
+  test(S(""), 0, SV("1234567890"), 0, 9, S("123456789"));
+  test(S(""), 0, SV("1234567890"), 0, 10, S("1234567890"));
+  test(S(""), 0, SV("1234567890"), 0, 11, S("1234567890"));
+  test(S(""), 0, SV("1234567890"), 1, 0, S(""));
+  test(S(""), 0, SV("1234567890"), 1, 1, S("2"));
+  test(S(""), 0, SV("1234567890"), 1, 4, S("2345"));
+  test(S(""), 0, SV("1234567890"), 1, 8, S("23456789"));
+  test(S(""), 0, SV("1234567890"), 1, 9, S("234567890"));
+  test(S(""), 0, SV("1234567890"), 1, 10, S("234567890"));
+  test(S(""), 0, SV("1234567890"), 5, 0, S(""));
+  test(S(""), 0, SV("1234567890"), 5, 1, S("6"));
+  test(S(""), 0, SV("1234567890"), 5, 2, S("67"));
+  test(S(""), 0, SV("1234567890"), 5, 4, S("6789"));
+  test(S(""), 0, SV("1234567890"), 5, 5, S("67890"));
+  test(S(""), 0, SV("1234567890"), 5, 6, S("67890"));
+  test(S(""), 0, SV("1234567890"), 9, 0, S(""));
+  test(S(""), 0, SV("1234567890"), 9, 1, S("0"));
+  test(S(""), 0, SV("1234567890"), 9, 2, S("0"));
+  test(S(""), 0, SV("1234567890"), 10, 0, S(""));
+  test(S(""), 0, SV("1234567890"), 10, 1, S(""));
+  test(S(""), 0, SV("1234567890"), 11, 0, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S(""), 0, SV("12345678901234567890"), 0, 0, S(""));
-    test(S(""), 0, SV("12345678901234567890"), 0, 1, S("1"));
-    test(S(""), 0, SV("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S(""), 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S(""), 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S(""), 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S(""), 0, SV("12345678901234567890"), 1, 0, S(""));
-    test(S(""), 0, SV("12345678901234567890"), 1, 1, S("2"));
-    test(S(""), 0, SV("12345678901234567890"), 1, 9, S("234567890"));
-    test(S(""), 0, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S(""), 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S(""), 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S(""), 0, SV("12345678901234567890"), 10, 0, S(""));
-    test(S(""), 0, SV("12345678901234567890"), 10, 1, S("1"));
-    test(S(""), 0, SV("12345678901234567890"), 10, 5, S("12345"));
-    test(S(""), 0, SV("12345678901234567890"), 10, 9, S("123456789"));
-    test(S(""), 0, SV("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S(""), 0, SV("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S(""), 0, SV("12345678901234567890"), 19, 0, S(""));
-    test(S(""), 0, SV("12345678901234567890"), 19, 1, S("0"));
-    test(S(""), 0, SV("12345678901234567890"), 19, 2, S("0"));
-    test(S(""), 0, SV("12345678901234567890"), 20, 0, S(""));
-    test(S(""), 0, SV("12345678901234567890"), 20, 1, S(""));
-    test(S(""), 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S(""), 1, SV(""), 0, 0, S("can't happen"));
-    test(S(""), 1, SV(""), 0, 1, S("can't happen"));
-    test(S(""), 1, SV(""), 1, 0, S("can't happen"));
-    test(S(""), 1, SV("12345"), 0, 0, S("can't happen"));
-    test(S(""), 1, SV("12345"), 0, 1, S("can't happen"));
-    test(S(""), 1, SV("12345"), 0, 2, S("can't happen"));
-    test(S(""), 1, SV("12345"), 0, 4, S("can't happen"));
-    test(S(""), 1, SV("12345"), 0, 5, S("can't happen"));
-    test(S(""), 1, SV("12345"), 0, 6, S("can't happen"));
-    test(S(""), 1, SV("12345"), 1, 0, S("can't happen"));
-    test(S(""), 1, SV("12345"), 1, 1, S("can't happen"));
-    test(S(""), 1, SV("12345"), 1, 2, S("can't happen"));
-    test(S(""), 1, SV("12345"), 1, 3, S("can't happen"));
-    test(S(""), 1, SV("12345"), 1, 4, S("can't happen"));
-    test(S(""), 1, SV("12345"), 1, 5, S("can't happen"));
-    test(S(""), 1, SV("12345"), 2, 0, S("can't happen"));
-    test(S(""), 1, SV("12345"), 2, 1, S("can't happen"));
-    test(S(""), 1, SV("12345"), 2, 2, S("can't happen"));
-    test(S(""), 1, SV("12345"), 2, 3, S("can't happen"));
-    test(S(""), 1, SV("12345"), 2, 4, S("can't happen"));
-    test(S(""), 1, SV("12345"), 4, 0, S("can't happen"));
-    test(S(""), 1, SV("12345"), 4, 1, S("can't happen"));
-    test(S(""), 1, SV("12345"), 4, 2, S("can't happen"));
-    test(S(""), 1, SV("12345"), 5, 0, S("can't happen"));
-    test(S(""), 1, SV("12345"), 5, 1, S("can't happen"));
-    test(S(""), 1, SV("12345"), 6, 0, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S(""), 0, SV("12345678901234567890"), 0, 0, S(""));
+  test(S(""), 0, SV("12345678901234567890"), 0, 1, S("1"));
+  test(S(""), 0, SV("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S(""), 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S(""), 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S(""), 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S(""), 0, SV("12345678901234567890"), 1, 0, S(""));
+  test(S(""), 0, SV("12345678901234567890"), 1, 1, S("2"));
+  test(S(""), 0, SV("12345678901234567890"), 1, 9, S("234567890"));
+  test(S(""), 0, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S(""), 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S(""), 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S(""), 0, SV("12345678901234567890"), 10, 0, S(""));
+  test(S(""), 0, SV("12345678901234567890"), 10, 1, S("1"));
+  test(S(""), 0, SV("12345678901234567890"), 10, 5, S("12345"));
+  test(S(""), 0, SV("12345678901234567890"), 10, 9, S("123456789"));
+  test(S(""), 0, SV("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S(""), 0, SV("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S(""), 0, SV("12345678901234567890"), 19, 0, S(""));
+  test(S(""), 0, SV("12345678901234567890"), 19, 1, S("0"));
+  test(S(""), 0, SV("12345678901234567890"), 19, 2, S("0"));
+  test(S(""), 0, SV("12345678901234567890"), 20, 0, S(""));
+  test(S(""), 0, SV("12345678901234567890"), 20, 1, S(""));
+  test(S(""), 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S(""), 1, SV(""), 0, 0, S("can't happen"));
+  test(S(""), 1, SV(""), 0, 1, S("can't happen"));
+  test(S(""), 1, SV(""), 1, 0, S("can't happen"));
+  test(S(""), 1, SV("12345"), 0, 0, S("can't happen"));
+  test(S(""), 1, SV("12345"), 0, 1, S("can't happen"));
+  test(S(""), 1, SV("12345"), 0, 2, S("can't happen"));
+  test(S(""), 1, SV("12345"), 0, 4, S("can't happen"));
+  test(S(""), 1, SV("12345"), 0, 5, S("can't happen"));
+  test(S(""), 1, SV("12345"), 0, 6, S("can't happen"));
+  test(S(""), 1, SV("12345"), 1, 0, S("can't happen"));
+  test(S(""), 1, SV("12345"), 1, 1, S("can't happen"));
+  test(S(""), 1, SV("12345"), 1, 2, S("can't happen"));
+  test(S(""), 1, SV("12345"), 1, 3, S("can't happen"));
+  test(S(""), 1, SV("12345"), 1, 4, S("can't happen"));
+  test(S(""), 1, SV("12345"), 1, 5, S("can't happen"));
+  test(S(""), 1, SV("12345"), 2, 0, S("can't happen"));
+  test(S(""), 1, SV("12345"), 2, 1, S("can't happen"));
+  test(S(""), 1, SV("12345"), 2, 2, S("can't happen"));
+  test(S(""), 1, SV("12345"), 2, 3, S("can't happen"));
+  test(S(""), 1, SV("12345"), 2, 4, S("can't happen"));
+  test(S(""), 1, SV("12345"), 4, 0, S("can't happen"));
+  test(S(""), 1, SV("12345"), 4, 1, S("can't happen"));
+  test(S(""), 1, SV("12345"), 4, 2, S("can't happen"));
+  test(S(""), 1, SV("12345"), 5, 0, S("can't happen"));
+  test(S(""), 1, SV("12345"), 5, 1, S("can't happen"));
+  test(S(""), 1, SV("12345"), 6, 0, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S(""), 1, SV("1234567890"), 0, 0, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 0, 1, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 0, 5, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 0, 9, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 0, 10, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 0, 11, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 1, 0, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 1, 1, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 1, 4, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 1, 8, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 1, 9, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 1, 10, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 5, 0, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 5, 1, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 5, 2, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 5, 4, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 5, 5, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 5, 6, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 9, 0, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 9, 1, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 9, 2, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 10, 0, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 10, 1, S("can't happen"));
-    test(S(""), 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S(""), 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, SV(""), 0, 0, S("abcde"));
-    test(S("abcde"), 0, SV(""), 0, 1, S("abcde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S(""), 1, SV("1234567890"), 0, 0, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 0, 1, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 0, 5, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 0, 9, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 0, 10, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 0, 11, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 1, 0, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 1, 1, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 1, 4, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 1, 8, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 1, 9, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 1, 10, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 5, 0, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 5, 1, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 5, 2, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 5, 4, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 5, 5, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 5, 6, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 9, 0, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 9, 1, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 9, 2, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 10, 0, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 10, 1, S("can't happen"));
+  test(S(""), 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S(""), 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, SV(""), 0, 0, S("abcde"));
+  test(S("abcde"), 0, SV(""), 0, 1, S("abcde"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test3()
-{
-    test(S("abcde"), 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, SV("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 0, SV("12345"), 0, 1, S("1abcde"));
-    test(S("abcde"), 0, SV("12345"), 0, 2, S("12abcde"));
-    test(S("abcde"), 0, SV("12345"), 0, 4, S("1234abcde"));
-    test(S("abcde"), 0, SV("12345"), 0, 5, S("12345abcde"));
-    test(S("abcde"), 0, SV("12345"), 0, 6, S("12345abcde"));
-    test(S("abcde"), 0, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 0, SV("12345"), 1, 1, S("2abcde"));
-    test(S("abcde"), 0, SV("12345"), 1, 2, S("23abcde"));
-    test(S("abcde"), 0, SV("12345"), 1, 3, S("234abcde"));
-    test(S("abcde"), 0, SV("12345"), 1, 4, S("2345abcde"));
-    test(S("abcde"), 0, SV("12345"), 1, 5, S("2345abcde"));
-    test(S("abcde"), 0, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 0, SV("12345"), 2, 1, S("3abcde"));
-    test(S("abcde"), 0, SV("12345"), 2, 2, S("34abcde"));
-    test(S("abcde"), 0, SV("12345"), 2, 3, S("345abcde"));
-    test(S("abcde"), 0, SV("12345"), 2, 4, S("345abcde"));
-    test(S("abcde"), 0, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 0, SV("12345"), 4, 1, S("5abcde"));
-    test(S("abcde"), 0, SV("12345"), 4, 2, S("5abcde"));
-    test(S("abcde"), 0, SV("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 0, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 0, 1, S("1abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 0, 5, S("12345abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 0, 9, S("123456789abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 0, 10, S("1234567890abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 0, 11, S("1234567890abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 1, 1, S("2abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 1, 4, S("2345abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 1, 8, S("23456789abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 1, 9, S("234567890abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 1, 10, S("234567890abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 5, 1, S("6abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 5, 2, S("67abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 5, 4, S("6789abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 5, 5, S("67890abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 5, 6, S("67890abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 9, 1, S("0abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 9, 2, S("0abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 0, 1, S("1abcde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test3() {
+  test(S("abcde"), 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, SV("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 0, SV("12345"), 0, 1, S("1abcde"));
+  test(S("abcde"), 0, SV("12345"), 0, 2, S("12abcde"));
+  test(S("abcde"), 0, SV("12345"), 0, 4, S("1234abcde"));
+  test(S("abcde"), 0, SV("12345"), 0, 5, S("12345abcde"));
+  test(S("abcde"), 0, SV("12345"), 0, 6, S("12345abcde"));
+  test(S("abcde"), 0, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 0, SV("12345"), 1, 1, S("2abcde"));
+  test(S("abcde"), 0, SV("12345"), 1, 2, S("23abcde"));
+  test(S("abcde"), 0, SV("12345"), 1, 3, S("234abcde"));
+  test(S("abcde"), 0, SV("12345"), 1, 4, S("2345abcde"));
+  test(S("abcde"), 0, SV("12345"), 1, 5, S("2345abcde"));
+  test(S("abcde"), 0, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 0, SV("12345"), 2, 1, S("3abcde"));
+  test(S("abcde"), 0, SV("12345"), 2, 2, S("34abcde"));
+  test(S("abcde"), 0, SV("12345"), 2, 3, S("345abcde"));
+  test(S("abcde"), 0, SV("12345"), 2, 4, S("345abcde"));
+  test(S("abcde"), 0, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 0, SV("12345"), 4, 1, S("5abcde"));
+  test(S("abcde"), 0, SV("12345"), 4, 2, S("5abcde"));
+  test(S("abcde"), 0, SV("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 0, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 0, 1, S("1abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 0, 5, S("12345abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 0, 9, S("123456789abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 0, 10, S("1234567890abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 0, 11, S("1234567890abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 1, 1, S("2abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 1, 4, S("2345abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 1, 8, S("23456789abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 1, 9, S("234567890abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 1, 10, S("234567890abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 5, 1, S("6abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 5, 2, S("67abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 5, 4, S("6789abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 5, 5, S("67890abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 5, 6, S("67890abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 9, 1, S("0abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 9, 2, S("0abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 0, 1, S("1abcde"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test4()
-{
-    test(S("abcde"), 0, SV("12345678901234567890"), 0, 10, S("1234567890abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 1, 1, S("2abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 1, 9, S("234567890abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 1, 18, S("234567890123456789abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 10, 1, S("1abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 10, 5, S("12345abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 10, 9, S("123456789abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 10, 10, S("1234567890abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 10, 11, S("1234567890abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 19, 1, S("0abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 19, 2, S("0abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, SV(""), 0, 0, S("abcde"));
-    test(S("abcde"), 1, SV(""), 0, 1, S("abcde"));
-    test(S("abcde"), 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, SV("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 1, SV("12345"), 0, 1, S("a1bcde"));
-    test(S("abcde"), 1, SV("12345"), 0, 2, S("a12bcde"));
-    test(S("abcde"), 1, SV("12345"), 0, 4, S("a1234bcde"));
-    test(S("abcde"), 1, SV("12345"), 0, 5, S("a12345bcde"));
-    test(S("abcde"), 1, SV("12345"), 0, 6, S("a12345bcde"));
-    test(S("abcde"), 1, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 1, SV("12345"), 1, 1, S("a2bcde"));
-    test(S("abcde"), 1, SV("12345"), 1, 2, S("a23bcde"));
-    test(S("abcde"), 1, SV("12345"), 1, 3, S("a234bcde"));
-    test(S("abcde"), 1, SV("12345"), 1, 4, S("a2345bcde"));
-    test(S("abcde"), 1, SV("12345"), 1, 5, S("a2345bcde"));
-    test(S("abcde"), 1, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 1, SV("12345"), 2, 1, S("a3bcde"));
-    test(S("abcde"), 1, SV("12345"), 2, 2, S("a34bcde"));
-    test(S("abcde"), 1, SV("12345"), 2, 3, S("a345bcde"));
-    test(S("abcde"), 1, SV("12345"), 2, 4, S("a345bcde"));
-    test(S("abcde"), 1, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 1, SV("12345"), 4, 1, S("a5bcde"));
-    test(S("abcde"), 1, SV("12345"), 4, 2, S("a5bcde"));
-    test(S("abcde"), 1, SV("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 1, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 1, SV("1234567890"), 0, 1, S("a1bcde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test4() {
+  test(S("abcde"), 0, SV("12345678901234567890"), 0, 10, S("1234567890abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 1, 1, S("2abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 1, 9, S("234567890abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 1, 18, S("234567890123456789abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 10, 1, S("1abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 10, 5, S("12345abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 10, 9, S("123456789abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 10, 10, S("1234567890abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 10, 11, S("1234567890abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 19, 1, S("0abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 19, 2, S("0abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, SV(""), 0, 0, S("abcde"));
+  test(S("abcde"), 1, SV(""), 0, 1, S("abcde"));
+  test(S("abcde"), 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, SV("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 1, SV("12345"), 0, 1, S("a1bcde"));
+  test(S("abcde"), 1, SV("12345"), 0, 2, S("a12bcde"));
+  test(S("abcde"), 1, SV("12345"), 0, 4, S("a1234bcde"));
+  test(S("abcde"), 1, SV("12345"), 0, 5, S("a12345bcde"));
+  test(S("abcde"), 1, SV("12345"), 0, 6, S("a12345bcde"));
+  test(S("abcde"), 1, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 1, SV("12345"), 1, 1, S("a2bcde"));
+  test(S("abcde"), 1, SV("12345"), 1, 2, S("a23bcde"));
+  test(S("abcde"), 1, SV("12345"), 1, 3, S("a234bcde"));
+  test(S("abcde"), 1, SV("12345"), 1, 4, S("a2345bcde"));
+  test(S("abcde"), 1, SV("12345"), 1, 5, S("a2345bcde"));
+  test(S("abcde"), 1, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 1, SV("12345"), 2, 1, S("a3bcde"));
+  test(S("abcde"), 1, SV("12345"), 2, 2, S("a34bcde"));
+  test(S("abcde"), 1, SV("12345"), 2, 3, S("a345bcde"));
+  test(S("abcde"), 1, SV("12345"), 2, 4, S("a345bcde"));
+  test(S("abcde"), 1, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 1, SV("12345"), 4, 1, S("a5bcde"));
+  test(S("abcde"), 1, SV("12345"), 4, 2, S("a5bcde"));
+  test(S("abcde"), 1, SV("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 1, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 1, SV("1234567890"), 0, 1, S("a1bcde"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test5()
-{
-    test(S("abcde"), 1, SV("1234567890"), 0, 5, S("a12345bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 0, 9, S("a123456789bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 0, 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 0, 11, S("a1234567890bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 1, SV("1234567890"), 1, 1, S("a2bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 1, 4, S("a2345bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 1, 8, S("a23456789bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 1, 9, S("a234567890bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 1, 10, S("a234567890bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 1, SV("1234567890"), 5, 1, S("a6bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 5, 2, S("a67bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 5, 4, S("a6789bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 5, 5, S("a67890bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 5, 6, S("a67890bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 1, SV("1234567890"), 9, 1, S("a0bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 9, 2, S("a0bcde"));
-    test(S("abcde"), 1, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 1, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 0, 1, S("a1bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 0, 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 0, 19, S("a1234567890123456789bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 0, 20, S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 0, 21, S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 1, 1, S("a2bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 1, 9, S("a234567890bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 1, 18, S("a234567890123456789bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 1, 19, S("a2345678901234567890bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 1, 20, S("a2345678901234567890bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 10, 1, S("a1bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 10, 5, S("a12345bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 10, 9, S("a123456789bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 10, 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 10, 11, S("a1234567890bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 19, 1, S("a0bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 19, 2, S("a0bcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 2, SV(""), 0, 0, S("abcde"));
-    test(S("abcde"), 2, SV(""), 0, 1, S("abcde"));
-    test(S("abcde"), 2, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 2, SV("12345"), 0, 0, S("abcde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test5() {
+  test(S("abcde"), 1, SV("1234567890"), 0, 5, S("a12345bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 0, 9, S("a123456789bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 0, 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 0, 11, S("a1234567890bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 1, SV("1234567890"), 1, 1, S("a2bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 1, 4, S("a2345bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 1, 8, S("a23456789bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 1, 9, S("a234567890bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 1, 10, S("a234567890bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 1, SV("1234567890"), 5, 1, S("a6bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 5, 2, S("a67bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 5, 4, S("a6789bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 5, 5, S("a67890bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 5, 6, S("a67890bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 1, SV("1234567890"), 9, 1, S("a0bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 9, 2, S("a0bcde"));
+  test(S("abcde"), 1, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 1, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 0, 1, S("a1bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 0, 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 0, 19, S("a1234567890123456789bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 0, 20, S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 0, 21, S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 1, 1, S("a2bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 1, 9, S("a234567890bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 1, 18, S("a234567890123456789bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 1, 19, S("a2345678901234567890bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 1, 20, S("a2345678901234567890bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 10, 1, S("a1bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 10, 5, S("a12345bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 10, 9, S("a123456789bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 10, 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 10, 11, S("a1234567890bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 19, 1, S("a0bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 19, 2, S("a0bcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 2, SV(""), 0, 0, S("abcde"));
+  test(S("abcde"), 2, SV(""), 0, 1, S("abcde"));
+  test(S("abcde"), 2, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 2, SV("12345"), 0, 0, S("abcde"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test6()
-{
-    test(S("abcde"), 2, SV("12345"), 0, 1, S("ab1cde"));
-    test(S("abcde"), 2, SV("12345"), 0, 2, S("ab12cde"));
-    test(S("abcde"), 2, SV("12345"), 0, 4, S("ab1234cde"));
-    test(S("abcde"), 2, SV("12345"), 0, 5, S("ab12345cde"));
-    test(S("abcde"), 2, SV("12345"), 0, 6, S("ab12345cde"));
-    test(S("abcde"), 2, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 2, SV("12345"), 1, 1, S("ab2cde"));
-    test(S("abcde"), 2, SV("12345"), 1, 2, S("ab23cde"));
-    test(S("abcde"), 2, SV("12345"), 1, 3, S("ab234cde"));
-    test(S("abcde"), 2, SV("12345"), 1, 4, S("ab2345cde"));
-    test(S("abcde"), 2, SV("12345"), 1, 5, S("ab2345cde"));
-    test(S("abcde"), 2, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 2, SV("12345"), 2, 1, S("ab3cde"));
-    test(S("abcde"), 2, SV("12345"), 2, 2, S("ab34cde"));
-    test(S("abcde"), 2, SV("12345"), 2, 3, S("ab345cde"));
-    test(S("abcde"), 2, SV("12345"), 2, 4, S("ab345cde"));
-    test(S("abcde"), 2, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 2, SV("12345"), 4, 1, S("ab5cde"));
-    test(S("abcde"), 2, SV("12345"), 4, 2, S("ab5cde"));
-    test(S("abcde"), 2, SV("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 2, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 2, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 2, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 2, SV("1234567890"), 0, 1, S("ab1cde"));
-    test(S("abcde"), 2, SV("1234567890"), 0, 5, S("ab12345cde"));
-    test(S("abcde"), 2, SV("1234567890"), 0, 9, S("ab123456789cde"));
-    test(S("abcde"), 2, SV("1234567890"), 0, 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, SV("1234567890"), 0, 11, S("ab1234567890cde"));
-    test(S("abcde"), 2, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 2, SV("1234567890"), 1, 1, S("ab2cde"));
-    test(S("abcde"), 2, SV("1234567890"), 1, 4, S("ab2345cde"));
-    test(S("abcde"), 2, SV("1234567890"), 1, 8, S("ab23456789cde"));
-    test(S("abcde"), 2, SV("1234567890"), 1, 9, S("ab234567890cde"));
-    test(S("abcde"), 2, SV("1234567890"), 1, 10, S("ab234567890cde"));
-    test(S("abcde"), 2, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 2, SV("1234567890"), 5, 1, S("ab6cde"));
-    test(S("abcde"), 2, SV("1234567890"), 5, 2, S("ab67cde"));
-    test(S("abcde"), 2, SV("1234567890"), 5, 4, S("ab6789cde"));
-    test(S("abcde"), 2, SV("1234567890"), 5, 5, S("ab67890cde"));
-    test(S("abcde"), 2, SV("1234567890"), 5, 6, S("ab67890cde"));
-    test(S("abcde"), 2, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 2, SV("1234567890"), 9, 1, S("ab0cde"));
-    test(S("abcde"), 2, SV("1234567890"), 9, 2, S("ab0cde"));
-    test(S("abcde"), 2, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 2, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 2, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 0, 1, S("ab1cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 0, 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 0, 19, S("ab1234567890123456789cde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test6() {
+  test(S("abcde"), 2, SV("12345"), 0, 1, S("ab1cde"));
+  test(S("abcde"), 2, SV("12345"), 0, 2, S("ab12cde"));
+  test(S("abcde"), 2, SV("12345"), 0, 4, S("ab1234cde"));
+  test(S("abcde"), 2, SV("12345"), 0, 5, S("ab12345cde"));
+  test(S("abcde"), 2, SV("12345"), 0, 6, S("ab12345cde"));
+  test(S("abcde"), 2, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 2, SV("12345"), 1, 1, S("ab2cde"));
+  test(S("abcde"), 2, SV("12345"), 1, 2, S("ab23cde"));
+  test(S("abcde"), 2, SV("12345"), 1, 3, S("ab234cde"));
+  test(S("abcde"), 2, SV("12345"), 1, 4, S("ab2345cde"));
+  test(S("abcde"), 2, SV("12345"), 1, 5, S("ab2345cde"));
+  test(S("abcde"), 2, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 2, SV("12345"), 2, 1, S("ab3cde"));
+  test(S("abcde"), 2, SV("12345"), 2, 2, S("ab34cde"));
+  test(S("abcde"), 2, SV("12345"), 2, 3, S("ab345cde"));
+  test(S("abcde"), 2, SV("12345"), 2, 4, S("ab345cde"));
+  test(S("abcde"), 2, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 2, SV("12345"), 4, 1, S("ab5cde"));
+  test(S("abcde"), 2, SV("12345"), 4, 2, S("ab5cde"));
+  test(S("abcde"), 2, SV("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 2, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 2, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 2, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 2, SV("1234567890"), 0, 1, S("ab1cde"));
+  test(S("abcde"), 2, SV("1234567890"), 0, 5, S("ab12345cde"));
+  test(S("abcde"), 2, SV("1234567890"), 0, 9, S("ab123456789cde"));
+  test(S("abcde"), 2, SV("1234567890"), 0, 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, SV("1234567890"), 0, 11, S("ab1234567890cde"));
+  test(S("abcde"), 2, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 2, SV("1234567890"), 1, 1, S("ab2cde"));
+  test(S("abcde"), 2, SV("1234567890"), 1, 4, S("ab2345cde"));
+  test(S("abcde"), 2, SV("1234567890"), 1, 8, S("ab23456789cde"));
+  test(S("abcde"), 2, SV("1234567890"), 1, 9, S("ab234567890cde"));
+  test(S("abcde"), 2, SV("1234567890"), 1, 10, S("ab234567890cde"));
+  test(S("abcde"), 2, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 2, SV("1234567890"), 5, 1, S("ab6cde"));
+  test(S("abcde"), 2, SV("1234567890"), 5, 2, S("ab67cde"));
+  test(S("abcde"), 2, SV("1234567890"), 5, 4, S("ab6789cde"));
+  test(S("abcde"), 2, SV("1234567890"), 5, 5, S("ab67890cde"));
+  test(S("abcde"), 2, SV("1234567890"), 5, 6, S("ab67890cde"));
+  test(S("abcde"), 2, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 2, SV("1234567890"), 9, 1, S("ab0cde"));
+  test(S("abcde"), 2, SV("1234567890"), 9, 2, S("ab0cde"));
+  test(S("abcde"), 2, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 2, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 2, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 0, 1, S("ab1cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 0, 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 0, 19, S("ab1234567890123456789cde"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test7()
-{
-    test(S("abcde"), 2, SV("12345678901234567890"), 0, 20, S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 0, 21, S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 1, 1, S("ab2cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 1, 9, S("ab234567890cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 1, 18, S("ab234567890123456789cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 1, 19, S("ab2345678901234567890cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 1, 20, S("ab2345678901234567890cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 10, 1, S("ab1cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 10, 5, S("ab12345cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 10, 9, S("ab123456789cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 10, 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 10, 11, S("ab1234567890cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 19, 1, S("ab0cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 19, 2, S("ab0cde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 4, SV(""), 0, 0, S("abcde"));
-    test(S("abcde"), 4, SV(""), 0, 1, S("abcde"));
-    test(S("abcde"), 4, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 4, SV("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 4, SV("12345"), 0, 1, S("abcd1e"));
-    test(S("abcde"), 4, SV("12345"), 0, 2, S("abcd12e"));
-    test(S("abcde"), 4, SV("12345"), 0, 4, S("abcd1234e"));
-    test(S("abcde"), 4, SV("12345"), 0, 5, S("abcd12345e"));
-    test(S("abcde"), 4, SV("12345"), 0, 6, S("abcd12345e"));
-    test(S("abcde"), 4, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 4, SV("12345"), 1, 1, S("abcd2e"));
-    test(S("abcde"), 4, SV("12345"), 1, 2, S("abcd23e"));
-    test(S("abcde"), 4, SV("12345"), 1, 3, S("abcd234e"));
-    test(S("abcde"), 4, SV("12345"), 1, 4, S("abcd2345e"));
-    test(S("abcde"), 4, SV("12345"), 1, 5, S("abcd2345e"));
-    test(S("abcde"), 4, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 4, SV("12345"), 2, 1, S("abcd3e"));
-    test(S("abcde"), 4, SV("12345"), 2, 2, S("abcd34e"));
-    test(S("abcde"), 4, SV("12345"), 2, 3, S("abcd345e"));
-    test(S("abcde"), 4, SV("12345"), 2, 4, S("abcd345e"));
-    test(S("abcde"), 4, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 4, SV("12345"), 4, 1, S("abcd5e"));
-    test(S("abcde"), 4, SV("12345"), 4, 2, S("abcd5e"));
-    test(S("abcde"), 4, SV("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 4, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 4, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 4, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 4, SV("1234567890"), 0, 1, S("abcd1e"));
-    test(S("abcde"), 4, SV("1234567890"), 0, 5, S("abcd12345e"));
-    test(S("abcde"), 4, SV("1234567890"), 0, 9, S("abcd123456789e"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test7() {
+  test(S("abcde"), 2, SV("12345678901234567890"), 0, 20, S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 0, 21, S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 1, 1, S("ab2cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 1, 9, S("ab234567890cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 1, 18, S("ab234567890123456789cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 1, 19, S("ab2345678901234567890cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 1, 20, S("ab2345678901234567890cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 10, 1, S("ab1cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 10, 5, S("ab12345cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 10, 9, S("ab123456789cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 10, 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 10, 11, S("ab1234567890cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 19, 1, S("ab0cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 19, 2, S("ab0cde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 4, SV(""), 0, 0, S("abcde"));
+  test(S("abcde"), 4, SV(""), 0, 1, S("abcde"));
+  test(S("abcde"), 4, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 4, SV("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 4, SV("12345"), 0, 1, S("abcd1e"));
+  test(S("abcde"), 4, SV("12345"), 0, 2, S("abcd12e"));
+  test(S("abcde"), 4, SV("12345"), 0, 4, S("abcd1234e"));
+  test(S("abcde"), 4, SV("12345"), 0, 5, S("abcd12345e"));
+  test(S("abcde"), 4, SV("12345"), 0, 6, S("abcd12345e"));
+  test(S("abcde"), 4, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 4, SV("12345"), 1, 1, S("abcd2e"));
+  test(S("abcde"), 4, SV("12345"), 1, 2, S("abcd23e"));
+  test(S("abcde"), 4, SV("12345"), 1, 3, S("abcd234e"));
+  test(S("abcde"), 4, SV("12345"), 1, 4, S("abcd2345e"));
+  test(S("abcde"), 4, SV("12345"), 1, 5, S("abcd2345e"));
+  test(S("abcde"), 4, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 4, SV("12345"), 2, 1, S("abcd3e"));
+  test(S("abcde"), 4, SV("12345"), 2, 2, S("abcd34e"));
+  test(S("abcde"), 4, SV("12345"), 2, 3, S("abcd345e"));
+  test(S("abcde"), 4, SV("12345"), 2, 4, S("abcd345e"));
+  test(S("abcde"), 4, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 4, SV("12345"), 4, 1, S("abcd5e"));
+  test(S("abcde"), 4, SV("12345"), 4, 2, S("abcd5e"));
+  test(S("abcde"), 4, SV("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 4, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 4, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 4, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 4, SV("1234567890"), 0, 1, S("abcd1e"));
+  test(S("abcde"), 4, SV("1234567890"), 0, 5, S("abcd12345e"));
+  test(S("abcde"), 4, SV("1234567890"), 0, 9, S("abcd123456789e"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test8()
-{
-    test(S("abcde"), 4, SV("1234567890"), 0, 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, SV("1234567890"), 0, 11, S("abcd1234567890e"));
-    test(S("abcde"), 4, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 4, SV("1234567890"), 1, 1, S("abcd2e"));
-    test(S("abcde"), 4, SV("1234567890"), 1, 4, S("abcd2345e"));
-    test(S("abcde"), 4, SV("1234567890"), 1, 8, S("abcd23456789e"));
-    test(S("abcde"), 4, SV("1234567890"), 1, 9, S("abcd234567890e"));
-    test(S("abcde"), 4, SV("1234567890"), 1, 10, S("abcd234567890e"));
-    test(S("abcde"), 4, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 4, SV("1234567890"), 5, 1, S("abcd6e"));
-    test(S("abcde"), 4, SV("1234567890"), 5, 2, S("abcd67e"));
-    test(S("abcde"), 4, SV("1234567890"), 5, 4, S("abcd6789e"));
-    test(S("abcde"), 4, SV("1234567890"), 5, 5, S("abcd67890e"));
-    test(S("abcde"), 4, SV("1234567890"), 5, 6, S("abcd67890e"));
-    test(S("abcde"), 4, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 4, SV("1234567890"), 9, 1, S("abcd0e"));
-    test(S("abcde"), 4, SV("1234567890"), 9, 2, S("abcd0e"));
-    test(S("abcde"), 4, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 4, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 4, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 0, 1, S("abcd1e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 0, 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 0, 19, S("abcd1234567890123456789e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 0, 20, S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 0, 21, S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 1, 1, S("abcd2e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 1, 9, S("abcd234567890e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 1, 18, S("abcd234567890123456789e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 1, 19, S("abcd2345678901234567890e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 1, 20, S("abcd2345678901234567890e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 10, 1, S("abcd1e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 10, 5, S("abcd12345e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 10, 9, S("abcd123456789e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 10, 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 10, 11, S("abcd1234567890e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 19, 1, S("abcd0e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 19, 2, S("abcd0e"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 4, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 5, SV(""), 0, 0, S("abcde"));
-    test(S("abcde"), 5, SV(""), 0, 1, S("abcde"));
-    test(S("abcde"), 5, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 5, SV("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, SV("12345"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, SV("12345"), 0, 2, S("abcde12"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test8() {
+  test(S("abcde"), 4, SV("1234567890"), 0, 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, SV("1234567890"), 0, 11, S("abcd1234567890e"));
+  test(S("abcde"), 4, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 4, SV("1234567890"), 1, 1, S("abcd2e"));
+  test(S("abcde"), 4, SV("1234567890"), 1, 4, S("abcd2345e"));
+  test(S("abcde"), 4, SV("1234567890"), 1, 8, S("abcd23456789e"));
+  test(S("abcde"), 4, SV("1234567890"), 1, 9, S("abcd234567890e"));
+  test(S("abcde"), 4, SV("1234567890"), 1, 10, S("abcd234567890e"));
+  test(S("abcde"), 4, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 4, SV("1234567890"), 5, 1, S("abcd6e"));
+  test(S("abcde"), 4, SV("1234567890"), 5, 2, S("abcd67e"));
+  test(S("abcde"), 4, SV("1234567890"), 5, 4, S("abcd6789e"));
+  test(S("abcde"), 4, SV("1234567890"), 5, 5, S("abcd67890e"));
+  test(S("abcde"), 4, SV("1234567890"), 5, 6, S("abcd67890e"));
+  test(S("abcde"), 4, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 4, SV("1234567890"), 9, 1, S("abcd0e"));
+  test(S("abcde"), 4, SV("1234567890"), 9, 2, S("abcd0e"));
+  test(S("abcde"), 4, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 4, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 4, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 0, 1, S("abcd1e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 0, 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 0, 19, S("abcd1234567890123456789e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 0, 20, S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 0, 21, S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 1, 1, S("abcd2e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 1, 9, S("abcd234567890e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 1, 18, S("abcd234567890123456789e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 1, 19, S("abcd2345678901234567890e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 1, 20, S("abcd2345678901234567890e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 10, 1, S("abcd1e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 10, 5, S("abcd12345e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 10, 9, S("abcd123456789e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 10, 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 10, 11, S("abcd1234567890e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 19, 1, S("abcd0e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 19, 2, S("abcd0e"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 4, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 5, SV(""), 0, 0, S("abcde"));
+  test(S("abcde"), 5, SV(""), 0, 1, S("abcde"));
+  test(S("abcde"), 5, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 5, SV("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, SV("12345"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, SV("12345"), 0, 2, S("abcde12"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test9()
-{
-    test(S("abcde"), 5, SV("12345"), 0, 4, S("abcde1234"));
-    test(S("abcde"), 5, SV("12345"), 0, 5, S("abcde12345"));
-    test(S("abcde"), 5, SV("12345"), 0, 6, S("abcde12345"));
-    test(S("abcde"), 5, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, SV("12345"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, SV("12345"), 1, 2, S("abcde23"));
-    test(S("abcde"), 5, SV("12345"), 1, 3, S("abcde234"));
-    test(S("abcde"), 5, SV("12345"), 1, 4, S("abcde2345"));
-    test(S("abcde"), 5, SV("12345"), 1, 5, S("abcde2345"));
-    test(S("abcde"), 5, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 5, SV("12345"), 2, 1, S("abcde3"));
-    test(S("abcde"), 5, SV("12345"), 2, 2, S("abcde34"));
-    test(S("abcde"), 5, SV("12345"), 2, 3, S("abcde345"));
-    test(S("abcde"), 5, SV("12345"), 2, 4, S("abcde345"));
-    test(S("abcde"), 5, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 5, SV("12345"), 4, 1, S("abcde5"));
-    test(S("abcde"), 5, SV("12345"), 4, 2, S("abcde5"));
-    test(S("abcde"), 5, SV("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 5, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 5, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 5, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, SV("1234567890"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, SV("1234567890"), 0, 5, S("abcde12345"));
-    test(S("abcde"), 5, SV("1234567890"), 0, 9, S("abcde123456789"));
-    test(S("abcde"), 5, SV("1234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, SV("1234567890"), 0, 11, S("abcde1234567890"));
-    test(S("abcde"), 5, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, SV("1234567890"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, SV("1234567890"), 1, 4, S("abcde2345"));
-    test(S("abcde"), 5, SV("1234567890"), 1, 8, S("abcde23456789"));
-    test(S("abcde"), 5, SV("1234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcde"), 5, SV("1234567890"), 1, 10, S("abcde234567890"));
-    test(S("abcde"), 5, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 5, SV("1234567890"), 5, 1, S("abcde6"));
-    test(S("abcde"), 5, SV("1234567890"), 5, 2, S("abcde67"));
-    test(S("abcde"), 5, SV("1234567890"), 5, 4, S("abcde6789"));
-    test(S("abcde"), 5, SV("1234567890"), 5, 5, S("abcde67890"));
-    test(S("abcde"), 5, SV("1234567890"), 5, 6, S("abcde67890"));
-    test(S("abcde"), 5, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 5, SV("1234567890"), 9, 1, S("abcde0"));
-    test(S("abcde"), 5, SV("1234567890"), 9, 2, S("abcde0"));
-    test(S("abcde"), 5, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 5, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 5, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test9() {
+  test(S("abcde"), 5, SV("12345"), 0, 4, S("abcde1234"));
+  test(S("abcde"), 5, SV("12345"), 0, 5, S("abcde12345"));
+  test(S("abcde"), 5, SV("12345"), 0, 6, S("abcde12345"));
+  test(S("abcde"), 5, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, SV("12345"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, SV("12345"), 1, 2, S("abcde23"));
+  test(S("abcde"), 5, SV("12345"), 1, 3, S("abcde234"));
+  test(S("abcde"), 5, SV("12345"), 1, 4, S("abcde2345"));
+  test(S("abcde"), 5, SV("12345"), 1, 5, S("abcde2345"));
+  test(S("abcde"), 5, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 5, SV("12345"), 2, 1, S("abcde3"));
+  test(S("abcde"), 5, SV("12345"), 2, 2, S("abcde34"));
+  test(S("abcde"), 5, SV("12345"), 2, 3, S("abcde345"));
+  test(S("abcde"), 5, SV("12345"), 2, 4, S("abcde345"));
+  test(S("abcde"), 5, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 5, SV("12345"), 4, 1, S("abcde5"));
+  test(S("abcde"), 5, SV("12345"), 4, 2, S("abcde5"));
+  test(S("abcde"), 5, SV("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 5, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 5, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 5, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, SV("1234567890"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, SV("1234567890"), 0, 5, S("abcde12345"));
+  test(S("abcde"), 5, SV("1234567890"), 0, 9, S("abcde123456789"));
+  test(S("abcde"), 5, SV("1234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, SV("1234567890"), 0, 11, S("abcde1234567890"));
+  test(S("abcde"), 5, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, SV("1234567890"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, SV("1234567890"), 1, 4, S("abcde2345"));
+  test(S("abcde"), 5, SV("1234567890"), 1, 8, S("abcde23456789"));
+  test(S("abcde"), 5, SV("1234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcde"), 5, SV("1234567890"), 1, 10, S("abcde234567890"));
+  test(S("abcde"), 5, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 5, SV("1234567890"), 5, 1, S("abcde6"));
+  test(S("abcde"), 5, SV("1234567890"), 5, 2, S("abcde67"));
+  test(S("abcde"), 5, SV("1234567890"), 5, 4, S("abcde6789"));
+  test(S("abcde"), 5, SV("1234567890"), 5, 5, S("abcde67890"));
+  test(S("abcde"), 5, SV("1234567890"), 5, 6, S("abcde67890"));
+  test(S("abcde"), 5, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 5, SV("1234567890"), 9, 1, S("abcde0"));
+  test(S("abcde"), 5, SV("1234567890"), 9, 2, S("abcde0"));
+  test(S("abcde"), 5, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 5, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 5, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test10()
-{
-    test(S("abcde"), 5, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 10, 1, S("abcde1"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 10, 5, S("abcde12345"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 10, 9, S("abcde123456789"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 10, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 10, 11, S("abcde1234567890"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 19, 1, S("abcde0"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 19, 2, S("abcde0"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 6, SV(""), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, SV(""), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 0, 2, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 0, 4, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 0, 5, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 0, 6, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 1, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 1, 2, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 1, 3, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 1, 4, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 1, 5, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 2, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 2, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 2, 2, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 2, 3, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 2, 4, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 4, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 4, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 4, 2, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 5, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 5, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 0, 5, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 0, 9, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 0, 10, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 0, 11, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test10() {
+  test(S("abcde"), 5, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 10, 1, S("abcde1"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 10, 5, S("abcde12345"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 10, 9, S("abcde123456789"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 10, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 10, 11, S("abcde1234567890"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 19, 1, S("abcde0"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 19, 2, S("abcde0"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 6, SV(""), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, SV(""), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 0, 2, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 0, 4, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 0, 5, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 0, 6, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 1, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 1, 2, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 1, 3, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 1, 4, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 1, 5, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 2, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 2, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 2, 2, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 2, 3, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 2, 4, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 4, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 4, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 4, 2, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 5, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 5, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 0, 5, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 0, 9, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 0, 10, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 0, 11, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test11()
-{
-    test(S("abcde"), 6, SV("1234567890"), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 1, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 1, 4, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 1, 8, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 1, 9, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 1, 10, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 5, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 5, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 5, 2, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 5, 4, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 5, 5, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 5, 6, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 9, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 9, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 9, 2, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 10, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 10, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S("abcde"), 6, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 0, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 0, 2, S("12abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 0, 4, S("1234abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 0, 5, S("12345abcdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test11() {
+  test(S("abcde"), 6, SV("1234567890"), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 1, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 1, 4, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 1, 8, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 1, 9, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 1, 10, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 5, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 5, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 5, 2, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 5, 4, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 5, 5, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 5, 6, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 9, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 9, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 9, 2, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 10, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 10, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S("abcde"), 6, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 0, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 0, 2, S("12abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 0, 4, S("1234abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 0, 5, S("12345abcdefghij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test12()
-{
-    test(S("abcdefghij"), 0, SV("12345"), 0, 6, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 1, 1, S("2abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 1, 2, S("23abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 1, 3, S("234abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 1, 4, S("2345abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 1, 5, S("2345abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 2, 1, S("3abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 2, 2, S("34abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 2, 3, S("345abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 2, 4, S("345abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 4, 1, S("5abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 4, 2, S("5abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 0, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 0, 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 0, 9, S("123456789abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 0, 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 0, 11, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 1, 1, S("2abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 1, 4, S("2345abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 1, 8, S("23456789abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 1, 9, S("234567890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 1, 10, S("234567890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 5, 1, S("6abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 5, 2, S("67abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 5, 4, S("6789abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 5, 5, S("67890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 5, 6, S("67890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 9, 1, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 9, 2, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 0, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 0, 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 1, 1, S("2abcdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test12() {
+  test(S("abcdefghij"), 0, SV("12345"), 0, 6, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 1, 1, S("2abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 1, 2, S("23abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 1, 3, S("234abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 1, 4, S("2345abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 1, 5, S("2345abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 2, 1, S("3abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 2, 2, S("34abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 2, 3, S("345abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 2, 4, S("345abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 4, 1, S("5abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 4, 2, S("5abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 0, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 0, 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 0, 9, S("123456789abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 0, 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 0, 11, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 1, 1, S("2abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 1, 4, S("2345abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 1, 8, S("23456789abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 1, 9, S("234567890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 1, 10, S("234567890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 5, 1, S("6abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 5, 2, S("67abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 5, 4, S("6789abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 5, 5, S("67890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 5, 6, S("67890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 9, 1, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 9, 2, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 0, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 0, 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 1, 1, S("2abcdefghij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test13()
-{
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 1, 9, S("234567890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 1, 18, S("234567890123456789abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 10, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 10, 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 10, 9, S("123456789abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 10, 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 10, 11, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 19, 1, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 19, 2, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 0, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 0, 2, S("a12bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 0, 4, S("a1234bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 0, 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 0, 6, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 1, 1, S("a2bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 1, 2, S("a23bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 1, 3, S("a234bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 1, 4, S("a2345bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 1, 5, S("a2345bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 2, 1, S("a3bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 2, 2, S("a34bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 2, 3, S("a345bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 2, 4, S("a345bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 4, 1, S("a5bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 4, 2, S("a5bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 0, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 0, 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 0, 9, S("a123456789bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 0, 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 0, 11, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 1, 1, S("a2bcdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test13() {
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 1, 9, S("234567890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 1, 18, S("234567890123456789abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 10, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 10, 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 10, 9, S("123456789abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 10, 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 10, 11, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 19, 1, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 19, 2, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 0, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 0, 2, S("a12bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 0, 4, S("a1234bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 0, 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 0, 6, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 1, 1, S("a2bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 1, 2, S("a23bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 1, 3, S("a234bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 1, 4, S("a2345bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 1, 5, S("a2345bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 2, 1, S("a3bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 2, 2, S("a34bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 2, 3, S("a345bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 2, 4, S("a345bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 4, 1, S("a5bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 4, 2, S("a5bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 0, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 0, 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 0, 9, S("a123456789bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 0, 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 0, 11, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 1, 1, S("a2bcdefghij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test14()
-{
-    test(S("abcdefghij"), 1, SV("1234567890"), 1, 4, S("a2345bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 1, 8, S("a23456789bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 1, 9, S("a234567890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 1, 10, S("a234567890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 5, 1, S("a6bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 5, 2, S("a67bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 5, 4, S("a6789bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 5, 5, S("a67890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 5, 6, S("a67890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 9, 1, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 9, 2, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 0, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 0, 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 1, 1, S("a2bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 1, 9, S("a234567890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 10, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 10, 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 10, 9, S("a123456789bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 10, 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 10, 11, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 19, 1, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 19, 2, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 0, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 0, 2, S("abcde12fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 0, 4, S("abcde1234fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 0, 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 0, 6, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 1, 0, S("abcdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test14() {
+  test(S("abcdefghij"), 1, SV("1234567890"), 1, 4, S("a2345bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 1, 8, S("a23456789bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 1, 9, S("a234567890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 1, 10, S("a234567890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 5, 1, S("a6bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 5, 2, S("a67bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 5, 4, S("a6789bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 5, 5, S("a67890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 5, 6, S("a67890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 9, 1, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 9, 2, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 0, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 0, 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 1, 1, S("a2bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 1, 9, S("a234567890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 10, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 10, 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 10, 9, S("a123456789bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 10, 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 10, 11, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 19, 1, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 19, 2, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 0, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 0, 2, S("abcde12fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 0, 4, S("abcde1234fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 0, 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 0, 6, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 1, 0, S("abcdefghij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test15()
-{
-    test(S("abcdefghij"), 5, SV("12345"), 1, 1, S("abcde2fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 1, 2, S("abcde23fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 1, 3, S("abcde234fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 1, 4, S("abcde2345fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 1, 5, S("abcde2345fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 2, 1, S("abcde3fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 2, 2, S("abcde34fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 2, 3, S("abcde345fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 2, 4, S("abcde345fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 4, 1, S("abcde5fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 4, 2, S("abcde5fghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 0, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 0, 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 0, 9, S("abcde123456789fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 0, 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 0, 11, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 1, 1, S("abcde2fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 1, 4, S("abcde2345fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 1, 8, S("abcde23456789fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 1, 9, S("abcde234567890fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 1, 10, S("abcde234567890fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 5, 1, S("abcde6fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 5, 2, S("abcde67fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 5, 4, S("abcde6789fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 5, 5, S("abcde67890fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 5, 6, S("abcde67890fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 9, 1, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 9, 2, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 0, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 0, 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 1, 1, S("abcde2fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 1, 9, S("abcde234567890fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789fghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test15() {
+  test(S("abcdefghij"), 5, SV("12345"), 1, 1, S("abcde2fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 1, 2, S("abcde23fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 1, 3, S("abcde234fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 1, 4, S("abcde2345fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 1, 5, S("abcde2345fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 2, 1, S("abcde3fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 2, 2, S("abcde34fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 2, 3, S("abcde345fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 2, 4, S("abcde345fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 4, 1, S("abcde5fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 4, 2, S("abcde5fghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 0, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 0, 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 0, 9, S("abcde123456789fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 0, 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 0, 11, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 1, 1, S("abcde2fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 1, 4, S("abcde2345fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 1, 8, S("abcde23456789fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 1, 9, S("abcde234567890fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 1, 10, S("abcde234567890fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 5, 1, S("abcde6fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 5, 2, S("abcde67fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 5, 4, S("abcde6789fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 5, 5, S("abcde67890fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 5, 6, S("abcde67890fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 9, 1, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 9, 2, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 0, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 0, 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 1, 1, S("abcde2fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 1, 9, S("abcde234567890fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789fghij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test16()
-{
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 10, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 10, 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 10, 9, S("abcde123456789fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 10, 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 10, 11, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 19, 1, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 19, 2, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("12345"), 0, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, SV("12345"), 0, 2, S("abcdefghi12j"));
-    test(S("abcdefghij"), 9, SV("12345"), 0, 4, S("abcdefghi1234j"));
-    test(S("abcdefghij"), 9, SV("12345"), 0, 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, SV("12345"), 0, 6, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, SV("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("12345"), 1, 1, S("abcdefghi2j"));
-    test(S("abcdefghij"), 9, SV("12345"), 1, 2, S("abcdefghi23j"));
-    test(S("abcdefghij"), 9, SV("12345"), 1, 3, S("abcdefghi234j"));
-    test(S("abcdefghij"), 9, SV("12345"), 1, 4, S("abcdefghi2345j"));
-    test(S("abcdefghij"), 9, SV("12345"), 1, 5, S("abcdefghi2345j"));
-    test(S("abcdefghij"), 9, SV("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("12345"), 2, 1, S("abcdefghi3j"));
-    test(S("abcdefghij"), 9, SV("12345"), 2, 2, S("abcdefghi34j"));
-    test(S("abcdefghij"), 9, SV("12345"), 2, 3, S("abcdefghi345j"));
-    test(S("abcdefghij"), 9, SV("12345"), 2, 4, S("abcdefghi345j"));
-    test(S("abcdefghij"), 9, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("12345"), 4, 1, S("abcdefghi5j"));
-    test(S("abcdefghij"), 9, SV("12345"), 4, 2, S("abcdefghi5j"));
-    test(S("abcdefghij"), 9, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 0, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 0, 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 0, 9, S("abcdefghi123456789j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 0, 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 0, 11, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 1, 1, S("abcdefghi2j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 1, 4, S("abcdefghi2345j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 1, 8, S("abcdefghi23456789j"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test16() {
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 10, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 10, 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 10, 9, S("abcde123456789fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 10, 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 10, 11, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 19, 1, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 19, 2, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("12345"), 0, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, SV("12345"), 0, 2, S("abcdefghi12j"));
+  test(S("abcdefghij"), 9, SV("12345"), 0, 4, S("abcdefghi1234j"));
+  test(S("abcdefghij"), 9, SV("12345"), 0, 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, SV("12345"), 0, 6, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, SV("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("12345"), 1, 1, S("abcdefghi2j"));
+  test(S("abcdefghij"), 9, SV("12345"), 1, 2, S("abcdefghi23j"));
+  test(S("abcdefghij"), 9, SV("12345"), 1, 3, S("abcdefghi234j"));
+  test(S("abcdefghij"), 9, SV("12345"), 1, 4, S("abcdefghi2345j"));
+  test(S("abcdefghij"), 9, SV("12345"), 1, 5, S("abcdefghi2345j"));
+  test(S("abcdefghij"), 9, SV("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("12345"), 2, 1, S("abcdefghi3j"));
+  test(S("abcdefghij"), 9, SV("12345"), 2, 2, S("abcdefghi34j"));
+  test(S("abcdefghij"), 9, SV("12345"), 2, 3, S("abcdefghi345j"));
+  test(S("abcdefghij"), 9, SV("12345"), 2, 4, S("abcdefghi345j"));
+  test(S("abcdefghij"), 9, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("12345"), 4, 1, S("abcdefghi5j"));
+  test(S("abcdefghij"), 9, SV("12345"), 4, 2, S("abcdefghi5j"));
+  test(S("abcdefghij"), 9, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 0, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 0, 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 0, 9, S("abcdefghi123456789j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 0, 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 0, 11, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 1, 1, S("abcdefghi2j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 1, 4, S("abcdefghi2345j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 1, 8, S("abcdefghi23456789j"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test17()
-{
-    test(S("abcdefghij"), 9, SV("1234567890"), 1, 9, S("abcdefghi234567890j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 1, 10, S("abcdefghi234567890j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 5, 1, S("abcdefghi6j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 5, 2, S("abcdefghi67j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 5, 4, S("abcdefghi6789j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 5, 5, S("abcdefghi67890j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 5, 6, S("abcdefghi67890j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 9, 1, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 9, 2, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 0, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 0, 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 1, 1, S("abcdefghi2j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 1, 9, S("abcdefghi234567890j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 10, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 10, 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 10, 9, S("abcdefghi123456789j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 10, 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 10, 11, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 19, 1, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 19, 2, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("12345"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, SV("12345"), 0, 2, S("abcdefghij12"));
-    test(S("abcdefghij"), 10, SV("12345"), 0, 4, S("abcdefghij1234"));
-    test(S("abcdefghij"), 10, SV("12345"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, SV("12345"), 0, 6, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, SV("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("12345"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, SV("12345"), 1, 2, S("abcdefghij23"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test17() {
+  test(S("abcdefghij"), 9, SV("1234567890"), 1, 9, S("abcdefghi234567890j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 1, 10, S("abcdefghi234567890j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 5, 1, S("abcdefghi6j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 5, 2, S("abcdefghi67j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 5, 4, S("abcdefghi6789j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 5, 5, S("abcdefghi67890j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 5, 6, S("abcdefghi67890j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 9, 1, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 9, 2, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 0, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 0, 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 1, 1, S("abcdefghi2j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 1, 9, S("abcdefghi234567890j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 10, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 10, 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 10, 9, S("abcdefghi123456789j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 10, 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 10, 11, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 19, 1, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 19, 2, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("12345"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, SV("12345"), 0, 2, S("abcdefghij12"));
+  test(S("abcdefghij"), 10, SV("12345"), 0, 4, S("abcdefghij1234"));
+  test(S("abcdefghij"), 10, SV("12345"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, SV("12345"), 0, 6, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, SV("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("12345"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, SV("12345"), 1, 2, S("abcdefghij23"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test18()
-{
-    test(S("abcdefghij"), 10, SV("12345"), 1, 3, S("abcdefghij234"));
-    test(S("abcdefghij"), 10, SV("12345"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, SV("12345"), 1, 5, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, SV("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("12345"), 2, 1, S("abcdefghij3"));
-    test(S("abcdefghij"), 10, SV("12345"), 2, 2, S("abcdefghij34"));
-    test(S("abcdefghij"), 10, SV("12345"), 2, 3, S("abcdefghij345"));
-    test(S("abcdefghij"), 10, SV("12345"), 2, 4, S("abcdefghij345"));
-    test(S("abcdefghij"), 10, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("12345"), 4, 1, S("abcdefghij5"));
-    test(S("abcdefghij"), 10, SV("12345"), 4, 2, S("abcdefghij5"));
-    test(S("abcdefghij"), 10, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 0, 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 0, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 1, 8, S("abcdefghij23456789"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 1, 10, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 5, 1, S("abcdefghij6"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 5, 2, S("abcdefghij67"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 5, 4, S("abcdefghij6789"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 5, 5, S("abcdefghij67890"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 5, 6, S("abcdefghij67890"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 9, 1, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 9, 2, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test18() {
+  test(S("abcdefghij"), 10, SV("12345"), 1, 3, S("abcdefghij234"));
+  test(S("abcdefghij"), 10, SV("12345"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, SV("12345"), 1, 5, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, SV("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("12345"), 2, 1, S("abcdefghij3"));
+  test(S("abcdefghij"), 10, SV("12345"), 2, 2, S("abcdefghij34"));
+  test(S("abcdefghij"), 10, SV("12345"), 2, 3, S("abcdefghij345"));
+  test(S("abcdefghij"), 10, SV("12345"), 2, 4, S("abcdefghij345"));
+  test(S("abcdefghij"), 10, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("12345"), 4, 1, S("abcdefghij5"));
+  test(S("abcdefghij"), 10, SV("12345"), 4, 2, S("abcdefghij5"));
+  test(S("abcdefghij"), 10, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 0, 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 0, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 1, 8, S("abcdefghij23456789"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 1, 10, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 5, 1, S("abcdefghij6"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 5, 2, S("abcdefghij67"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 5, 4, S("abcdefghij6789"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 5, 5, S("abcdefghij67890"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 5, 6, S("abcdefghij67890"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 9, 1, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 9, 2, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test19()
-{
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 10, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 10, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 19, 1, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 19, 2, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV(""), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV(""), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 0, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 0, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 0, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 0, 6, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 1, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 1, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 1, 3, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 1, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 1, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 2, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 2, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 2, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 2, 3, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 2, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 4, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 4, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 4, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 5, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 5, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 0, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 0, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 0, 11, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 1, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 1, 8, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 1, 10, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test19() {
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 10, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 10, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 19, 1, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 19, 2, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV(""), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV(""), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 0, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 0, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 0, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 0, 6, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 1, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 1, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 1, 3, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 1, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 1, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 2, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 2, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 2, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 2, 3, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 2, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 4, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 4, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 4, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 5, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 5, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 0, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 0, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 0, 11, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 1, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 1, 8, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 1, 10, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test20()
-{
-    test(S("abcdefghij"), 11, SV("1234567890"), 5, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 5, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 5, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 5, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 5, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 5, 6, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 9, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 9, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 9, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 0, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 0, 2, S("12abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 0, 4, S("1234abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 0, 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 0, 6, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 1, 1, S("2abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 1, 2, S("23abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 1, 3, S("234abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 1, 4, S("2345abcdefghijklmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test20() {
+  test(S("abcdefghij"), 11, SV("1234567890"), 5, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 5, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 5, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 5, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 5, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 5, 6, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 9, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 9, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 9, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 0, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 0, 2, S("12abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 0, 4, S("1234abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 0, 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 0, 6, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 1, 1, S("2abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 1, 2, S("23abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 1, 3, S("234abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 1, 4, S("2345abcdefghijklmnopqrst"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test21()
-{
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 1, 5, S("2345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 2, 1, S("3abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 2, 2, S("34abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 2, 3, S("345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 2, 4, S("345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 4, 1, S("5abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 4, 2, S("5abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 0, 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 0, 9, S("123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 0, 11, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 1, 4, S("2345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 1, 8, S("23456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 1, 10, S("234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 5, 1, S("6abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 5, 2, S("67abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 5, 4, S("6789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 5, 5, S("67890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 5, 6, S("67890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 9, 1, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 9, 2, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 1, 18, S("234567890123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 10, 1, S("1abcdefghijklmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test21() {
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 1, 5, S("2345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 2, 1, S("3abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 2, 2, S("34abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 2, 3, S("345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 2, 4, S("345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 4, 1, S("5abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 4, 2, S("5abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 0, 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 0, 9, S("123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 0, 11, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 1, 4, S("2345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 1, 8, S("23456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 1, 10, S("234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 5, 1, S("6abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 5, 2, S("67abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 5, 4, S("6789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 5, 5, S("67890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 5, 6, S("67890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 9, 1, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 9, 2, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 1, 18, S("234567890123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 10, 1, S("1abcdefghijklmnopqrst"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test22()
-{
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 10, 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 10, 9, S("123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 10, 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 10, 11, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 19, 1, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 19, 2, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 0, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 0, 2, S("a12bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 0, 4, S("a1234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 0, 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 0, 6, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 1, 1, S("a2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 1, 2, S("a23bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 1, 3, S("a234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 1, 4, S("a2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 1, 5, S("a2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 2, 1, S("a3bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 2, 2, S("a34bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 2, 3, S("a345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 2, 4, S("a345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 4, 1, S("a5bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 4, 2, S("a5bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 0, 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 0, 9, S("a123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 0, 11, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 1, 4, S("a2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 1, 8, S("a23456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 1, 10, S("a234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 5, 1, S("a6bcdefghijklmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test22() {
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 10, 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 10, 9, S("123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 10, 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 10, 11, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 19, 1, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 19, 2, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 0, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 0, 2, S("a12bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 0, 4, S("a1234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 0, 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 0, 6, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 1, 1, S("a2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 1, 2, S("a23bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 1, 3, S("a234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 1, 4, S("a2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 1, 5, S("a2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 2, 1, S("a3bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 2, 2, S("a34bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 2, 3, S("a345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 2, 4, S("a345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 4, 1, S("a5bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 4, 2, S("a5bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 0, 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 0, 9, S("a123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 0, 11, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 1, 4, S("a2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 1, 8, S("a23456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 1, 10, S("a234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 5, 1, S("a6bcdefghijklmnopqrst"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test23()
-{
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 5, 2, S("a67bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 5, 4, S("a6789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 5, 5, S("a67890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 5, 6, S("a67890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 9, 1, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 9, 2, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 10, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 10, 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 10, 9, S("a123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 10, 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 10, 11, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 19, 1, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 19, 2, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, 2, S("abcdefghij12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, 4, S("abcdefghij1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, 6, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, 1, S("abcdefghij2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, 2, S("abcdefghij23klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, 3, S("abcdefghij234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, 4, S("abcdefghij2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, 5, S("abcdefghij2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test23() {
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 5, 2, S("a67bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 5, 4, S("a6789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 5, 5, S("a67890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 5, 6, S("a67890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 9, 1, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 9, 2, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 10, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 10, 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 10, 9, S("a123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 10, 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 10, 11, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 19, 1, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 19, 2, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, 2, S("abcdefghij12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, 4, S("abcdefghij1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, 6, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, 1, S("abcdefghij2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, 2, S("abcdefghij23klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, 3, S("abcdefghij234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, 4, S("abcdefghij2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, 5, S("abcdefghij2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test24()
-{
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 2, 1, S("abcdefghij3klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 2, 2, S("abcdefghij34klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 2, 3, S("abcdefghij345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 2, 4, S("abcdefghij345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 4, 1, S("abcdefghij5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 4, 2, S("abcdefghij5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 0, 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 0, 9, S("abcdefghij123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 0, 11, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 1, 4, S("abcdefghij2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 1, 8, S("abcdefghij23456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 1, 10, S("abcdefghij234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 5, 1, S("abcdefghij6klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 5, 2, S("abcdefghij67klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 5, 4, S("abcdefghij6789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 5, 5, S("abcdefghij67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 5, 6, S("abcdefghij67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 9, 1, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 9, 2, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 10, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 10, 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789klmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test24() {
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 2, 1, S("abcdefghij3klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 2, 2, S("abcdefghij34klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 2, 3, S("abcdefghij345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 2, 4, S("abcdefghij345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 4, 1, S("abcdefghij5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 4, 2, S("abcdefghij5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 0, 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 0, 9, S("abcdefghij123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 0, 11, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 1, 4, S("abcdefghij2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 1, 8, S("abcdefghij23456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 1, 10, S("abcdefghij234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 5, 1, S("abcdefghij6klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 5, 2, S("abcdefghij67klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 5, 4, S("abcdefghij6789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 5, 5, S("abcdefghij67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 5, 6, S("abcdefghij67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 9, 1, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 9, 2, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 10, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 10, 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789klmnopqrst"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test25()
-{
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 19, 1, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 19, 2, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 0, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 0, 2, S("abcdefghijklmnopqrs12t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 0, 4, S("abcdefghijklmnopqrs1234t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 0, 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 0, 6, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 1, 1, S("abcdefghijklmnopqrs2t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 1, 2, S("abcdefghijklmnopqrs23t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 1, 3, S("abcdefghijklmnopqrs234t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 1, 4, S("abcdefghijklmnopqrs2345t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 1, 5, S("abcdefghijklmnopqrs2345t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 2, 1, S("abcdefghijklmnopqrs3t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 2, 2, S("abcdefghijklmnopqrs34t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 2, 3, S("abcdefghijklmnopqrs345t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 2, 4, S("abcdefghijklmnopqrs345t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 4, 1, S("abcdefghijklmnopqrs5t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 4, 2, S("abcdefghijklmnopqrs5t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrs6t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrs67t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789t"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test25() {
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 19, 1, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 19, 2, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 0, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 0, 2, S("abcdefghijklmnopqrs12t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 0, 4, S("abcdefghijklmnopqrs1234t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 0, 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 0, 6, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 1, 1, S("abcdefghijklmnopqrs2t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 1, 2, S("abcdefghijklmnopqrs23t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 1, 3, S("abcdefghijklmnopqrs234t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 1, 4, S("abcdefghijklmnopqrs2345t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 1, 5, S("abcdefghijklmnopqrs2345t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 2, 1, S("abcdefghijklmnopqrs3t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 2, 2, S("abcdefghijklmnopqrs34t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 2, 3, S("abcdefghijklmnopqrs345t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 2, 4, S("abcdefghijklmnopqrs345t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 4, 1, S("abcdefghijklmnopqrs5t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 4, 2, S("abcdefghijklmnopqrs5t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrs6t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrs67t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789t"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test26()
-{
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 0, 2, S("abcdefghijklmnopqrst12"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 0, 4, S("abcdefghijklmnopqrst1234"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 0, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 0, 6, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 1, 2, S("abcdefghijklmnopqrst23"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 1, 3, S("abcdefghijklmnopqrst234"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 1, 4, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 1, 5, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 2, 1, S("abcdefghijklmnopqrst3"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 2, 2, S("abcdefghijklmnopqrst34"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test26() {
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 0, 2, S("abcdefghijklmnopqrst12"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 0, 4, S("abcdefghijklmnopqrst1234"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 0, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 0, 6, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 1, 2, S("abcdefghijklmnopqrst23"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 1, 3, S("abcdefghijklmnopqrst234"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 1, 4, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 1, 5, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 2, 1, S("abcdefghijklmnopqrst3"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 2, 2, S("abcdefghijklmnopqrst34"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test27()
-{
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 2, 3, S("abcdefghijklmnopqrst345"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 2, 4, S("abcdefghijklmnopqrst345"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 4, 1, S("abcdefghijklmnopqrst5"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 4, 2, S("abcdefghijklmnopqrst5"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrst23456789"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrst6"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrst67"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrst6789"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrst67890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrst67890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrst1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrst234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrst2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrst2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrst1234567890"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test27() {
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 2, 3, S("abcdefghijklmnopqrst345"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 2, 4, S("abcdefghijklmnopqrst345"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 4, 1, S("abcdefghijklmnopqrst5"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 4, 2, S("abcdefghijklmnopqrst5"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrst23456789"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrst6"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrst67"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrst6789"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrst67890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrst67890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrst1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrst234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrst2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrst2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrst1234567890"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test28()
-{
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV(""), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV(""), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 0, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 0, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 0, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 0, 6, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 1, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 1, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 1, 3, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 1, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 1, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 2, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 2, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 2, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 2, 3, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 2, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 4, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 4, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 4, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 5, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 5, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 0, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 0, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 0, 11, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 1, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 1, 8, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 1, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 5, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 5, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 5, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 5, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 5, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 5, 6, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test28() {
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV(""), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV(""), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 0, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 0, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 0, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 0, 6, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 1, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 1, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 1, 3, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 1, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 1, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 2, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 2, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 2, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 2, 3, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 2, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 4, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 4, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 4, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 5, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 5, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 0, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 0, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 0, 11, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 1, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 1, 8, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 1, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 5, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 5, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 5, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 5, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 5, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 5, 6, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test29()
-{
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 9, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 9, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 9, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 21, 0, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test29() {
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 9, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 9, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 9, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, SV("12345678901234567890"), 21, 0, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test30()
-{
-    test_npos(S(""), 0, SV("12345678901234567890"),  0, S("12345678901234567890"));
-    test_npos(S(""), 0, SV("12345678901234567890"),  1, S( "2345678901234567890"));
-    test_npos(S(""), 0, SV("12345678901234567890"),  2, S(  "345678901234567890"));
-    test_npos(S(""), 0, SV("12345678901234567890"),  3, S(   "45678901234567890"));
-    test_npos(S(""), 0, SV("12345678901234567890"),  5, S(     "678901234567890"));
-    test_npos(S(""), 0, SV("12345678901234567890"), 10, S(          "1234567890"));
-    test_npos(S(""), 0, SV("12345678901234567890"), 21, S("can't happen"));
-    test_npos(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, S("abcdefghij12345klmnopqrst"));
-    test_npos(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, S("abcdefghij2345klmnopqrst"));
-    test_npos(S("abcdefghijklmnopqrst"), 10, SV("12345"), 3, S("abcdefghij45klmnopqrst"));
-    test_npos(S("abcdefghijklmnopqrst"), 10, SV("12345"), 5, S("abcdefghijklmnopqrst"));
-    test_npos(S("abcdefghijklmnopqrst"), 10, SV("12345"), 6, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test30() {
+  test_npos(S(""), 0, SV("12345678901234567890"), 0, S("12345678901234567890"));
+  test_npos(S(""), 0, SV("12345678901234567890"), 1, S("2345678901234567890"));
+  test_npos(S(""), 0, SV("12345678901234567890"), 2, S("345678901234567890"));
+  test_npos(S(""), 0, SV("12345678901234567890"), 3, S("45678901234567890"));
+  test_npos(S(""), 0, SV("12345678901234567890"), 5, S("678901234567890"));
+  test_npos(S(""), 0, SV("12345678901234567890"), 10, S("1234567890"));
+  test_npos(S(""), 0, SV("12345678901234567890"), 21, S("can't happen"));
+  test_npos(S("abcdefghijklmnopqrst"), 10, SV("12345"), 0, S("abcdefghij12345klmnopqrst"));
+  test_npos(S("abcdefghijklmnopqrst"), 10, SV("12345"), 1, S("abcdefghij2345klmnopqrst"));
+  test_npos(S("abcdefghijklmnopqrst"), 10, SV("12345"), 3, S("abcdefghij45klmnopqrst"));
+  test_npos(S("abcdefghijklmnopqrst"), 10, SV("12345"), 5, S("abcdefghijklmnopqrst"));
+  test_npos(S("abcdefghijklmnopqrst"), 10, SV("12345"), 6, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
 TEST_CONSTEXPR_CXX20 bool test31() {
-    S s;
-    SV sv = "EFGH";
-    char arr[] = "IJKL";
+  S s;
+  SV sv      = "EFGH";
+  char arr[] = "IJKL";
 
-    s.insert(0, "CDEF", 0);    // calls insert(const char *, len)
-    assert(s == "");
-    s.clear();
+  s.insert(0, "CDEF", 0); // calls insert(const char *, len)
+  assert(s == "");
+  s.clear();
 
-    s.insert(0, "QRST", 0, std::string::npos); // calls insert(string("QRST"), pos, npos)
-    assert(s == "QRST");
-    s.clear();
+  s.insert(0, "QRST", 0, std::string::npos); // calls insert(string("QRST"), pos, npos)
+  assert(s == "QRST");
+  s.clear();
 
-    s.insert(0, sv, 0);  // calls insert(T, pos, npos)
-    assert(s == sv);
-    s.clear();
+  s.insert(0, sv, 0); // calls insert(T, pos, npos)
+  assert(s == sv);
+  s.clear();
 
-    s.insert(0, sv, 0, std::string::npos);   // calls insert(T, pos, npos)
-    assert(s == sv);
-    s.clear();
+  s.insert(0, sv, 0, std::string::npos); // calls insert(T, pos, npos)
+  assert(s == sv);
+  s.clear();
 
-    s.insert(0, arr, 0);     // calls insert(const char *, len)
-    assert(s == "");
-    s.clear();
+  s.insert(0, arr, 0); // calls insert(const char *, len)
+  assert(s == "");
+  s.clear();
 
-    s.insert(0, arr, 0, std::string::npos);    // calls insert(string("IJKL"), pos, npos)
-    assert(s == "IJKL");
-    s.clear();
+  s.insert(0, arr, 0, std::string::npos); // calls insert(string("IJKL"), pos, npos)
+  assert(s == "IJKL");
+  s.clear();
 
-    s.insert(0, arr, 0);     // calls insert(const char *, len)
-    assert(s == "");
-    s.clear();
+  s.insert(0, arr, 0); // calls insert(const char *, len)
+  assert(s == "");
+  s.clear();
 
-    return true;
+  return true;
 }
 
 template <class S, class SV>
@@ -1899,8 +1853,7 @@ void test() {
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string, std::string_view>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>,

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer.pass.cpp
index e8a6abf5302565f..359fd999598f889 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer.pass.cpp
@@ -19,31 +19,24 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos, const typename S::value_type* str, S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos <= old_size)
-    {
-        s.insert(pos, str);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos, const typename S::value_type* str, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos <= old_size) {
+    s.insert(pos, str);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.insert(pos, str);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > old_size);
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.insert(pos, str);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > old_size);
+      assert(s == s0);
     }
+  }
 #endif
 }
 
@@ -156,8 +149,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer_size.pass.cpp
index 1e0cdf5d501e0f6..44f20ff63cc0ca5 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_pointer_size.pass.cpp
@@ -20,31 +20,24 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos, const typename S::value_type* str,
-     typename S::size_type n, S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos <= old_size)
-    {
-        s.insert(pos, str, n);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+test(S s, typename S::size_type pos, const typename S::value_type* str, typename S::size_type n, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos <= old_size) {
+    s.insert(pos, str, n);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.insert(pos, str, n);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > old_size);
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.insert(pos, str, n);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > old_size);
+      assert(s == s0);
     }
+  }
 #endif
 }
 
@@ -391,8 +384,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_size_char.pass.cpp
index 143fa54f42779d0..2396b7e2f54df73 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_size_char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_size_char.pass.cpp
@@ -20,31 +20,24 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos, typename S::size_type n,
-     typename S::value_type str, S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos <= old_size)
-    {
-        s.insert(pos, n, str);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+test(S s, typename S::size_type pos, typename S::size_type n, typename S::value_type str, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos <= old_size) {
+    s.insert(pos, n, str);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.insert(pos, n, str);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > old_size);
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.insert(pos, n, str);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > old_size);
+      assert(s == s0);
     }
+  }
 #endif
 }
 
@@ -141,8 +134,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string.pass.cpp
index e3c81856cf2db3b..1b908ac464c3134 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string.pass.cpp
@@ -19,31 +19,24 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos, S str, S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos <= old_size)
-    {
-        s.insert(pos, str);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos, S str, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos <= old_size) {
+    s.insert(pos, str);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.insert(pos, str);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > old_size);
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.insert(pos, str);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > old_size);
+      assert(s == s0);
     }
+  }
 #endif
 }
 
@@ -138,7 +131,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
 #endif
 
 #if TEST_STD_VER >= 11
-  {   // LWG 2946
+  { // LWG 2946
     std::string s;
     s.insert(0, {"abc", 1});
     assert(s.size() == 1);
@@ -149,8 +142,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp
index 857d8c66e97601c..1a8f6b35b42c445 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/size_string_size_size.pass.cpp
@@ -22,1771 +22,1725 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos1, S str, typename S::size_type pos2,
-     typename S::size_type n, S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos1 <= old_size && pos2 <= str.size())
-    {
-        s.insert(pos1, str, pos2, n);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+test(S s, typename S::size_type pos1, S str, typename S::size_type pos2, typename S::size_type n, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos1 <= old_size && pos2 <= str.size()) {
+    s.insert(pos1, str, pos2, n);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.insert(pos1, str, pos2, n);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > old_size || pos2 > str.size());
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.insert(pos1, str, pos2, n);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > old_size || pos2 > str.size());
+      assert(s == s0);
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test_npos(S s, typename S::size_type pos1, S str, typename S::size_type pos2, S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos1 <= old_size && pos2 <= str.size())
-    {
-        s.insert(pos1, str, pos2);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test_npos(S s, typename S::size_type pos1, S str, typename S::size_type pos2, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos1 <= old_size && pos2 <= str.size()) {
+    s.insert(pos1, str, pos2);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.insert(pos1, str, pos2);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > old_size || pos2 > str.size());
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.insert(pos1, str, pos2);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > old_size || pos2 > str.size());
+      assert(s == s0);
     }
+  }
 #endif
 }
 
-
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, S(""), 0, 0, S(""));
-    test(S(""), 0, S(""), 0, 1, S(""));
-    test(S(""), 0, S(""), 1, 0, S("can't happen"));
-    test(S(""), 0, S("12345"), 0, 0, S(""));
-    test(S(""), 0, S("12345"), 0, 1, S("1"));
-    test(S(""), 0, S("12345"), 0, 2, S("12"));
-    test(S(""), 0, S("12345"), 0, 4, S("1234"));
-    test(S(""), 0, S("12345"), 0, 5, S("12345"));
-    test(S(""), 0, S("12345"), 0, 6, S("12345"));
-    test(S(""), 0, S("12345"), 1, 0, S(""));
-    test(S(""), 0, S("12345"), 1, 1, S("2"));
-    test(S(""), 0, S("12345"), 1, 2, S("23"));
-    test(S(""), 0, S("12345"), 1, 3, S("234"));
-    test(S(""), 0, S("12345"), 1, 4, S("2345"));
-    test(S(""), 0, S("12345"), 1, 5, S("2345"));
-    test(S(""), 0, S("12345"), 2, 0, S(""));
-    test(S(""), 0, S("12345"), 2, 1, S("3"));
-    test(S(""), 0, S("12345"), 2, 2, S("34"));
-    test(S(""), 0, S("12345"), 2, 3, S("345"));
-    test(S(""), 0, S("12345"), 2, 4, S("345"));
-    test(S(""), 0, S("12345"), 4, 0, S(""));
-    test(S(""), 0, S("12345"), 4, 1, S("5"));
-    test(S(""), 0, S("12345"), 4, 2, S("5"));
-    test(S(""), 0, S("12345"), 5, 0, S(""));
-    test(S(""), 0, S("12345"), 5, 1, S(""));
-    test(S(""), 0, S("12345"), 6, 0, S("can't happen"));
-    test(S(""), 0, S("1234567890"), 0, 0, S(""));
-    test(S(""), 0, S("1234567890"), 0, 1, S("1"));
-    test(S(""), 0, S("1234567890"), 0, 5, S("12345"));
-    test(S(""), 0, S("1234567890"), 0, 9, S("123456789"));
-    test(S(""), 0, S("1234567890"), 0, 10, S("1234567890"));
-    test(S(""), 0, S("1234567890"), 0, 11, S("1234567890"));
-    test(S(""), 0, S("1234567890"), 1, 0, S(""));
-    test(S(""), 0, S("1234567890"), 1, 1, S("2"));
-    test(S(""), 0, S("1234567890"), 1, 4, S("2345"));
-    test(S(""), 0, S("1234567890"), 1, 8, S("23456789"));
-    test(S(""), 0, S("1234567890"), 1, 9, S("234567890"));
-    test(S(""), 0, S("1234567890"), 1, 10, S("234567890"));
-    test(S(""), 0, S("1234567890"), 5, 0, S(""));
-    test(S(""), 0, S("1234567890"), 5, 1, S("6"));
-    test(S(""), 0, S("1234567890"), 5, 2, S("67"));
-    test(S(""), 0, S("1234567890"), 5, 4, S("6789"));
-    test(S(""), 0, S("1234567890"), 5, 5, S("67890"));
-    test(S(""), 0, S("1234567890"), 5, 6, S("67890"));
-    test(S(""), 0, S("1234567890"), 9, 0, S(""));
-    test(S(""), 0, S("1234567890"), 9, 1, S("0"));
-    test(S(""), 0, S("1234567890"), 9, 2, S("0"));
-    test(S(""), 0, S("1234567890"), 10, 0, S(""));
-    test(S(""), 0, S("1234567890"), 10, 1, S(""));
-    test(S(""), 0, S("1234567890"), 11, 0, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, S(""), 0, 0, S(""));
+  test(S(""), 0, S(""), 0, 1, S(""));
+  test(S(""), 0, S(""), 1, 0, S("can't happen"));
+  test(S(""), 0, S("12345"), 0, 0, S(""));
+  test(S(""), 0, S("12345"), 0, 1, S("1"));
+  test(S(""), 0, S("12345"), 0, 2, S("12"));
+  test(S(""), 0, S("12345"), 0, 4, S("1234"));
+  test(S(""), 0, S("12345"), 0, 5, S("12345"));
+  test(S(""), 0, S("12345"), 0, 6, S("12345"));
+  test(S(""), 0, S("12345"), 1, 0, S(""));
+  test(S(""), 0, S("12345"), 1, 1, S("2"));
+  test(S(""), 0, S("12345"), 1, 2, S("23"));
+  test(S(""), 0, S("12345"), 1, 3, S("234"));
+  test(S(""), 0, S("12345"), 1, 4, S("2345"));
+  test(S(""), 0, S("12345"), 1, 5, S("2345"));
+  test(S(""), 0, S("12345"), 2, 0, S(""));
+  test(S(""), 0, S("12345"), 2, 1, S("3"));
+  test(S(""), 0, S("12345"), 2, 2, S("34"));
+  test(S(""), 0, S("12345"), 2, 3, S("345"));
+  test(S(""), 0, S("12345"), 2, 4, S("345"));
+  test(S(""), 0, S("12345"), 4, 0, S(""));
+  test(S(""), 0, S("12345"), 4, 1, S("5"));
+  test(S(""), 0, S("12345"), 4, 2, S("5"));
+  test(S(""), 0, S("12345"), 5, 0, S(""));
+  test(S(""), 0, S("12345"), 5, 1, S(""));
+  test(S(""), 0, S("12345"), 6, 0, S("can't happen"));
+  test(S(""), 0, S("1234567890"), 0, 0, S(""));
+  test(S(""), 0, S("1234567890"), 0, 1, S("1"));
+  test(S(""), 0, S("1234567890"), 0, 5, S("12345"));
+  test(S(""), 0, S("1234567890"), 0, 9, S("123456789"));
+  test(S(""), 0, S("1234567890"), 0, 10, S("1234567890"));
+  test(S(""), 0, S("1234567890"), 0, 11, S("1234567890"));
+  test(S(""), 0, S("1234567890"), 1, 0, S(""));
+  test(S(""), 0, S("1234567890"), 1, 1, S("2"));
+  test(S(""), 0, S("1234567890"), 1, 4, S("2345"));
+  test(S(""), 0, S("1234567890"), 1, 8, S("23456789"));
+  test(S(""), 0, S("1234567890"), 1, 9, S("234567890"));
+  test(S(""), 0, S("1234567890"), 1, 10, S("234567890"));
+  test(S(""), 0, S("1234567890"), 5, 0, S(""));
+  test(S(""), 0, S("1234567890"), 5, 1, S("6"));
+  test(S(""), 0, S("1234567890"), 5, 2, S("67"));
+  test(S(""), 0, S("1234567890"), 5, 4, S("6789"));
+  test(S(""), 0, S("1234567890"), 5, 5, S("67890"));
+  test(S(""), 0, S("1234567890"), 5, 6, S("67890"));
+  test(S(""), 0, S("1234567890"), 9, 0, S(""));
+  test(S(""), 0, S("1234567890"), 9, 1, S("0"));
+  test(S(""), 0, S("1234567890"), 9, 2, S("0"));
+  test(S(""), 0, S("1234567890"), 10, 0, S(""));
+  test(S(""), 0, S("1234567890"), 10, 1, S(""));
+  test(S(""), 0, S("1234567890"), 11, 0, S("can't happen"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S(""), 0, S("12345678901234567890"), 0, 0, S(""));
-    test(S(""), 0, S("12345678901234567890"), 0, 1, S("1"));
-    test(S(""), 0, S("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S(""), 0, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S(""), 0, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S(""), 0, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S(""), 0, S("12345678901234567890"), 1, 0, S(""));
-    test(S(""), 0, S("12345678901234567890"), 1, 1, S("2"));
-    test(S(""), 0, S("12345678901234567890"), 1, 9, S("234567890"));
-    test(S(""), 0, S("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S(""), 0, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S(""), 0, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S(""), 0, S("12345678901234567890"), 10, 0, S(""));
-    test(S(""), 0, S("12345678901234567890"), 10, 1, S("1"));
-    test(S(""), 0, S("12345678901234567890"), 10, 5, S("12345"));
-    test(S(""), 0, S("12345678901234567890"), 10, 9, S("123456789"));
-    test(S(""), 0, S("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S(""), 0, S("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S(""), 0, S("12345678901234567890"), 19, 0, S(""));
-    test(S(""), 0, S("12345678901234567890"), 19, 1, S("0"));
-    test(S(""), 0, S("12345678901234567890"), 19, 2, S("0"));
-    test(S(""), 0, S("12345678901234567890"), 20, 0, S(""));
-    test(S(""), 0, S("12345678901234567890"), 20, 1, S(""));
-    test(S(""), 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S(""), 1, S(""), 0, 0, S("can't happen"));
-    test(S(""), 1, S(""), 0, 1, S("can't happen"));
-    test(S(""), 1, S(""), 1, 0, S("can't happen"));
-    test(S(""), 1, S("12345"), 0, 0, S("can't happen"));
-    test(S(""), 1, S("12345"), 0, 1, S("can't happen"));
-    test(S(""), 1, S("12345"), 0, 2, S("can't happen"));
-    test(S(""), 1, S("12345"), 0, 4, S("can't happen"));
-    test(S(""), 1, S("12345"), 0, 5, S("can't happen"));
-    test(S(""), 1, S("12345"), 0, 6, S("can't happen"));
-    test(S(""), 1, S("12345"), 1, 0, S("can't happen"));
-    test(S(""), 1, S("12345"), 1, 1, S("can't happen"));
-    test(S(""), 1, S("12345"), 1, 2, S("can't happen"));
-    test(S(""), 1, S("12345"), 1, 3, S("can't happen"));
-    test(S(""), 1, S("12345"), 1, 4, S("can't happen"));
-    test(S(""), 1, S("12345"), 1, 5, S("can't happen"));
-    test(S(""), 1, S("12345"), 2, 0, S("can't happen"));
-    test(S(""), 1, S("12345"), 2, 1, S("can't happen"));
-    test(S(""), 1, S("12345"), 2, 2, S("can't happen"));
-    test(S(""), 1, S("12345"), 2, 3, S("can't happen"));
-    test(S(""), 1, S("12345"), 2, 4, S("can't happen"));
-    test(S(""), 1, S("12345"), 4, 0, S("can't happen"));
-    test(S(""), 1, S("12345"), 4, 1, S("can't happen"));
-    test(S(""), 1, S("12345"), 4, 2, S("can't happen"));
-    test(S(""), 1, S("12345"), 5, 0, S("can't happen"));
-    test(S(""), 1, S("12345"), 5, 1, S("can't happen"));
-    test(S(""), 1, S("12345"), 6, 0, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S(""), 0, S("12345678901234567890"), 0, 0, S(""));
+  test(S(""), 0, S("12345678901234567890"), 0, 1, S("1"));
+  test(S(""), 0, S("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S(""), 0, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S(""), 0, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S(""), 0, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S(""), 0, S("12345678901234567890"), 1, 0, S(""));
+  test(S(""), 0, S("12345678901234567890"), 1, 1, S("2"));
+  test(S(""), 0, S("12345678901234567890"), 1, 9, S("234567890"));
+  test(S(""), 0, S("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S(""), 0, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S(""), 0, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S(""), 0, S("12345678901234567890"), 10, 0, S(""));
+  test(S(""), 0, S("12345678901234567890"), 10, 1, S("1"));
+  test(S(""), 0, S("12345678901234567890"), 10, 5, S("12345"));
+  test(S(""), 0, S("12345678901234567890"), 10, 9, S("123456789"));
+  test(S(""), 0, S("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S(""), 0, S("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S(""), 0, S("12345678901234567890"), 19, 0, S(""));
+  test(S(""), 0, S("12345678901234567890"), 19, 1, S("0"));
+  test(S(""), 0, S("12345678901234567890"), 19, 2, S("0"));
+  test(S(""), 0, S("12345678901234567890"), 20, 0, S(""));
+  test(S(""), 0, S("12345678901234567890"), 20, 1, S(""));
+  test(S(""), 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S(""), 1, S(""), 0, 0, S("can't happen"));
+  test(S(""), 1, S(""), 0, 1, S("can't happen"));
+  test(S(""), 1, S(""), 1, 0, S("can't happen"));
+  test(S(""), 1, S("12345"), 0, 0, S("can't happen"));
+  test(S(""), 1, S("12345"), 0, 1, S("can't happen"));
+  test(S(""), 1, S("12345"), 0, 2, S("can't happen"));
+  test(S(""), 1, S("12345"), 0, 4, S("can't happen"));
+  test(S(""), 1, S("12345"), 0, 5, S("can't happen"));
+  test(S(""), 1, S("12345"), 0, 6, S("can't happen"));
+  test(S(""), 1, S("12345"), 1, 0, S("can't happen"));
+  test(S(""), 1, S("12345"), 1, 1, S("can't happen"));
+  test(S(""), 1, S("12345"), 1, 2, S("can't happen"));
+  test(S(""), 1, S("12345"), 1, 3, S("can't happen"));
+  test(S(""), 1, S("12345"), 1, 4, S("can't happen"));
+  test(S(""), 1, S("12345"), 1, 5, S("can't happen"));
+  test(S(""), 1, S("12345"), 2, 0, S("can't happen"));
+  test(S(""), 1, S("12345"), 2, 1, S("can't happen"));
+  test(S(""), 1, S("12345"), 2, 2, S("can't happen"));
+  test(S(""), 1, S("12345"), 2, 3, S("can't happen"));
+  test(S(""), 1, S("12345"), 2, 4, S("can't happen"));
+  test(S(""), 1, S("12345"), 4, 0, S("can't happen"));
+  test(S(""), 1, S("12345"), 4, 1, S("can't happen"));
+  test(S(""), 1, S("12345"), 4, 2, S("can't happen"));
+  test(S(""), 1, S("12345"), 5, 0, S("can't happen"));
+  test(S(""), 1, S("12345"), 5, 1, S("can't happen"));
+  test(S(""), 1, S("12345"), 6, 0, S("can't happen"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S(""), 1, S("1234567890"), 0, 0, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 0, 1, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 0, 5, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 0, 9, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 0, 10, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 0, 11, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 1, 0, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 1, 1, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 1, 4, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 1, 8, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 1, 9, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 1, 10, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 5, 0, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 5, 1, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 5, 2, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 5, 4, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 5, 5, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 5, 6, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 9, 0, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 9, 1, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 9, 2, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 10, 0, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 10, 1, S("can't happen"));
-    test(S(""), 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S(""), 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, S(""), 0, 0, S("abcde"));
-    test(S("abcde"), 0, S(""), 0, 1, S("abcde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S(""), 1, S("1234567890"), 0, 0, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 0, 1, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 0, 5, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 0, 9, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 0, 10, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 0, 11, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 1, 0, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 1, 1, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 1, 4, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 1, 8, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 1, 9, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 1, 10, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 5, 0, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 5, 1, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 5, 2, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 5, 4, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 5, 5, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 5, 6, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 9, 0, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 9, 1, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 9, 2, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 10, 0, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 10, 1, S("can't happen"));
+  test(S(""), 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S(""), 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, S(""), 0, 0, S("abcde"));
+  test(S("abcde"), 0, S(""), 0, 1, S("abcde"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test3()
-{
-    test(S("abcde"), 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, S("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 0, S("12345"), 0, 1, S("1abcde"));
-    test(S("abcde"), 0, S("12345"), 0, 2, S("12abcde"));
-    test(S("abcde"), 0, S("12345"), 0, 4, S("1234abcde"));
-    test(S("abcde"), 0, S("12345"), 0, 5, S("12345abcde"));
-    test(S("abcde"), 0, S("12345"), 0, 6, S("12345abcde"));
-    test(S("abcde"), 0, S("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 0, S("12345"), 1, 1, S("2abcde"));
-    test(S("abcde"), 0, S("12345"), 1, 2, S("23abcde"));
-    test(S("abcde"), 0, S("12345"), 1, 3, S("234abcde"));
-    test(S("abcde"), 0, S("12345"), 1, 4, S("2345abcde"));
-    test(S("abcde"), 0, S("12345"), 1, 5, S("2345abcde"));
-    test(S("abcde"), 0, S("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 0, S("12345"), 2, 1, S("3abcde"));
-    test(S("abcde"), 0, S("12345"), 2, 2, S("34abcde"));
-    test(S("abcde"), 0, S("12345"), 2, 3, S("345abcde"));
-    test(S("abcde"), 0, S("12345"), 2, 4, S("345abcde"));
-    test(S("abcde"), 0, S("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 0, S("12345"), 4, 1, S("5abcde"));
-    test(S("abcde"), 0, S("12345"), 4, 2, S("5abcde"));
-    test(S("abcde"), 0, S("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 0, S("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 0, S("1234567890"), 0, 1, S("1abcde"));
-    test(S("abcde"), 0, S("1234567890"), 0, 5, S("12345abcde"));
-    test(S("abcde"), 0, S("1234567890"), 0, 9, S("123456789abcde"));
-    test(S("abcde"), 0, S("1234567890"), 0, 10, S("1234567890abcde"));
-    test(S("abcde"), 0, S("1234567890"), 0, 11, S("1234567890abcde"));
-    test(S("abcde"), 0, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 0, S("1234567890"), 1, 1, S("2abcde"));
-    test(S("abcde"), 0, S("1234567890"), 1, 4, S("2345abcde"));
-    test(S("abcde"), 0, S("1234567890"), 1, 8, S("23456789abcde"));
-    test(S("abcde"), 0, S("1234567890"), 1, 9, S("234567890abcde"));
-    test(S("abcde"), 0, S("1234567890"), 1, 10, S("234567890abcde"));
-    test(S("abcde"), 0, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 0, S("1234567890"), 5, 1, S("6abcde"));
-    test(S("abcde"), 0, S("1234567890"), 5, 2, S("67abcde"));
-    test(S("abcde"), 0, S("1234567890"), 5, 4, S("6789abcde"));
-    test(S("abcde"), 0, S("1234567890"), 5, 5, S("67890abcde"));
-    test(S("abcde"), 0, S("1234567890"), 5, 6, S("67890abcde"));
-    test(S("abcde"), 0, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 0, S("1234567890"), 9, 1, S("0abcde"));
-    test(S("abcde"), 0, S("1234567890"), 9, 2, S("0abcde"));
-    test(S("abcde"), 0, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 0, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 0, 1, S("1abcde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test3() {
+  test(S("abcde"), 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, S("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 0, S("12345"), 0, 1, S("1abcde"));
+  test(S("abcde"), 0, S("12345"), 0, 2, S("12abcde"));
+  test(S("abcde"), 0, S("12345"), 0, 4, S("1234abcde"));
+  test(S("abcde"), 0, S("12345"), 0, 5, S("12345abcde"));
+  test(S("abcde"), 0, S("12345"), 0, 6, S("12345abcde"));
+  test(S("abcde"), 0, S("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 0, S("12345"), 1, 1, S("2abcde"));
+  test(S("abcde"), 0, S("12345"), 1, 2, S("23abcde"));
+  test(S("abcde"), 0, S("12345"), 1, 3, S("234abcde"));
+  test(S("abcde"), 0, S("12345"), 1, 4, S("2345abcde"));
+  test(S("abcde"), 0, S("12345"), 1, 5, S("2345abcde"));
+  test(S("abcde"), 0, S("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 0, S("12345"), 2, 1, S("3abcde"));
+  test(S("abcde"), 0, S("12345"), 2, 2, S("34abcde"));
+  test(S("abcde"), 0, S("12345"), 2, 3, S("345abcde"));
+  test(S("abcde"), 0, S("12345"), 2, 4, S("345abcde"));
+  test(S("abcde"), 0, S("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 0, S("12345"), 4, 1, S("5abcde"));
+  test(S("abcde"), 0, S("12345"), 4, 2, S("5abcde"));
+  test(S("abcde"), 0, S("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 0, S("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 0, S("1234567890"), 0, 1, S("1abcde"));
+  test(S("abcde"), 0, S("1234567890"), 0, 5, S("12345abcde"));
+  test(S("abcde"), 0, S("1234567890"), 0, 9, S("123456789abcde"));
+  test(S("abcde"), 0, S("1234567890"), 0, 10, S("1234567890abcde"));
+  test(S("abcde"), 0, S("1234567890"), 0, 11, S("1234567890abcde"));
+  test(S("abcde"), 0, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 0, S("1234567890"), 1, 1, S("2abcde"));
+  test(S("abcde"), 0, S("1234567890"), 1, 4, S("2345abcde"));
+  test(S("abcde"), 0, S("1234567890"), 1, 8, S("23456789abcde"));
+  test(S("abcde"), 0, S("1234567890"), 1, 9, S("234567890abcde"));
+  test(S("abcde"), 0, S("1234567890"), 1, 10, S("234567890abcde"));
+  test(S("abcde"), 0, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 0, S("1234567890"), 5, 1, S("6abcde"));
+  test(S("abcde"), 0, S("1234567890"), 5, 2, S("67abcde"));
+  test(S("abcde"), 0, S("1234567890"), 5, 4, S("6789abcde"));
+  test(S("abcde"), 0, S("1234567890"), 5, 5, S("67890abcde"));
+  test(S("abcde"), 0, S("1234567890"), 5, 6, S("67890abcde"));
+  test(S("abcde"), 0, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 0, S("1234567890"), 9, 1, S("0abcde"));
+  test(S("abcde"), 0, S("1234567890"), 9, 2, S("0abcde"));
+  test(S("abcde"), 0, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 0, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 0, 1, S("1abcde"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test4()
-{
-    test(S("abcde"), 0, S("12345678901234567890"), 0, 10, S("1234567890abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 0, 19, S("1234567890123456789abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 0, 20, S("12345678901234567890abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 0, 21, S("12345678901234567890abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 1, 1, S("2abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 1, 9, S("234567890abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 1, 18, S("234567890123456789abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 1, 19, S("2345678901234567890abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 1, 20, S("2345678901234567890abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 10, 1, S("1abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 10, 5, S("12345abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 10, 9, S("123456789abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 10, 10, S("1234567890abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 10, 11, S("1234567890abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 19, 1, S("0abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 19, 2, S("0abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, S(""), 0, 0, S("abcde"));
-    test(S("abcde"), 1, S(""), 0, 1, S("abcde"));
-    test(S("abcde"), 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, S("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 1, S("12345"), 0, 1, S("a1bcde"));
-    test(S("abcde"), 1, S("12345"), 0, 2, S("a12bcde"));
-    test(S("abcde"), 1, S("12345"), 0, 4, S("a1234bcde"));
-    test(S("abcde"), 1, S("12345"), 0, 5, S("a12345bcde"));
-    test(S("abcde"), 1, S("12345"), 0, 6, S("a12345bcde"));
-    test(S("abcde"), 1, S("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 1, S("12345"), 1, 1, S("a2bcde"));
-    test(S("abcde"), 1, S("12345"), 1, 2, S("a23bcde"));
-    test(S("abcde"), 1, S("12345"), 1, 3, S("a234bcde"));
-    test(S("abcde"), 1, S("12345"), 1, 4, S("a2345bcde"));
-    test(S("abcde"), 1, S("12345"), 1, 5, S("a2345bcde"));
-    test(S("abcde"), 1, S("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 1, S("12345"), 2, 1, S("a3bcde"));
-    test(S("abcde"), 1, S("12345"), 2, 2, S("a34bcde"));
-    test(S("abcde"), 1, S("12345"), 2, 3, S("a345bcde"));
-    test(S("abcde"), 1, S("12345"), 2, 4, S("a345bcde"));
-    test(S("abcde"), 1, S("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 1, S("12345"), 4, 1, S("a5bcde"));
-    test(S("abcde"), 1, S("12345"), 4, 2, S("a5bcde"));
-    test(S("abcde"), 1, S("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 1, S("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 1, S("1234567890"), 0, 1, S("a1bcde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test4() {
+  test(S("abcde"), 0, S("12345678901234567890"), 0, 10, S("1234567890abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 0, 19, S("1234567890123456789abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 0, 20, S("12345678901234567890abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 0, 21, S("12345678901234567890abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 1, 1, S("2abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 1, 9, S("234567890abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 1, 18, S("234567890123456789abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 1, 19, S("2345678901234567890abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 1, 20, S("2345678901234567890abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 10, 1, S("1abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 10, 5, S("12345abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 10, 9, S("123456789abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 10, 10, S("1234567890abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 10, 11, S("1234567890abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 19, 1, S("0abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 19, 2, S("0abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, S(""), 0, 0, S("abcde"));
+  test(S("abcde"), 1, S(""), 0, 1, S("abcde"));
+  test(S("abcde"), 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, S("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 1, S("12345"), 0, 1, S("a1bcde"));
+  test(S("abcde"), 1, S("12345"), 0, 2, S("a12bcde"));
+  test(S("abcde"), 1, S("12345"), 0, 4, S("a1234bcde"));
+  test(S("abcde"), 1, S("12345"), 0, 5, S("a12345bcde"));
+  test(S("abcde"), 1, S("12345"), 0, 6, S("a12345bcde"));
+  test(S("abcde"), 1, S("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 1, S("12345"), 1, 1, S("a2bcde"));
+  test(S("abcde"), 1, S("12345"), 1, 2, S("a23bcde"));
+  test(S("abcde"), 1, S("12345"), 1, 3, S("a234bcde"));
+  test(S("abcde"), 1, S("12345"), 1, 4, S("a2345bcde"));
+  test(S("abcde"), 1, S("12345"), 1, 5, S("a2345bcde"));
+  test(S("abcde"), 1, S("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 1, S("12345"), 2, 1, S("a3bcde"));
+  test(S("abcde"), 1, S("12345"), 2, 2, S("a34bcde"));
+  test(S("abcde"), 1, S("12345"), 2, 3, S("a345bcde"));
+  test(S("abcde"), 1, S("12345"), 2, 4, S("a345bcde"));
+  test(S("abcde"), 1, S("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 1, S("12345"), 4, 1, S("a5bcde"));
+  test(S("abcde"), 1, S("12345"), 4, 2, S("a5bcde"));
+  test(S("abcde"), 1, S("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 1, S("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 1, S("1234567890"), 0, 1, S("a1bcde"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test5()
-{
-    test(S("abcde"), 1, S("1234567890"), 0, 5, S("a12345bcde"));
-    test(S("abcde"), 1, S("1234567890"), 0, 9, S("a123456789bcde"));
-    test(S("abcde"), 1, S("1234567890"), 0, 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, S("1234567890"), 0, 11, S("a1234567890bcde"));
-    test(S("abcde"), 1, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 1, S("1234567890"), 1, 1, S("a2bcde"));
-    test(S("abcde"), 1, S("1234567890"), 1, 4, S("a2345bcde"));
-    test(S("abcde"), 1, S("1234567890"), 1, 8, S("a23456789bcde"));
-    test(S("abcde"), 1, S("1234567890"), 1, 9, S("a234567890bcde"));
-    test(S("abcde"), 1, S("1234567890"), 1, 10, S("a234567890bcde"));
-    test(S("abcde"), 1, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 1, S("1234567890"), 5, 1, S("a6bcde"));
-    test(S("abcde"), 1, S("1234567890"), 5, 2, S("a67bcde"));
-    test(S("abcde"), 1, S("1234567890"), 5, 4, S("a6789bcde"));
-    test(S("abcde"), 1, S("1234567890"), 5, 5, S("a67890bcde"));
-    test(S("abcde"), 1, S("1234567890"), 5, 6, S("a67890bcde"));
-    test(S("abcde"), 1, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 1, S("1234567890"), 9, 1, S("a0bcde"));
-    test(S("abcde"), 1, S("1234567890"), 9, 2, S("a0bcde"));
-    test(S("abcde"), 1, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 1, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 0, 1, S("a1bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 0, 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 0, 19, S("a1234567890123456789bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 0, 20, S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 0, 21, S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 1, 1, S("a2bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 1, 9, S("a234567890bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 1, 18, S("a234567890123456789bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 1, 19, S("a2345678901234567890bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 1, 20, S("a2345678901234567890bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 10, 1, S("a1bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 10, 5, S("a12345bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 10, 9, S("a123456789bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 10, 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 10, 11, S("a1234567890bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 19, 1, S("a0bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 19, 2, S("a0bcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 2, S(""), 0, 0, S("abcde"));
-    test(S("abcde"), 2, S(""), 0, 1, S("abcde"));
-    test(S("abcde"), 2, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 2, S("12345"), 0, 0, S("abcde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test5() {
+  test(S("abcde"), 1, S("1234567890"), 0, 5, S("a12345bcde"));
+  test(S("abcde"), 1, S("1234567890"), 0, 9, S("a123456789bcde"));
+  test(S("abcde"), 1, S("1234567890"), 0, 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, S("1234567890"), 0, 11, S("a1234567890bcde"));
+  test(S("abcde"), 1, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 1, S("1234567890"), 1, 1, S("a2bcde"));
+  test(S("abcde"), 1, S("1234567890"), 1, 4, S("a2345bcde"));
+  test(S("abcde"), 1, S("1234567890"), 1, 8, S("a23456789bcde"));
+  test(S("abcde"), 1, S("1234567890"), 1, 9, S("a234567890bcde"));
+  test(S("abcde"), 1, S("1234567890"), 1, 10, S("a234567890bcde"));
+  test(S("abcde"), 1, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 1, S("1234567890"), 5, 1, S("a6bcde"));
+  test(S("abcde"), 1, S("1234567890"), 5, 2, S("a67bcde"));
+  test(S("abcde"), 1, S("1234567890"), 5, 4, S("a6789bcde"));
+  test(S("abcde"), 1, S("1234567890"), 5, 5, S("a67890bcde"));
+  test(S("abcde"), 1, S("1234567890"), 5, 6, S("a67890bcde"));
+  test(S("abcde"), 1, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 1, S("1234567890"), 9, 1, S("a0bcde"));
+  test(S("abcde"), 1, S("1234567890"), 9, 2, S("a0bcde"));
+  test(S("abcde"), 1, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 1, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 0, 1, S("a1bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 0, 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 0, 19, S("a1234567890123456789bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 0, 20, S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 0, 21, S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 1, 1, S("a2bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 1, 9, S("a234567890bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 1, 18, S("a234567890123456789bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 1, 19, S("a2345678901234567890bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 1, 20, S("a2345678901234567890bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 10, 1, S("a1bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 10, 5, S("a12345bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 10, 9, S("a123456789bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 10, 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 10, 11, S("a1234567890bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 19, 1, S("a0bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 19, 2, S("a0bcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 2, S(""), 0, 0, S("abcde"));
+  test(S("abcde"), 2, S(""), 0, 1, S("abcde"));
+  test(S("abcde"), 2, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 2, S("12345"), 0, 0, S("abcde"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test6()
-{
-    test(S("abcde"), 2, S("12345"), 0, 1, S("ab1cde"));
-    test(S("abcde"), 2, S("12345"), 0, 2, S("ab12cde"));
-    test(S("abcde"), 2, S("12345"), 0, 4, S("ab1234cde"));
-    test(S("abcde"), 2, S("12345"), 0, 5, S("ab12345cde"));
-    test(S("abcde"), 2, S("12345"), 0, 6, S("ab12345cde"));
-    test(S("abcde"), 2, S("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 2, S("12345"), 1, 1, S("ab2cde"));
-    test(S("abcde"), 2, S("12345"), 1, 2, S("ab23cde"));
-    test(S("abcde"), 2, S("12345"), 1, 3, S("ab234cde"));
-    test(S("abcde"), 2, S("12345"), 1, 4, S("ab2345cde"));
-    test(S("abcde"), 2, S("12345"), 1, 5, S("ab2345cde"));
-    test(S("abcde"), 2, S("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 2, S("12345"), 2, 1, S("ab3cde"));
-    test(S("abcde"), 2, S("12345"), 2, 2, S("ab34cde"));
-    test(S("abcde"), 2, S("12345"), 2, 3, S("ab345cde"));
-    test(S("abcde"), 2, S("12345"), 2, 4, S("ab345cde"));
-    test(S("abcde"), 2, S("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 2, S("12345"), 4, 1, S("ab5cde"));
-    test(S("abcde"), 2, S("12345"), 4, 2, S("ab5cde"));
-    test(S("abcde"), 2, S("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 2, S("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 2, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 2, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 2, S("1234567890"), 0, 1, S("ab1cde"));
-    test(S("abcde"), 2, S("1234567890"), 0, 5, S("ab12345cde"));
-    test(S("abcde"), 2, S("1234567890"), 0, 9, S("ab123456789cde"));
-    test(S("abcde"), 2, S("1234567890"), 0, 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, S("1234567890"), 0, 11, S("ab1234567890cde"));
-    test(S("abcde"), 2, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 2, S("1234567890"), 1, 1, S("ab2cde"));
-    test(S("abcde"), 2, S("1234567890"), 1, 4, S("ab2345cde"));
-    test(S("abcde"), 2, S("1234567890"), 1, 8, S("ab23456789cde"));
-    test(S("abcde"), 2, S("1234567890"), 1, 9, S("ab234567890cde"));
-    test(S("abcde"), 2, S("1234567890"), 1, 10, S("ab234567890cde"));
-    test(S("abcde"), 2, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 2, S("1234567890"), 5, 1, S("ab6cde"));
-    test(S("abcde"), 2, S("1234567890"), 5, 2, S("ab67cde"));
-    test(S("abcde"), 2, S("1234567890"), 5, 4, S("ab6789cde"));
-    test(S("abcde"), 2, S("1234567890"), 5, 5, S("ab67890cde"));
-    test(S("abcde"), 2, S("1234567890"), 5, 6, S("ab67890cde"));
-    test(S("abcde"), 2, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 2, S("1234567890"), 9, 1, S("ab0cde"));
-    test(S("abcde"), 2, S("1234567890"), 9, 2, S("ab0cde"));
-    test(S("abcde"), 2, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 2, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 2, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 2, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 0, 1, S("ab1cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 0, 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 0, 19, S("ab1234567890123456789cde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test6() {
+  test(S("abcde"), 2, S("12345"), 0, 1, S("ab1cde"));
+  test(S("abcde"), 2, S("12345"), 0, 2, S("ab12cde"));
+  test(S("abcde"), 2, S("12345"), 0, 4, S("ab1234cde"));
+  test(S("abcde"), 2, S("12345"), 0, 5, S("ab12345cde"));
+  test(S("abcde"), 2, S("12345"), 0, 6, S("ab12345cde"));
+  test(S("abcde"), 2, S("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 2, S("12345"), 1, 1, S("ab2cde"));
+  test(S("abcde"), 2, S("12345"), 1, 2, S("ab23cde"));
+  test(S("abcde"), 2, S("12345"), 1, 3, S("ab234cde"));
+  test(S("abcde"), 2, S("12345"), 1, 4, S("ab2345cde"));
+  test(S("abcde"), 2, S("12345"), 1, 5, S("ab2345cde"));
+  test(S("abcde"), 2, S("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 2, S("12345"), 2, 1, S("ab3cde"));
+  test(S("abcde"), 2, S("12345"), 2, 2, S("ab34cde"));
+  test(S("abcde"), 2, S("12345"), 2, 3, S("ab345cde"));
+  test(S("abcde"), 2, S("12345"), 2, 4, S("ab345cde"));
+  test(S("abcde"), 2, S("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 2, S("12345"), 4, 1, S("ab5cde"));
+  test(S("abcde"), 2, S("12345"), 4, 2, S("ab5cde"));
+  test(S("abcde"), 2, S("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 2, S("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 2, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 2, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 2, S("1234567890"), 0, 1, S("ab1cde"));
+  test(S("abcde"), 2, S("1234567890"), 0, 5, S("ab12345cde"));
+  test(S("abcde"), 2, S("1234567890"), 0, 9, S("ab123456789cde"));
+  test(S("abcde"), 2, S("1234567890"), 0, 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, S("1234567890"), 0, 11, S("ab1234567890cde"));
+  test(S("abcde"), 2, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 2, S("1234567890"), 1, 1, S("ab2cde"));
+  test(S("abcde"), 2, S("1234567890"), 1, 4, S("ab2345cde"));
+  test(S("abcde"), 2, S("1234567890"), 1, 8, S("ab23456789cde"));
+  test(S("abcde"), 2, S("1234567890"), 1, 9, S("ab234567890cde"));
+  test(S("abcde"), 2, S("1234567890"), 1, 10, S("ab234567890cde"));
+  test(S("abcde"), 2, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 2, S("1234567890"), 5, 1, S("ab6cde"));
+  test(S("abcde"), 2, S("1234567890"), 5, 2, S("ab67cde"));
+  test(S("abcde"), 2, S("1234567890"), 5, 4, S("ab6789cde"));
+  test(S("abcde"), 2, S("1234567890"), 5, 5, S("ab67890cde"));
+  test(S("abcde"), 2, S("1234567890"), 5, 6, S("ab67890cde"));
+  test(S("abcde"), 2, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 2, S("1234567890"), 9, 1, S("ab0cde"));
+  test(S("abcde"), 2, S("1234567890"), 9, 2, S("ab0cde"));
+  test(S("abcde"), 2, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 2, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 2, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 2, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 0, 1, S("ab1cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 0, 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 0, 19, S("ab1234567890123456789cde"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test7()
-{
-    test(S("abcde"), 2, S("12345678901234567890"), 0, 20, S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 0, 21, S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 1, 1, S("ab2cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 1, 9, S("ab234567890cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 1, 18, S("ab234567890123456789cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 1, 19, S("ab2345678901234567890cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 1, 20, S("ab2345678901234567890cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 10, 1, S("ab1cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 10, 5, S("ab12345cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 10, 9, S("ab123456789cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 10, 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 10, 11, S("ab1234567890cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 19, 1, S("ab0cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 19, 2, S("ab0cde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 2, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 4, S(""), 0, 0, S("abcde"));
-    test(S("abcde"), 4, S(""), 0, 1, S("abcde"));
-    test(S("abcde"), 4, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 4, S("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 4, S("12345"), 0, 1, S("abcd1e"));
-    test(S("abcde"), 4, S("12345"), 0, 2, S("abcd12e"));
-    test(S("abcde"), 4, S("12345"), 0, 4, S("abcd1234e"));
-    test(S("abcde"), 4, S("12345"), 0, 5, S("abcd12345e"));
-    test(S("abcde"), 4, S("12345"), 0, 6, S("abcd12345e"));
-    test(S("abcde"), 4, S("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 4, S("12345"), 1, 1, S("abcd2e"));
-    test(S("abcde"), 4, S("12345"), 1, 2, S("abcd23e"));
-    test(S("abcde"), 4, S("12345"), 1, 3, S("abcd234e"));
-    test(S("abcde"), 4, S("12345"), 1, 4, S("abcd2345e"));
-    test(S("abcde"), 4, S("12345"), 1, 5, S("abcd2345e"));
-    test(S("abcde"), 4, S("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 4, S("12345"), 2, 1, S("abcd3e"));
-    test(S("abcde"), 4, S("12345"), 2, 2, S("abcd34e"));
-    test(S("abcde"), 4, S("12345"), 2, 3, S("abcd345e"));
-    test(S("abcde"), 4, S("12345"), 2, 4, S("abcd345e"));
-    test(S("abcde"), 4, S("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 4, S("12345"), 4, 1, S("abcd5e"));
-    test(S("abcde"), 4, S("12345"), 4, 2, S("abcd5e"));
-    test(S("abcde"), 4, S("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 4, S("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 4, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 4, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 4, S("1234567890"), 0, 1, S("abcd1e"));
-    test(S("abcde"), 4, S("1234567890"), 0, 5, S("abcd12345e"));
-    test(S("abcde"), 4, S("1234567890"), 0, 9, S("abcd123456789e"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test7() {
+  test(S("abcde"), 2, S("12345678901234567890"), 0, 20, S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 0, 21, S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 1, 1, S("ab2cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 1, 9, S("ab234567890cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 1, 18, S("ab234567890123456789cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 1, 19, S("ab2345678901234567890cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 1, 20, S("ab2345678901234567890cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 10, 1, S("ab1cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 10, 5, S("ab12345cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 10, 9, S("ab123456789cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 10, 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 10, 11, S("ab1234567890cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 19, 1, S("ab0cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 19, 2, S("ab0cde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 2, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 4, S(""), 0, 0, S("abcde"));
+  test(S("abcde"), 4, S(""), 0, 1, S("abcde"));
+  test(S("abcde"), 4, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 4, S("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 4, S("12345"), 0, 1, S("abcd1e"));
+  test(S("abcde"), 4, S("12345"), 0, 2, S("abcd12e"));
+  test(S("abcde"), 4, S("12345"), 0, 4, S("abcd1234e"));
+  test(S("abcde"), 4, S("12345"), 0, 5, S("abcd12345e"));
+  test(S("abcde"), 4, S("12345"), 0, 6, S("abcd12345e"));
+  test(S("abcde"), 4, S("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 4, S("12345"), 1, 1, S("abcd2e"));
+  test(S("abcde"), 4, S("12345"), 1, 2, S("abcd23e"));
+  test(S("abcde"), 4, S("12345"), 1, 3, S("abcd234e"));
+  test(S("abcde"), 4, S("12345"), 1, 4, S("abcd2345e"));
+  test(S("abcde"), 4, S("12345"), 1, 5, S("abcd2345e"));
+  test(S("abcde"), 4, S("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 4, S("12345"), 2, 1, S("abcd3e"));
+  test(S("abcde"), 4, S("12345"), 2, 2, S("abcd34e"));
+  test(S("abcde"), 4, S("12345"), 2, 3, S("abcd345e"));
+  test(S("abcde"), 4, S("12345"), 2, 4, S("abcd345e"));
+  test(S("abcde"), 4, S("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 4, S("12345"), 4, 1, S("abcd5e"));
+  test(S("abcde"), 4, S("12345"), 4, 2, S("abcd5e"));
+  test(S("abcde"), 4, S("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 4, S("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 4, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 4, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 4, S("1234567890"), 0, 1, S("abcd1e"));
+  test(S("abcde"), 4, S("1234567890"), 0, 5, S("abcd12345e"));
+  test(S("abcde"), 4, S("1234567890"), 0, 9, S("abcd123456789e"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test8()
-{
-    test(S("abcde"), 4, S("1234567890"), 0, 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, S("1234567890"), 0, 11, S("abcd1234567890e"));
-    test(S("abcde"), 4, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 4, S("1234567890"), 1, 1, S("abcd2e"));
-    test(S("abcde"), 4, S("1234567890"), 1, 4, S("abcd2345e"));
-    test(S("abcde"), 4, S("1234567890"), 1, 8, S("abcd23456789e"));
-    test(S("abcde"), 4, S("1234567890"), 1, 9, S("abcd234567890e"));
-    test(S("abcde"), 4, S("1234567890"), 1, 10, S("abcd234567890e"));
-    test(S("abcde"), 4, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 4, S("1234567890"), 5, 1, S("abcd6e"));
-    test(S("abcde"), 4, S("1234567890"), 5, 2, S("abcd67e"));
-    test(S("abcde"), 4, S("1234567890"), 5, 4, S("abcd6789e"));
-    test(S("abcde"), 4, S("1234567890"), 5, 5, S("abcd67890e"));
-    test(S("abcde"), 4, S("1234567890"), 5, 6, S("abcd67890e"));
-    test(S("abcde"), 4, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 4, S("1234567890"), 9, 1, S("abcd0e"));
-    test(S("abcde"), 4, S("1234567890"), 9, 2, S("abcd0e"));
-    test(S("abcde"), 4, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 4, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 4, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 4, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 4, S("12345678901234567890"), 0, 1, S("abcd1e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 0, 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 0, 19, S("abcd1234567890123456789e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 0, 20, S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 0, 21, S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 4, S("12345678901234567890"), 1, 1, S("abcd2e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 1, 9, S("abcd234567890e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 1, 18, S("abcd234567890123456789e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 1, 19, S("abcd2345678901234567890e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 1, 20, S("abcd2345678901234567890e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 4, S("12345678901234567890"), 10, 1, S("abcd1e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 10, 5, S("abcd12345e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 10, 9, S("abcd123456789e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 10, 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 10, 11, S("abcd1234567890e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 4, S("12345678901234567890"), 19, 1, S("abcd0e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 19, 2, S("abcd0e"));
-    test(S("abcde"), 4, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 4, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 4, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 5, S(""), 0, 0, S("abcde"));
-    test(S("abcde"), 5, S(""), 0, 1, S("abcde"));
-    test(S("abcde"), 5, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 5, S("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, S("12345"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, S("12345"), 0, 2, S("abcde12"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test8() {
+  test(S("abcde"), 4, S("1234567890"), 0, 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, S("1234567890"), 0, 11, S("abcd1234567890e"));
+  test(S("abcde"), 4, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 4, S("1234567890"), 1, 1, S("abcd2e"));
+  test(S("abcde"), 4, S("1234567890"), 1, 4, S("abcd2345e"));
+  test(S("abcde"), 4, S("1234567890"), 1, 8, S("abcd23456789e"));
+  test(S("abcde"), 4, S("1234567890"), 1, 9, S("abcd234567890e"));
+  test(S("abcde"), 4, S("1234567890"), 1, 10, S("abcd234567890e"));
+  test(S("abcde"), 4, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 4, S("1234567890"), 5, 1, S("abcd6e"));
+  test(S("abcde"), 4, S("1234567890"), 5, 2, S("abcd67e"));
+  test(S("abcde"), 4, S("1234567890"), 5, 4, S("abcd6789e"));
+  test(S("abcde"), 4, S("1234567890"), 5, 5, S("abcd67890e"));
+  test(S("abcde"), 4, S("1234567890"), 5, 6, S("abcd67890e"));
+  test(S("abcde"), 4, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 4, S("1234567890"), 9, 1, S("abcd0e"));
+  test(S("abcde"), 4, S("1234567890"), 9, 2, S("abcd0e"));
+  test(S("abcde"), 4, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 4, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 4, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 4, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 4, S("12345678901234567890"), 0, 1, S("abcd1e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 0, 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 0, 19, S("abcd1234567890123456789e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 0, 20, S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 0, 21, S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 4, S("12345678901234567890"), 1, 1, S("abcd2e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 1, 9, S("abcd234567890e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 1, 18, S("abcd234567890123456789e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 1, 19, S("abcd2345678901234567890e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 1, 20, S("abcd2345678901234567890e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 4, S("12345678901234567890"), 10, 1, S("abcd1e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 10, 5, S("abcd12345e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 10, 9, S("abcd123456789e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 10, 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 10, 11, S("abcd1234567890e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 4, S("12345678901234567890"), 19, 1, S("abcd0e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 19, 2, S("abcd0e"));
+  test(S("abcde"), 4, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 4, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 4, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 5, S(""), 0, 0, S("abcde"));
+  test(S("abcde"), 5, S(""), 0, 1, S("abcde"));
+  test(S("abcde"), 5, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 5, S("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, S("12345"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, S("12345"), 0, 2, S("abcde12"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test9()
-{
-    test(S("abcde"), 5, S("12345"), 0, 4, S("abcde1234"));
-    test(S("abcde"), 5, S("12345"), 0, 5, S("abcde12345"));
-    test(S("abcde"), 5, S("12345"), 0, 6, S("abcde12345"));
-    test(S("abcde"), 5, S("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, S("12345"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, S("12345"), 1, 2, S("abcde23"));
-    test(S("abcde"), 5, S("12345"), 1, 3, S("abcde234"));
-    test(S("abcde"), 5, S("12345"), 1, 4, S("abcde2345"));
-    test(S("abcde"), 5, S("12345"), 1, 5, S("abcde2345"));
-    test(S("abcde"), 5, S("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 5, S("12345"), 2, 1, S("abcde3"));
-    test(S("abcde"), 5, S("12345"), 2, 2, S("abcde34"));
-    test(S("abcde"), 5, S("12345"), 2, 3, S("abcde345"));
-    test(S("abcde"), 5, S("12345"), 2, 4, S("abcde345"));
-    test(S("abcde"), 5, S("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 5, S("12345"), 4, 1, S("abcde5"));
-    test(S("abcde"), 5, S("12345"), 4, 2, S("abcde5"));
-    test(S("abcde"), 5, S("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 5, S("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 5, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 5, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, S("1234567890"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, S("1234567890"), 0, 5, S("abcde12345"));
-    test(S("abcde"), 5, S("1234567890"), 0, 9, S("abcde123456789"));
-    test(S("abcde"), 5, S("1234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, S("1234567890"), 0, 11, S("abcde1234567890"));
-    test(S("abcde"), 5, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, S("1234567890"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, S("1234567890"), 1, 4, S("abcde2345"));
-    test(S("abcde"), 5, S("1234567890"), 1, 8, S("abcde23456789"));
-    test(S("abcde"), 5, S("1234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcde"), 5, S("1234567890"), 1, 10, S("abcde234567890"));
-    test(S("abcde"), 5, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 5, S("1234567890"), 5, 1, S("abcde6"));
-    test(S("abcde"), 5, S("1234567890"), 5, 2, S("abcde67"));
-    test(S("abcde"), 5, S("1234567890"), 5, 4, S("abcde6789"));
-    test(S("abcde"), 5, S("1234567890"), 5, 5, S("abcde67890"));
-    test(S("abcde"), 5, S("1234567890"), 5, 6, S("abcde67890"));
-    test(S("abcde"), 5, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 5, S("1234567890"), 9, 1, S("abcde0"));
-    test(S("abcde"), 5, S("1234567890"), 9, 2, S("abcde0"));
-    test(S("abcde"), 5, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 5, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 5, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 5, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, S("12345678901234567890"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, S("12345678901234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
-    test(S("abcde"), 5, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
-    test(S("abcde"), 5, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test9() {
+  test(S("abcde"), 5, S("12345"), 0, 4, S("abcde1234"));
+  test(S("abcde"), 5, S("12345"), 0, 5, S("abcde12345"));
+  test(S("abcde"), 5, S("12345"), 0, 6, S("abcde12345"));
+  test(S("abcde"), 5, S("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, S("12345"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, S("12345"), 1, 2, S("abcde23"));
+  test(S("abcde"), 5, S("12345"), 1, 3, S("abcde234"));
+  test(S("abcde"), 5, S("12345"), 1, 4, S("abcde2345"));
+  test(S("abcde"), 5, S("12345"), 1, 5, S("abcde2345"));
+  test(S("abcde"), 5, S("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 5, S("12345"), 2, 1, S("abcde3"));
+  test(S("abcde"), 5, S("12345"), 2, 2, S("abcde34"));
+  test(S("abcde"), 5, S("12345"), 2, 3, S("abcde345"));
+  test(S("abcde"), 5, S("12345"), 2, 4, S("abcde345"));
+  test(S("abcde"), 5, S("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 5, S("12345"), 4, 1, S("abcde5"));
+  test(S("abcde"), 5, S("12345"), 4, 2, S("abcde5"));
+  test(S("abcde"), 5, S("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 5, S("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 5, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 5, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, S("1234567890"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, S("1234567890"), 0, 5, S("abcde12345"));
+  test(S("abcde"), 5, S("1234567890"), 0, 9, S("abcde123456789"));
+  test(S("abcde"), 5, S("1234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, S("1234567890"), 0, 11, S("abcde1234567890"));
+  test(S("abcde"), 5, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, S("1234567890"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, S("1234567890"), 1, 4, S("abcde2345"));
+  test(S("abcde"), 5, S("1234567890"), 1, 8, S("abcde23456789"));
+  test(S("abcde"), 5, S("1234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcde"), 5, S("1234567890"), 1, 10, S("abcde234567890"));
+  test(S("abcde"), 5, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 5, S("1234567890"), 5, 1, S("abcde6"));
+  test(S("abcde"), 5, S("1234567890"), 5, 2, S("abcde67"));
+  test(S("abcde"), 5, S("1234567890"), 5, 4, S("abcde6789"));
+  test(S("abcde"), 5, S("1234567890"), 5, 5, S("abcde67890"));
+  test(S("abcde"), 5, S("1234567890"), 5, 6, S("abcde67890"));
+  test(S("abcde"), 5, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 5, S("1234567890"), 9, 1, S("abcde0"));
+  test(S("abcde"), 5, S("1234567890"), 9, 2, S("abcde0"));
+  test(S("abcde"), 5, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 5, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 5, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 5, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, S("12345678901234567890"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, S("12345678901234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
+  test(S("abcde"), 5, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
+  test(S("abcde"), 5, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test10()
-{
-    test(S("abcde"), 5, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, S("12345678901234567890"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, S("12345678901234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcde"), 5, S("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
-    test(S("abcde"), 5, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
-    test(S("abcde"), 5, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
-    test(S("abcde"), 5, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 5, S("12345678901234567890"), 10, 1, S("abcde1"));
-    test(S("abcde"), 5, S("12345678901234567890"), 10, 5, S("abcde12345"));
-    test(S("abcde"), 5, S("12345678901234567890"), 10, 9, S("abcde123456789"));
-    test(S("abcde"), 5, S("12345678901234567890"), 10, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, S("12345678901234567890"), 10, 11, S("abcde1234567890"));
-    test(S("abcde"), 5, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 5, S("12345678901234567890"), 19, 1, S("abcde0"));
-    test(S("abcde"), 5, S("12345678901234567890"), 19, 2, S("abcde0"));
-    test(S("abcde"), 5, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 5, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 5, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 6, S(""), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, S(""), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 0, 2, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 0, 4, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 0, 5, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 0, 6, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 1, 1, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 1, 2, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 1, 3, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 1, 4, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 1, 5, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 2, 0, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 2, 1, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 2, 2, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 2, 3, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 2, 4, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 4, 0, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 4, 1, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 4, 2, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 5, 0, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 5, 1, S("can't happen"));
-    test(S("abcde"), 6, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 0, 5, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 0, 9, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 0, 10, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 0, 11, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test10() {
+  test(S("abcde"), 5, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, S("12345678901234567890"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, S("12345678901234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcde"), 5, S("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
+  test(S("abcde"), 5, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
+  test(S("abcde"), 5, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
+  test(S("abcde"), 5, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 5, S("12345678901234567890"), 10, 1, S("abcde1"));
+  test(S("abcde"), 5, S("12345678901234567890"), 10, 5, S("abcde12345"));
+  test(S("abcde"), 5, S("12345678901234567890"), 10, 9, S("abcde123456789"));
+  test(S("abcde"), 5, S("12345678901234567890"), 10, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, S("12345678901234567890"), 10, 11, S("abcde1234567890"));
+  test(S("abcde"), 5, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 5, S("12345678901234567890"), 19, 1, S("abcde0"));
+  test(S("abcde"), 5, S("12345678901234567890"), 19, 2, S("abcde0"));
+  test(S("abcde"), 5, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 5, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 5, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 6, S(""), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, S(""), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 0, 2, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 0, 4, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 0, 5, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 0, 6, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 1, 1, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 1, 2, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 1, 3, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 1, 4, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 1, 5, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 2, 0, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 2, 1, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 2, 2, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 2, 3, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 2, 4, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 4, 0, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 4, 1, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 4, 2, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 5, 0, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 5, 1, S("can't happen"));
+  test(S("abcde"), 6, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 0, 5, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 0, 9, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 0, 10, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 0, 11, S("can't happen"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test11()
-{
-    test(S("abcde"), 6, S("1234567890"), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 1, 1, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 1, 4, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 1, 8, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 1, 9, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 1, 10, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 5, 0, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 5, 1, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 5, 2, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 5, 4, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 5, 5, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 5, 6, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 9, 0, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 9, 1, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 9, 2, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 10, 0, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 10, 1, S("can't happen"));
-    test(S("abcde"), 6, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S("abcde"), 6, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 0, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 0, 2, S("12abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 0, 4, S("1234abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 0, 5, S("12345abcdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test11() {
+  test(S("abcde"), 6, S("1234567890"), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 1, 1, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 1, 4, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 1, 8, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 1, 9, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 1, 10, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 5, 0, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 5, 1, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 5, 2, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 5, 4, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 5, 5, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 5, 6, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 9, 0, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 9, 1, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 9, 2, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 10, 0, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 10, 1, S("can't happen"));
+  test(S("abcde"), 6, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S("abcde"), 6, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 0, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 0, 2, S("12abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 0, 4, S("1234abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 0, 5, S("12345abcdefghij"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test12()
-{
-    test(S("abcdefghij"), 0, S("12345"), 0, 6, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 1, 1, S("2abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 1, 2, S("23abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 1, 3, S("234abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 1, 4, S("2345abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 1, 5, S("2345abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 2, 1, S("3abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 2, 2, S("34abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 2, 3, S("345abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 2, 4, S("345abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 4, 1, S("5abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 4, 2, S("5abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 0, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 0, 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 0, 9, S("123456789abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 0, 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 0, 11, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 1, 1, S("2abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 1, 4, S("2345abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 1, 8, S("23456789abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 1, 9, S("234567890abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 1, 10, S("234567890abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 5, 1, S("6abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 5, 2, S("67abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 5, 4, S("6789abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 5, 5, S("67890abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 5, 6, S("67890abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 9, 1, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 9, 2, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 0, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 0, 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 1, 1, S("2abcdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test12() {
+  test(S("abcdefghij"), 0, S("12345"), 0, 6, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 1, 1, S("2abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 1, 2, S("23abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 1, 3, S("234abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 1, 4, S("2345abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 1, 5, S("2345abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 2, 1, S("3abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 2, 2, S("34abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 2, 3, S("345abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 2, 4, S("345abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 4, 1, S("5abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 4, 2, S("5abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 0, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 0, 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 0, 9, S("123456789abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 0, 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 0, 11, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 1, 1, S("2abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 1, 4, S("2345abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 1, 8, S("23456789abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 1, 9, S("234567890abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 1, 10, S("234567890abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 5, 1, S("6abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 5, 2, S("67abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 5, 4, S("6789abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 5, 5, S("67890abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 5, 6, S("67890abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 9, 1, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 9, 2, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 0, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 0, 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 1, 1, S("2abcdefghij"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test13()
-{
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 1, 9, S("234567890abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 1, 18, S("234567890123456789abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 10, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 10, 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 10, 9, S("123456789abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 10, 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 10, 11, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 19, 1, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 19, 2, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 0, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 0, 2, S("a12bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 0, 4, S("a1234bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 0, 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 0, 6, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 1, 1, S("a2bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 1, 2, S("a23bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 1, 3, S("a234bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 1, 4, S("a2345bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 1, 5, S("a2345bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 2, 1, S("a3bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 2, 2, S("a34bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 2, 3, S("a345bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 2, 4, S("a345bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 4, 1, S("a5bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 4, 2, S("a5bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 0, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 0, 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 0, 9, S("a123456789bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 0, 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 0, 11, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 1, 1, S("a2bcdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test13() {
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 1, 9, S("234567890abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 1, 18, S("234567890123456789abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 10, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 10, 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 10, 9, S("123456789abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 10, 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 10, 11, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 19, 1, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 19, 2, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 0, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 0, 2, S("a12bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 0, 4, S("a1234bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 0, 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 0, 6, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 1, 1, S("a2bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 1, 2, S("a23bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 1, 3, S("a234bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 1, 4, S("a2345bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 1, 5, S("a2345bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 2, 1, S("a3bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 2, 2, S("a34bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 2, 3, S("a345bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 2, 4, S("a345bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 4, 1, S("a5bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 4, 2, S("a5bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 0, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 0, 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 0, 9, S("a123456789bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 0, 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 0, 11, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 1, 1, S("a2bcdefghij"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test14()
-{
-    test(S("abcdefghij"), 1, S("1234567890"), 1, 4, S("a2345bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 1, 8, S("a23456789bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 1, 9, S("a234567890bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 1, 10, S("a234567890bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 5, 1, S("a6bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 5, 2, S("a67bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 5, 4, S("a6789bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 5, 5, S("a67890bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 5, 6, S("a67890bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 9, 1, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 9, 2, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 0, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 0, 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 1, 1, S("a2bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 1, 9, S("a234567890bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 10, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 10, 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 10, 9, S("a123456789bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 10, 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 10, 11, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 19, 1, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 19, 2, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("12345"), 0, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 0, 2, S("abcde12fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 0, 4, S("abcde1234fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 0, 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 0, 6, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 1, 0, S("abcdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test14() {
+  test(S("abcdefghij"), 1, S("1234567890"), 1, 4, S("a2345bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 1, 8, S("a23456789bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 1, 9, S("a234567890bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 1, 10, S("a234567890bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 5, 1, S("a6bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 5, 2, S("a67bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 5, 4, S("a6789bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 5, 5, S("a67890bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 5, 6, S("a67890bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 9, 1, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 9, 2, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 0, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 0, 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 1, 1, S("a2bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 1, 9, S("a234567890bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 10, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 10, 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 10, 9, S("a123456789bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 10, 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 10, 11, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 19, 1, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 19, 2, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("12345"), 0, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 0, 2, S("abcde12fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 0, 4, S("abcde1234fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 0, 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 0, 6, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 1, 0, S("abcdefghij"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test15()
-{
-    test(S("abcdefghij"), 5, S("12345"), 1, 1, S("abcde2fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 1, 2, S("abcde23fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 1, 3, S("abcde234fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 1, 4, S("abcde2345fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 1, 5, S("abcde2345fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("12345"), 2, 1, S("abcde3fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 2, 2, S("abcde34fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 2, 3, S("abcde345fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 2, 4, S("abcde345fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("12345"), 4, 1, S("abcde5fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 4, 2, S("abcde5fghij"));
-    test(S("abcdefghij"), 5, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 0, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 0, 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 0, 9, S("abcde123456789fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 0, 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 0, 11, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 1, 1, S("abcde2fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 1, 4, S("abcde2345fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 1, 8, S("abcde23456789fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 1, 9, S("abcde234567890fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 1, 10, S("abcde234567890fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 5, 1, S("abcde6fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 5, 2, S("abcde67fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 5, 4, S("abcde6789fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 5, 5, S("abcde67890fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 5, 6, S("abcde67890fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 9, 1, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 9, 2, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 0, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 0, 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 1, 1, S("abcde2fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 1, 9, S("abcde234567890fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 1, 18, S("abcde234567890123456789fghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test15() {
+  test(S("abcdefghij"), 5, S("12345"), 1, 1, S("abcde2fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 1, 2, S("abcde23fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 1, 3, S("abcde234fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 1, 4, S("abcde2345fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 1, 5, S("abcde2345fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("12345"), 2, 1, S("abcde3fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 2, 2, S("abcde34fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 2, 3, S("abcde345fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 2, 4, S("abcde345fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("12345"), 4, 1, S("abcde5fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 4, 2, S("abcde5fghij"));
+  test(S("abcdefghij"), 5, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 0, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 0, 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 0, 9, S("abcde123456789fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 0, 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 0, 11, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 1, 1, S("abcde2fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 1, 4, S("abcde2345fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 1, 8, S("abcde23456789fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 1, 9, S("abcde234567890fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 1, 10, S("abcde234567890fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 5, 1, S("abcde6fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 5, 2, S("abcde67fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 5, 4, S("abcde6789fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 5, 5, S("abcde67890fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 5, 6, S("abcde67890fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 9, 1, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 9, 2, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 0, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 0, 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 1, 1, S("abcde2fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 1, 9, S("abcde234567890fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 1, 18, S("abcde234567890123456789fghij"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test16()
-{
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 10, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 10, 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 10, 9, S("abcde123456789fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 10, 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 10, 11, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 19, 1, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 19, 2, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("12345"), 0, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, S("12345"), 0, 2, S("abcdefghi12j"));
-    test(S("abcdefghij"), 9, S("12345"), 0, 4, S("abcdefghi1234j"));
-    test(S("abcdefghij"), 9, S("12345"), 0, 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, S("12345"), 0, 6, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, S("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("12345"), 1, 1, S("abcdefghi2j"));
-    test(S("abcdefghij"), 9, S("12345"), 1, 2, S("abcdefghi23j"));
-    test(S("abcdefghij"), 9, S("12345"), 1, 3, S("abcdefghi234j"));
-    test(S("abcdefghij"), 9, S("12345"), 1, 4, S("abcdefghi2345j"));
-    test(S("abcdefghij"), 9, S("12345"), 1, 5, S("abcdefghi2345j"));
-    test(S("abcdefghij"), 9, S("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("12345"), 2, 1, S("abcdefghi3j"));
-    test(S("abcdefghij"), 9, S("12345"), 2, 2, S("abcdefghi34j"));
-    test(S("abcdefghij"), 9, S("12345"), 2, 3, S("abcdefghi345j"));
-    test(S("abcdefghij"), 9, S("12345"), 2, 4, S("abcdefghi345j"));
-    test(S("abcdefghij"), 9, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("12345"), 4, 1, S("abcdefghi5j"));
-    test(S("abcdefghij"), 9, S("12345"), 4, 2, S("abcdefghi5j"));
-    test(S("abcdefghij"), 9, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("1234567890"), 0, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 0, 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 0, 9, S("abcdefghi123456789j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 0, 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 0, 11, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("1234567890"), 1, 1, S("abcdefghi2j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 1, 4, S("abcdefghi2345j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 1, 8, S("abcdefghi23456789j"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test16() {
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 10, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 10, 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 10, 9, S("abcde123456789fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 10, 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 10, 11, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 19, 1, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 19, 2, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("12345"), 0, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, S("12345"), 0, 2, S("abcdefghi12j"));
+  test(S("abcdefghij"), 9, S("12345"), 0, 4, S("abcdefghi1234j"));
+  test(S("abcdefghij"), 9, S("12345"), 0, 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, S("12345"), 0, 6, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, S("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("12345"), 1, 1, S("abcdefghi2j"));
+  test(S("abcdefghij"), 9, S("12345"), 1, 2, S("abcdefghi23j"));
+  test(S("abcdefghij"), 9, S("12345"), 1, 3, S("abcdefghi234j"));
+  test(S("abcdefghij"), 9, S("12345"), 1, 4, S("abcdefghi2345j"));
+  test(S("abcdefghij"), 9, S("12345"), 1, 5, S("abcdefghi2345j"));
+  test(S("abcdefghij"), 9, S("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("12345"), 2, 1, S("abcdefghi3j"));
+  test(S("abcdefghij"), 9, S("12345"), 2, 2, S("abcdefghi34j"));
+  test(S("abcdefghij"), 9, S("12345"), 2, 3, S("abcdefghi345j"));
+  test(S("abcdefghij"), 9, S("12345"), 2, 4, S("abcdefghi345j"));
+  test(S("abcdefghij"), 9, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("12345"), 4, 1, S("abcdefghi5j"));
+  test(S("abcdefghij"), 9, S("12345"), 4, 2, S("abcdefghi5j"));
+  test(S("abcdefghij"), 9, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("1234567890"), 0, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 0, 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 0, 9, S("abcdefghi123456789j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 0, 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 0, 11, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("1234567890"), 1, 1, S("abcdefghi2j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 1, 4, S("abcdefghi2345j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 1, 8, S("abcdefghi23456789j"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test17()
-{
-    test(S("abcdefghij"), 9, S("1234567890"), 1, 9, S("abcdefghi234567890j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 1, 10, S("abcdefghi234567890j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("1234567890"), 5, 1, S("abcdefghi6j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 5, 2, S("abcdefghi67j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 5, 4, S("abcdefghi6789j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 5, 5, S("abcdefghi67890j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 5, 6, S("abcdefghi67890j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("1234567890"), 9, 1, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 9, 2, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, S("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 0, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 0, 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 1, 1, S("abcdefghi2j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 1, 9, S("abcdefghi234567890j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 10, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 10, 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 10, 9, S("abcdefghi123456789j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 10, 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 10, 11, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 19, 1, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 19, 2, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("12345"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, S("12345"), 0, 2, S("abcdefghij12"));
-    test(S("abcdefghij"), 10, S("12345"), 0, 4, S("abcdefghij1234"));
-    test(S("abcdefghij"), 10, S("12345"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, S("12345"), 0, 6, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, S("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("12345"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, S("12345"), 1, 2, S("abcdefghij23"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test17() {
+  test(S("abcdefghij"), 9, S("1234567890"), 1, 9, S("abcdefghi234567890j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 1, 10, S("abcdefghi234567890j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("1234567890"), 5, 1, S("abcdefghi6j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 5, 2, S("abcdefghi67j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 5, 4, S("abcdefghi6789j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 5, 5, S("abcdefghi67890j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 5, 6, S("abcdefghi67890j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("1234567890"), 9, 1, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 9, 2, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, S("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 0, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 0, 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 1, 1, S("abcdefghi2j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 1, 9, S("abcdefghi234567890j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 10, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 10, 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 10, 9, S("abcdefghi123456789j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 10, 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 10, 11, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 19, 1, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 19, 2, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("12345"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, S("12345"), 0, 2, S("abcdefghij12"));
+  test(S("abcdefghij"), 10, S("12345"), 0, 4, S("abcdefghij1234"));
+  test(S("abcdefghij"), 10, S("12345"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, S("12345"), 0, 6, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, S("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("12345"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, S("12345"), 1, 2, S("abcdefghij23"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test18()
-{
-    test(S("abcdefghij"), 10, S("12345"), 1, 3, S("abcdefghij234"));
-    test(S("abcdefghij"), 10, S("12345"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, S("12345"), 1, 5, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, S("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("12345"), 2, 1, S("abcdefghij3"));
-    test(S("abcdefghij"), 10, S("12345"), 2, 2, S("abcdefghij34"));
-    test(S("abcdefghij"), 10, S("12345"), 2, 3, S("abcdefghij345"));
-    test(S("abcdefghij"), 10, S("12345"), 2, 4, S("abcdefghij345"));
-    test(S("abcdefghij"), 10, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("12345"), 4, 1, S("abcdefghij5"));
-    test(S("abcdefghij"), 10, S("12345"), 4, 2, S("abcdefghij5"));
-    test(S("abcdefghij"), 10, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("1234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, S("1234567890"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, S("1234567890"), 0, 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, S("1234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, S("1234567890"), 0, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("1234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, S("1234567890"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, S("1234567890"), 1, 8, S("abcdefghij23456789"));
-    test(S("abcdefghij"), 10, S("1234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, S("1234567890"), 1, 10, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("1234567890"), 5, 1, S("abcdefghij6"));
-    test(S("abcdefghij"), 10, S("1234567890"), 5, 2, S("abcdefghij67"));
-    test(S("abcdefghij"), 10, S("1234567890"), 5, 4, S("abcdefghij6789"));
-    test(S("abcdefghij"), 10, S("1234567890"), 5, 5, S("abcdefghij67890"));
-    test(S("abcdefghij"), 10, S("1234567890"), 5, 6, S("abcdefghij67890"));
-    test(S("abcdefghij"), 10, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("1234567890"), 9, 1, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, S("1234567890"), 9, 2, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, S("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test18() {
+  test(S("abcdefghij"), 10, S("12345"), 1, 3, S("abcdefghij234"));
+  test(S("abcdefghij"), 10, S("12345"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, S("12345"), 1, 5, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, S("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("12345"), 2, 1, S("abcdefghij3"));
+  test(S("abcdefghij"), 10, S("12345"), 2, 2, S("abcdefghij34"));
+  test(S("abcdefghij"), 10, S("12345"), 2, 3, S("abcdefghij345"));
+  test(S("abcdefghij"), 10, S("12345"), 2, 4, S("abcdefghij345"));
+  test(S("abcdefghij"), 10, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("12345"), 4, 1, S("abcdefghij5"));
+  test(S("abcdefghij"), 10, S("12345"), 4, 2, S("abcdefghij5"));
+  test(S("abcdefghij"), 10, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("1234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, S("1234567890"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, S("1234567890"), 0, 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, S("1234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, S("1234567890"), 0, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("1234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, S("1234567890"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, S("1234567890"), 1, 8, S("abcdefghij23456789"));
+  test(S("abcdefghij"), 10, S("1234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, S("1234567890"), 1, 10, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("1234567890"), 5, 1, S("abcdefghij6"));
+  test(S("abcdefghij"), 10, S("1234567890"), 5, 2, S("abcdefghij67"));
+  test(S("abcdefghij"), 10, S("1234567890"), 5, 4, S("abcdefghij6789"));
+  test(S("abcdefghij"), 10, S("1234567890"), 5, 5, S("abcdefghij67890"));
+  test(S("abcdefghij"), 10, S("1234567890"), 5, 6, S("abcdefghij67890"));
+  test(S("abcdefghij"), 10, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("1234567890"), 9, 1, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, S("1234567890"), 9, 2, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, S("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test19()
-{
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 10, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 10, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 19, 1, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 19, 2, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S(""), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S(""), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 0, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 0, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 0, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 0, 6, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 1, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 1, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 1, 3, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 1, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 1, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 2, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 2, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 2, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 2, 3, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 2, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 4, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 4, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 4, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 5, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 5, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 0, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 0, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 0, 11, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 1, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 1, 8, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 1, 10, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test19() {
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 10, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 10, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 19, 1, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 19, 2, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S(""), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S(""), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 0, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 0, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 0, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 0, 6, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 1, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 1, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 1, 3, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 1, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 1, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 2, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 2, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 2, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 2, 3, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 2, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 4, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 4, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 4, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 5, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 5, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 0, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 0, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 0, 11, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 1, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 1, 8, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 1, 10, S("can't happen"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test20()
-{
-    test(S("abcdefghij"), 11, S("1234567890"), 5, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 5, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 5, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 5, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 5, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 5, 6, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 9, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 9, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 9, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, S(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 0, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 0, 2, S("12abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 0, 4, S("1234abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 0, 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 0, 6, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 1, 1, S("2abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 1, 2, S("23abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 1, 3, S("234abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 1, 4, S("2345abcdefghijklmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test20() {
+  test(S("abcdefghij"), 11, S("1234567890"), 5, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 5, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 5, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 5, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 5, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 5, 6, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 9, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 9, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 9, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, S(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 0, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 0, 2, S("12abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 0, 4, S("1234abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 0, 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 0, 6, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 1, 1, S("2abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 1, 2, S("23abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 1, 3, S("234abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 1, 4, S("2345abcdefghijklmnopqrst"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test21()
-{
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 1, 5, S("2345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 2, 1, S("3abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 2, 2, S("34abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 2, 3, S("345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 2, 4, S("345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 4, 1, S("5abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 4, 2, S("5abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 0, 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 0, 9, S("123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 0, 11, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 1, 4, S("2345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 1, 8, S("23456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 1, 10, S("234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 5, 1, S("6abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 5, 2, S("67abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 5, 4, S("6789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 5, 5, S("67890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 5, 6, S("67890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 9, 1, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 9, 2, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 1, 18, S("234567890123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 10, 1, S("1abcdefghijklmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test21() {
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 1, 5, S("2345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 2, 1, S("3abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 2, 2, S("34abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 2, 3, S("345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 2, 4, S("345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 4, 1, S("5abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 4, 2, S("5abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 0, 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 0, 9, S("123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 0, 11, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 1, 4, S("2345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 1, 8, S("23456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 1, 10, S("234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 5, 1, S("6abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 5, 2, S("67abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 5, 4, S("6789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 5, 5, S("67890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 5, 6, S("67890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 9, 1, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 9, 2, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 1, 18, S("234567890123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 10, 1, S("1abcdefghijklmnopqrst"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test22()
-{
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 10, 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 10, 9, S("123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 10, 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 10, 11, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 19, 1, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 19, 2, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, S(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 0, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 0, 2, S("a12bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 0, 4, S("a1234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 0, 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 0, 6, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 1, 1, S("a2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 1, 2, S("a23bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 1, 3, S("a234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 1, 4, S("a2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 1, 5, S("a2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 2, 1, S("a3bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 2, 2, S("a34bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 2, 3, S("a345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 2, 4, S("a345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 4, 1, S("a5bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 4, 2, S("a5bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 0, 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 0, 9, S("a123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 0, 11, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 1, 4, S("a2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 1, 8, S("a23456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 1, 10, S("a234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 5, 1, S("a6bcdefghijklmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test22() {
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 10, 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 10, 9, S("123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 10, 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 10, 11, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 19, 1, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 19, 2, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, S(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 0, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 0, 2, S("a12bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 0, 4, S("a1234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 0, 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 0, 6, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 1, 1, S("a2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 1, 2, S("a23bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 1, 3, S("a234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 1, 4, S("a2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 1, 5, S("a2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 2, 1, S("a3bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 2, 2, S("a34bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 2, 3, S("a345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 2, 4, S("a345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 4, 1, S("a5bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 4, 2, S("a5bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 0, 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 0, 9, S("a123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 0, 11, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 1, 4, S("a2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 1, 8, S("a23456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 1, 10, S("a234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 5, 1, S("a6bcdefghijklmnopqrst"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test23()
-{
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 5, 2, S("a67bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 5, 4, S("a6789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 5, 5, S("a67890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 5, 6, S("a67890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 9, 1, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 9, 2, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 10, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 10, 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 10, 9, S("a123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 10, 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 10, 11, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 19, 1, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 19, 2, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, S(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, 2, S("abcdefghij12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, 4, S("abcdefghij1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, 6, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, 1, S("abcdefghij2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, 2, S("abcdefghij23klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, 3, S("abcdefghij234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, 4, S("abcdefghij2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, 5, S("abcdefghij2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test23() {
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 5, 2, S("a67bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 5, 4, S("a6789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 5, 5, S("a67890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 5, 6, S("a67890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 9, 1, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 9, 2, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 10, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 10, 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 10, 9, S("a123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 10, 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 10, 11, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 19, 1, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 19, 2, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, S(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, 2, S("abcdefghij12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, 4, S("abcdefghij1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, 6, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, 1, S("abcdefghij2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, 2, S("abcdefghij23klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, 3, S("abcdefghij234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, 4, S("abcdefghij2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, 5, S("abcdefghij2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test24()
-{
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 2, 1, S("abcdefghij3klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 2, 2, S("abcdefghij34klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 2, 3, S("abcdefghij345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 2, 4, S("abcdefghij345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 4, 1, S("abcdefghij5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 4, 2, S("abcdefghij5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 0, 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 0, 9, S("abcdefghij123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 0, 11, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 1, 4, S("abcdefghij2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 1, 8, S("abcdefghij23456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 1, 10, S("abcdefghij234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 5, 1, S("abcdefghij6klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 5, 2, S("abcdefghij67klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 5, 4, S("abcdefghij6789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 5, 5, S("abcdefghij67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 5, 6, S("abcdefghij67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 9, 1, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 9, 2, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 10, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 10, 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 10, 9, S("abcdefghij123456789klmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test24() {
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 2, 1, S("abcdefghij3klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 2, 2, S("abcdefghij34klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 2, 3, S("abcdefghij345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 2, 4, S("abcdefghij345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 4, 1, S("abcdefghij5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 4, 2, S("abcdefghij5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 0, 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 0, 9, S("abcdefghij123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 0, 11, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 1, 4, S("abcdefghij2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 1, 8, S("abcdefghij23456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 1, 10, S("abcdefghij234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 5, 1, S("abcdefghij6klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 5, 2, S("abcdefghij67klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 5, 4, S("abcdefghij6789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 5, 5, S("abcdefghij67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 5, 6, S("abcdefghij67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 9, 1, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 9, 2, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 10, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 10, 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 10, 9, S("abcdefghij123456789klmnopqrst"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test25()
-{
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 19, 1, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 19, 2, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, S(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 0, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 0, 2, S("abcdefghijklmnopqrs12t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 0, 4, S("abcdefghijklmnopqrs1234t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 0, 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 0, 6, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 1, 1, S("abcdefghijklmnopqrs2t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 1, 2, S("abcdefghijklmnopqrs23t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 1, 3, S("abcdefghijklmnopqrs234t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 1, 4, S("abcdefghijklmnopqrs2345t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 1, 5, S("abcdefghijklmnopqrs2345t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 2, 1, S("abcdefghijklmnopqrs3t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 2, 2, S("abcdefghijklmnopqrs34t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 2, 3, S("abcdefghijklmnopqrs345t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 2, 4, S("abcdefghijklmnopqrs345t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 4, 1, S("abcdefghijklmnopqrs5t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 4, 2, S("abcdefghijklmnopqrs5t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 5, 1, S("abcdefghijklmnopqrs6t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 5, 2, S("abcdefghijklmnopqrs67t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789t"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test25() {
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 19, 1, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 19, 2, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, S(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 0, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 0, 2, S("abcdefghijklmnopqrs12t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 0, 4, S("abcdefghijklmnopqrs1234t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 0, 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 0, 6, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 1, 1, S("abcdefghijklmnopqrs2t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 1, 2, S("abcdefghijklmnopqrs23t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 1, 3, S("abcdefghijklmnopqrs234t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 1, 4, S("abcdefghijklmnopqrs2345t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 1, 5, S("abcdefghijklmnopqrs2345t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 2, 1, S("abcdefghijklmnopqrs3t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 2, 2, S("abcdefghijklmnopqrs34t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 2, 3, S("abcdefghijklmnopqrs345t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 2, 4, S("abcdefghijklmnopqrs345t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 4, 1, S("abcdefghijklmnopqrs5t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 4, 2, S("abcdefghijklmnopqrs5t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 5, 1, S("abcdefghijklmnopqrs6t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 5, 2, S("abcdefghijklmnopqrs67t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789t"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test26()
-{
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 9, 1, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 9, 2, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, S(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 0, 2, S("abcdefghijklmnopqrst12"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 0, 4, S("abcdefghijklmnopqrst1234"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 0, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 0, 6, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 1, 2, S("abcdefghijklmnopqrst23"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 1, 3, S("abcdefghijklmnopqrst234"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 1, 4, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 1, 5, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 2, 1, S("abcdefghijklmnopqrst3"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 2, 2, S("abcdefghijklmnopqrst34"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test26() {
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 9, 1, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 9, 2, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, S(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 0, 2, S("abcdefghijklmnopqrst12"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 0, 4, S("abcdefghijklmnopqrst1234"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 0, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 0, 6, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 1, 2, S("abcdefghijklmnopqrst23"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 1, 3, S("abcdefghijklmnopqrst234"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 1, 4, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 1, 5, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 2, 1, S("abcdefghijklmnopqrst3"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 2, 2, S("abcdefghijklmnopqrst34"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test27()
-{
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 2, 3, S("abcdefghijklmnopqrst345"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 2, 4, S("abcdefghijklmnopqrst345"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 4, 1, S("abcdefghijklmnopqrst5"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 4, 2, S("abcdefghijklmnopqrst5"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 0, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 0, 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 0, 11, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 1, 4, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 1, 8, S("abcdefghijklmnopqrst23456789"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 1, 10, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 5, 1, S("abcdefghijklmnopqrst6"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 5, 2, S("abcdefghijklmnopqrst67"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 5, 4, S("abcdefghijklmnopqrst6789"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 5, 5, S("abcdefghijklmnopqrst67890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 5, 6, S("abcdefghijklmnopqrst67890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 9, 1, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 9, 2, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrst1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrst234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrst2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrst2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrst1234567890"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test27() {
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 2, 3, S("abcdefghijklmnopqrst345"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 2, 4, S("abcdefghijklmnopqrst345"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 4, 1, S("abcdefghijklmnopqrst5"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 4, 2, S("abcdefghijklmnopqrst5"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 0, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 0, 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 0, 11, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 1, 4, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 1, 8, S("abcdefghijklmnopqrst23456789"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 1, 10, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 5, 1, S("abcdefghijklmnopqrst6"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 5, 2, S("abcdefghijklmnopqrst67"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 5, 4, S("abcdefghijklmnopqrst6789"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 5, 5, S("abcdefghijklmnopqrst67890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 5, 6, S("abcdefghijklmnopqrst67890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 9, 1, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 9, 2, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrst1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrst234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrst2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrst2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrst1234567890"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test28()
-{
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S(""), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S(""), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 0, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 0, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 0, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 0, 6, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 1, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 1, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 1, 3, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 1, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 1, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 2, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 2, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 2, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 2, 3, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 2, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 4, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 4, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 4, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 5, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 5, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 0, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 0, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 0, 11, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 1, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 1, 8, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 1, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 5, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 5, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 5, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 5, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 5, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 5, 6, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test28() {
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S(""), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S(""), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 0, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 0, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 0, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 0, 6, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 1, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 1, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 1, 3, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 1, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 1, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 2, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 2, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 2, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 2, 3, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 2, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 4, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 4, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 4, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 5, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 5, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 0, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 0, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 0, 11, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 1, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 1, 8, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 1, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 5, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 5, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 5, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 5, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 5, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 5, 6, S("can't happen"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test29()
-{
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 9, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 9, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 9, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 21, 0, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test29() {
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 9, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 9, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 9, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, S("12345678901234567890"), 21, 0, S("can't happen"));
+
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test30()
-{
-    test_npos(S(""), 0, S("12345678901234567890"),  0, S("12345678901234567890"));
-    test_npos(S(""), 0, S("12345678901234567890"),  1, S( "2345678901234567890"));
-    test_npos(S(""), 0, S("12345678901234567890"),  2, S(  "345678901234567890"));
-    test_npos(S(""), 0, S("12345678901234567890"),  3, S(   "45678901234567890"));
-    test_npos(S(""), 0, S("12345678901234567890"),  5, S(     "678901234567890"));
-    test_npos(S(""), 0, S("12345678901234567890"), 10, S(          "1234567890"));
-    test_npos(S(""), 0, S("12345678901234567890"), 21, S("can't happen"));
-    test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, S("abcdefghij12345klmnopqrst"));
-    test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, S("abcdefghij2345klmnopqrst"));
-    test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 3, S("abcdefghij45klmnopqrst"));
-    test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 5, S("abcdefghijklmnopqrst"));
-    test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 6, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test30() {
+  test_npos(S(""), 0, S("12345678901234567890"), 0, S("12345678901234567890"));
+  test_npos(S(""), 0, S("12345678901234567890"), 1, S("2345678901234567890"));
+  test_npos(S(""), 0, S("12345678901234567890"), 2, S("345678901234567890"));
+  test_npos(S(""), 0, S("12345678901234567890"), 3, S("45678901234567890"));
+  test_npos(S(""), 0, S("12345678901234567890"), 5, S("678901234567890"));
+  test_npos(S(""), 0, S("12345678901234567890"), 10, S("1234567890"));
+  test_npos(S(""), 0, S("12345678901234567890"), 21, S("can't happen"));
+  test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 0, S("abcdefghij12345klmnopqrst"));
+  test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 1, S("abcdefghij2345klmnopqrst"));
+  test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 3, S("abcdefghij45klmnopqrst"));
+  test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 5, S("abcdefghijklmnopqrst"));
+  test_npos(S("abcdefghijklmnopqrst"), 10, S("12345"), 6, S("can't happen"));
+
+  return true;
 }
 
 template <class S>
@@ -1858,8 +1812,7 @@ void test() {
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/string_view.pass.cpp
index 1f26a211bd94d14..7c0f157bc323009 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_insert/string_view.pass.cpp
@@ -19,31 +19,24 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos, SV sv, S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos <= old_size)
-    {
-        s.insert(pos, sv);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos, SV sv, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos <= old_size) {
+    s.insert(pos, sv);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.insert(pos, sv);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > old_size);
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.insert(pos, sv);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > old_size);
+      assert(s == s0);
     }
+  }
 #endif
 }
 
@@ -157,8 +150,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/char.pass.cpp
index 129bca4ce6496e8..496c484ee20b306 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/char.pass.cpp
@@ -17,12 +17,10 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::value_type str, S expected)
-{
-    s += str;
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::value_type str, S expected) {
+  s += str;
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -46,8 +44,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/initializer_list.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/initializer_list.pass.cpp
index 265df027b37e7e0..ce31ebc3bc8ed12 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/initializer_list.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/initializer_list.pass.cpp
@@ -34,8 +34,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/pointer.pass.cpp
index 645a5822f521d15..2d8c535b354c22f 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/pointer.pass.cpp
@@ -17,12 +17,10 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, const typename S::value_type* str, S expected)
-{
-    s += str;
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, const typename S::value_type* str, S expected) {
+  s += str;
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 template <class S>
@@ -45,8 +43,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("12345678901234567890"), "", S("12345678901234567890"));
   test(S("12345678901234567890"), "12345", S("1234567890123456789012345"));
   test(S("12345678901234567890"), "1234567890", S("123456789012345678901234567890"));
-  test(S("12345678901234567890"), "12345678901234567890",
-        S("1234567890123456789012345678901234567890"));
+  test(S("12345678901234567890"), "12345678901234567890", S("1234567890123456789012345678901234567890"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -58,8 +55,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/string.pass.cpp
index c7ee062764c891d..870843192da86bb 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_op_plus_equal/string.pass.cpp
@@ -18,12 +18,10 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, S str, S expected)
-{
-    s += str;
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
+TEST_CONSTEXPR_CXX20 void test(S s, S str, S expected) {
+  s += str;
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
 }
 
 template <class S>
@@ -46,8 +44,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("12345678901234567890"), S(), S("12345678901234567890"));
   test(S("12345678901234567890"), S("12345"), S("1234567890123456789012345"));
   test(S("12345678901234567890"), S("1234567890"), S("123456789012345678901234567890"));
-  test(S("12345678901234567890"), S("12345678901234567890"),
-        S("1234567890123456789012345678901234567890"));
+  test(S("12345678901234567890"), S("12345678901234567890"), S("1234567890123456789012345678901234567890"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -68,8 +65,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp
index 5f53c835e855c5d..dc6f191e106c6fc 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp
@@ -34,8 +34,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp
index c70a43e2ca81e00..c1ca532a5f910f9 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp
@@ -21,975 +21,965 @@
 #include "test_iterators.h"
 
 template <class S, class It>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos1, typename S::size_type n1, It f, It l, 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, f, l);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
-    typename S::size_type rlen = std::distance(f, l);
-    assert(s.size() == old_size - xlen + rlen);
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos1, typename S::size_type n1, It f, It l, 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, f, l);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
+  typename S::size_type rlen = std::distance(f, l);
+  assert(s.size() == old_size - xlen + rlen);
 }
 
 #ifndef TEST_HAS_NO_EXCEPTIONS
-struct Widget { operator char() const { throw 42; } };
+struct Widget {
+  operator char() const { throw 42; }
+};
 
 template <class S, class It>
-TEST_CONSTEXPR_CXX20 void
-test_exceptions(S s, typename S::size_type pos1, typename S::size_type n1, It f, It l)
-{
-    typename S::const_iterator first = s.begin() + pos1;
-    typename S::const_iterator last = s.begin() + pos1 + n1;
+TEST_CONSTEXPR_CXX20 void test_exceptions(S s, typename S::size_type pos1, typename S::size_type n1, It f, It l) {
+  typename S::const_iterator first = s.begin() + pos1;
+  typename S::const_iterator last  = s.begin() + pos1 + n1;
 
-    S original = s;
-    typename S::iterator begin = s.begin();
-    typename S::iterator end = s.end();
+  S original                 = s;
+  typename S::iterator begin = s.begin();
+  typename S::iterator end   = s.end();
 
-    try {
-        s.replace(first, last, f, l);
-        assert(false);
-    } catch (...) {}
+  try {
+    s.replace(first, last, f, l);
+    assert(false);
+  } catch (...) {
+  }
 
-    // Part of "no effects" is that iterators and pointers
-    // into the string must not have been invalidated.
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == original);
-    assert(s.begin() == begin);
-    assert(s.end() == end);
+  // Part of "no effects" is that iterators and pointers
+  // into the string must not have been invalidated.
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == original);
+  assert(s.begin() == begin);
+  assert(s.end() == end);
 }
 #endif
 
 TEST_CONSTEXPR const char* str = "12345678901234567890";
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, str, str+0, S(""));
-    test(S(""), 0, 0, str, str+0, S(""));
-    test(S(""), 0, 0, str, str+1, S("1"));
-    test(S(""), 0, 0, str, str+2, S("12"));
-    test(S(""), 0, 0, str, str+4, S("1234"));
-    test(S(""), 0, 0, str, str+5, S("12345"));
-    test(S(""), 0, 0, str, str+0, S(""));
-    test(S(""), 0, 0, str, str+1, S("1"));
-    test(S(""), 0, 0, str, str+5, S("12345"));
-    test(S(""), 0, 0, str, str+9, S("123456789"));
-    test(S(""), 0, 0, str, str+10, S("1234567890"));
-    test(S(""), 0, 0, str, str+0, S(""));
-    test(S(""), 0, 0, str, str+1, S("1"));
-    test(S(""), 0, 0, str, str+10, S("1234567890"));
-    test(S(""), 0, 0, str, str+19, S("1234567890123456789"));
-    test(S(""), 0, 0, str, str+20, S("12345678901234567890"));
-    test(S("abcde"), 0, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 0, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 0, 0, str, str+1, S("1abcde"));
-    test(S("abcde"), 0, 0, str, str+2, S("12abcde"));
-    test(S("abcde"), 0, 0, str, str+4, S("1234abcde"));
-    test(S("abcde"), 0, 0, str, str+5, S("12345abcde"));
-    test(S("abcde"), 0, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 0, 0, str, str+1, S("1abcde"));
-    test(S("abcde"), 0, 0, str, str+5, S("12345abcde"));
-    test(S("abcde"), 0, 0, str, str+9, S("123456789abcde"));
-    test(S("abcde"), 0, 0, str, str+10, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 0, 0, str, str+1, S("1abcde"));
-    test(S("abcde"), 0, 0, str, str+10, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, str, str+19, S("1234567890123456789abcde"));
-    test(S("abcde"), 0, 0, str, str+20, S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 1, str, str+0, S("bcde"));
-    test(S("abcde"), 0, 1, str, str+0, S("bcde"));
-    test(S("abcde"), 0, 1, str, str+1, S("1bcde"));
-    test(S("abcde"), 0, 1, str, str+2, S("12bcde"));
-    test(S("abcde"), 0, 1, str, str+4, S("1234bcde"));
-    test(S("abcde"), 0, 1, str, str+5, S("12345bcde"));
-    test(S("abcde"), 0, 1, str, str+0, S("bcde"));
-    test(S("abcde"), 0, 1, str, str+1, S("1bcde"));
-    test(S("abcde"), 0, 1, str, str+5, S("12345bcde"));
-    test(S("abcde"), 0, 1, str, str+9, S("123456789bcde"));
-    test(S("abcde"), 0, 1, str, str+10, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, str, str+0, S("bcde"));
-    test(S("abcde"), 0, 1, str, str+1, S("1bcde"));
-    test(S("abcde"), 0, 1, str, str+10, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, str, str+19, S("1234567890123456789bcde"));
-    test(S("abcde"), 0, 1, str, str+20, S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 2, str, str+0, S("cde"));
-    test(S("abcde"), 0, 2, str, str+0, S("cde"));
-    test(S("abcde"), 0, 2, str, str+1, S("1cde"));
-    test(S("abcde"), 0, 2, str, str+2, S("12cde"));
-    test(S("abcde"), 0, 2, str, str+4, S("1234cde"));
-    test(S("abcde"), 0, 2, str, str+5, S("12345cde"));
-    test(S("abcde"), 0, 2, str, str+0, S("cde"));
-    test(S("abcde"), 0, 2, str, str+1, S("1cde"));
-    test(S("abcde"), 0, 2, str, str+5, S("12345cde"));
-    test(S("abcde"), 0, 2, str, str+9, S("123456789cde"));
-    test(S("abcde"), 0, 2, str, str+10, S("1234567890cde"));
-    test(S("abcde"), 0, 2, str, str+0, S("cde"));
-    test(S("abcde"), 0, 2, str, str+1, S("1cde"));
-    test(S("abcde"), 0, 2, str, str+10, S("1234567890cde"));
-    test(S("abcde"), 0, 2, str, str+19, S("1234567890123456789cde"));
-    test(S("abcde"), 0, 2, str, str+20, S("12345678901234567890cde"));
-    test(S("abcde"), 0, 4, str, str+0, S("e"));
-    test(S("abcde"), 0, 4, str, str+0, S("e"));
-    test(S("abcde"), 0, 4, str, str+1, S("1e"));
-    test(S("abcde"), 0, 4, str, str+2, S("12e"));
-    test(S("abcde"), 0, 4, str, str+4, S("1234e"));
-    test(S("abcde"), 0, 4, str, str+5, S("12345e"));
-    test(S("abcde"), 0, 4, str, str+0, S("e"));
-    test(S("abcde"), 0, 4, str, str+1, S("1e"));
-    test(S("abcde"), 0, 4, str, str+5, S("12345e"));
-    test(S("abcde"), 0, 4, str, str+9, S("123456789e"));
-    test(S("abcde"), 0, 4, str, str+10, S("1234567890e"));
-    test(S("abcde"), 0, 4, str, str+0, S("e"));
-    test(S("abcde"), 0, 4, str, str+1, S("1e"));
-    test(S("abcde"), 0, 4, str, str+10, S("1234567890e"));
-    test(S("abcde"), 0, 4, str, str+19, S("1234567890123456789e"));
-    test(S("abcde"), 0, 4, str, str+20, S("12345678901234567890e"));
-    test(S("abcde"), 0, 5, str, str+0, S(""));
-    test(S("abcde"), 0, 5, str, str+0, S(""));
-    test(S("abcde"), 0, 5, str, str+1, S("1"));
-    test(S("abcde"), 0, 5, str, str+2, S("12"));
-    test(S("abcde"), 0, 5, str, str+4, S("1234"));
-    test(S("abcde"), 0, 5, str, str+5, S("12345"));
-    test(S("abcde"), 0, 5, str, str+0, S(""));
-    test(S("abcde"), 0, 5, str, str+1, S("1"));
-    test(S("abcde"), 0, 5, str, str+5, S("12345"));
-    test(S("abcde"), 0, 5, str, str+9, S("123456789"));
-    test(S("abcde"), 0, 5, str, str+10, S("1234567890"));
-    test(S("abcde"), 0, 5, str, str+0, S(""));
-    test(S("abcde"), 0, 5, str, str+1, S("1"));
-    test(S("abcde"), 0, 5, str, str+10, S("1234567890"));
-    test(S("abcde"), 0, 5, str, str+19, S("1234567890123456789"));
-    test(S("abcde"), 0, 5, str, str+20, S("12345678901234567890"));
-    test(S("abcde"), 1, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 1, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 1, 0, str, str+1, S("a1bcde"));
-    test(S("abcde"), 1, 0, str, str+2, S("a12bcde"));
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, str, str + 0, S(""));
+  test(S(""), 0, 0, str, str + 0, S(""));
+  test(S(""), 0, 0, str, str + 1, S("1"));
+  test(S(""), 0, 0, str, str + 2, S("12"));
+  test(S(""), 0, 0, str, str + 4, S("1234"));
+  test(S(""), 0, 0, str, str + 5, S("12345"));
+  test(S(""), 0, 0, str, str + 0, S(""));
+  test(S(""), 0, 0, str, str + 1, S("1"));
+  test(S(""), 0, 0, str, str + 5, S("12345"));
+  test(S(""), 0, 0, str, str + 9, S("123456789"));
+  test(S(""), 0, 0, str, str + 10, S("1234567890"));
+  test(S(""), 0, 0, str, str + 0, S(""));
+  test(S(""), 0, 0, str, str + 1, S("1"));
+  test(S(""), 0, 0, str, str + 10, S("1234567890"));
+  test(S(""), 0, 0, str, str + 19, S("1234567890123456789"));
+  test(S(""), 0, 0, str, str + 20, S("12345678901234567890"));
+  test(S("abcde"), 0, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 0, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 0, 0, str, str + 1, S("1abcde"));
+  test(S("abcde"), 0, 0, str, str + 2, S("12abcde"));
+  test(S("abcde"), 0, 0, str, str + 4, S("1234abcde"));
+  test(S("abcde"), 0, 0, str, str + 5, S("12345abcde"));
+  test(S("abcde"), 0, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 0, 0, str, str + 1, S("1abcde"));
+  test(S("abcde"), 0, 0, str, str + 5, S("12345abcde"));
+  test(S("abcde"), 0, 0, str, str + 9, S("123456789abcde"));
+  test(S("abcde"), 0, 0, str, str + 10, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 0, 0, str, str + 1, S("1abcde"));
+  test(S("abcde"), 0, 0, str, str + 10, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, str, str + 19, S("1234567890123456789abcde"));
+  test(S("abcde"), 0, 0, str, str + 20, S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 1, str, str + 0, S("bcde"));
+  test(S("abcde"), 0, 1, str, str + 0, S("bcde"));
+  test(S("abcde"), 0, 1, str, str + 1, S("1bcde"));
+  test(S("abcde"), 0, 1, str, str + 2, S("12bcde"));
+  test(S("abcde"), 0, 1, str, str + 4, S("1234bcde"));
+  test(S("abcde"), 0, 1, str, str + 5, S("12345bcde"));
+  test(S("abcde"), 0, 1, str, str + 0, S("bcde"));
+  test(S("abcde"), 0, 1, str, str + 1, S("1bcde"));
+  test(S("abcde"), 0, 1, str, str + 5, S("12345bcde"));
+  test(S("abcde"), 0, 1, str, str + 9, S("123456789bcde"));
+  test(S("abcde"), 0, 1, str, str + 10, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, str, str + 0, S("bcde"));
+  test(S("abcde"), 0, 1, str, str + 1, S("1bcde"));
+  test(S("abcde"), 0, 1, str, str + 10, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, str, str + 19, S("1234567890123456789bcde"));
+  test(S("abcde"), 0, 1, str, str + 20, S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 2, str, str + 0, S("cde"));
+  test(S("abcde"), 0, 2, str, str + 0, S("cde"));
+  test(S("abcde"), 0, 2, str, str + 1, S("1cde"));
+  test(S("abcde"), 0, 2, str, str + 2, S("12cde"));
+  test(S("abcde"), 0, 2, str, str + 4, S("1234cde"));
+  test(S("abcde"), 0, 2, str, str + 5, S("12345cde"));
+  test(S("abcde"), 0, 2, str, str + 0, S("cde"));
+  test(S("abcde"), 0, 2, str, str + 1, S("1cde"));
+  test(S("abcde"), 0, 2, str, str + 5, S("12345cde"));
+  test(S("abcde"), 0, 2, str, str + 9, S("123456789cde"));
+  test(S("abcde"), 0, 2, str, str + 10, S("1234567890cde"));
+  test(S("abcde"), 0, 2, str, str + 0, S("cde"));
+  test(S("abcde"), 0, 2, str, str + 1, S("1cde"));
+  test(S("abcde"), 0, 2, str, str + 10, S("1234567890cde"));
+  test(S("abcde"), 0, 2, str, str + 19, S("1234567890123456789cde"));
+  test(S("abcde"), 0, 2, str, str + 20, S("12345678901234567890cde"));
+  test(S("abcde"), 0, 4, str, str + 0, S("e"));
+  test(S("abcde"), 0, 4, str, str + 0, S("e"));
+  test(S("abcde"), 0, 4, str, str + 1, S("1e"));
+  test(S("abcde"), 0, 4, str, str + 2, S("12e"));
+  test(S("abcde"), 0, 4, str, str + 4, S("1234e"));
+  test(S("abcde"), 0, 4, str, str + 5, S("12345e"));
+  test(S("abcde"), 0, 4, str, str + 0, S("e"));
+  test(S("abcde"), 0, 4, str, str + 1, S("1e"));
+  test(S("abcde"), 0, 4, str, str + 5, S("12345e"));
+  test(S("abcde"), 0, 4, str, str + 9, S("123456789e"));
+  test(S("abcde"), 0, 4, str, str + 10, S("1234567890e"));
+  test(S("abcde"), 0, 4, str, str + 0, S("e"));
+  test(S("abcde"), 0, 4, str, str + 1, S("1e"));
+  test(S("abcde"), 0, 4, str, str + 10, S("1234567890e"));
+  test(S("abcde"), 0, 4, str, str + 19, S("1234567890123456789e"));
+  test(S("abcde"), 0, 4, str, str + 20, S("12345678901234567890e"));
+  test(S("abcde"), 0, 5, str, str + 0, S(""));
+  test(S("abcde"), 0, 5, str, str + 0, S(""));
+  test(S("abcde"), 0, 5, str, str + 1, S("1"));
+  test(S("abcde"), 0, 5, str, str + 2, S("12"));
+  test(S("abcde"), 0, 5, str, str + 4, S("1234"));
+  test(S("abcde"), 0, 5, str, str + 5, S("12345"));
+  test(S("abcde"), 0, 5, str, str + 0, S(""));
+  test(S("abcde"), 0, 5, str, str + 1, S("1"));
+  test(S("abcde"), 0, 5, str, str + 5, S("12345"));
+  test(S("abcde"), 0, 5, str, str + 9, S("123456789"));
+  test(S("abcde"), 0, 5, str, str + 10, S("1234567890"));
+  test(S("abcde"), 0, 5, str, str + 0, S(""));
+  test(S("abcde"), 0, 5, str, str + 1, S("1"));
+  test(S("abcde"), 0, 5, str, str + 10, S("1234567890"));
+  test(S("abcde"), 0, 5, str, str + 19, S("1234567890123456789"));
+  test(S("abcde"), 0, 5, str, str + 20, S("12345678901234567890"));
+  test(S("abcde"), 1, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 1, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 1, 0, str, str + 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, str, str + 2, S("a12bcde"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S("abcde"), 1, 0, str, str+4, S("a1234bcde"));
-    test(S("abcde"), 1, 0, str, str+5, S("a12345bcde"));
-    test(S("abcde"), 1, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 1, 0, str, str+1, S("a1bcde"));
-    test(S("abcde"), 1, 0, str, str+5, S("a12345bcde"));
-    test(S("abcde"), 1, 0, str, str+9, S("a123456789bcde"));
-    test(S("abcde"), 1, 0, str, str+10, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 1, 0, str, str+1, S("a1bcde"));
-    test(S("abcde"), 1, 0, str, str+10, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, str, str+19, S("a1234567890123456789bcde"));
-    test(S("abcde"), 1, 0, str, str+20, S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 1, str, str+0, S("acde"));
-    test(S("abcde"), 1, 1, str, str+0, S("acde"));
-    test(S("abcde"), 1, 1, str, str+1, S("a1cde"));
-    test(S("abcde"), 1, 1, str, str+2, S("a12cde"));
-    test(S("abcde"), 1, 1, str, str+4, S("a1234cde"));
-    test(S("abcde"), 1, 1, str, str+5, S("a12345cde"));
-    test(S("abcde"), 1, 1, str, str+0, S("acde"));
-    test(S("abcde"), 1, 1, str, str+1, S("a1cde"));
-    test(S("abcde"), 1, 1, str, str+5, S("a12345cde"));
-    test(S("abcde"), 1, 1, str, str+9, S("a123456789cde"));
-    test(S("abcde"), 1, 1, str, str+10, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, str, str+0, S("acde"));
-    test(S("abcde"), 1, 1, str, str+1, S("a1cde"));
-    test(S("abcde"), 1, 1, str, str+10, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, str, str+19, S("a1234567890123456789cde"));
-    test(S("abcde"), 1, 1, str, str+20, S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 2, str, str+0, S("ade"));
-    test(S("abcde"), 1, 2, str, str+0, S("ade"));
-    test(S("abcde"), 1, 2, str, str+1, S("a1de"));
-    test(S("abcde"), 1, 2, str, str+2, S("a12de"));
-    test(S("abcde"), 1, 2, str, str+4, S("a1234de"));
-    test(S("abcde"), 1, 2, str, str+5, S("a12345de"));
-    test(S("abcde"), 1, 2, str, str+0, S("ade"));
-    test(S("abcde"), 1, 2, str, str+1, S("a1de"));
-    test(S("abcde"), 1, 2, str, str+5, S("a12345de"));
-    test(S("abcde"), 1, 2, str, str+9, S("a123456789de"));
-    test(S("abcde"), 1, 2, str, str+10, S("a1234567890de"));
-    test(S("abcde"), 1, 2, str, str+0, S("ade"));
-    test(S("abcde"), 1, 2, str, str+1, S("a1de"));
-    test(S("abcde"), 1, 2, str, str+10, S("a1234567890de"));
-    test(S("abcde"), 1, 2, str, str+19, S("a1234567890123456789de"));
-    test(S("abcde"), 1, 2, str, str+20, S("a12345678901234567890de"));
-    test(S("abcde"), 1, 3, str, str+0, S("ae"));
-    test(S("abcde"), 1, 3, str, str+0, S("ae"));
-    test(S("abcde"), 1, 3, str, str+1, S("a1e"));
-    test(S("abcde"), 1, 3, str, str+2, S("a12e"));
-    test(S("abcde"), 1, 3, str, str+4, S("a1234e"));
-    test(S("abcde"), 1, 3, str, str+5, S("a12345e"));
-    test(S("abcde"), 1, 3, str, str+0, S("ae"));
-    test(S("abcde"), 1, 3, str, str+1, S("a1e"));
-    test(S("abcde"), 1, 3, str, str+5, S("a12345e"));
-    test(S("abcde"), 1, 3, str, str+9, S("a123456789e"));
-    test(S("abcde"), 1, 3, str, str+10, S("a1234567890e"));
-    test(S("abcde"), 1, 3, str, str+0, S("ae"));
-    test(S("abcde"), 1, 3, str, str+1, S("a1e"));
-    test(S("abcde"), 1, 3, str, str+10, S("a1234567890e"));
-    test(S("abcde"), 1, 3, str, str+19, S("a1234567890123456789e"));
-    test(S("abcde"), 1, 3, str, str+20, S("a12345678901234567890e"));
-    test(S("abcde"), 1, 4, str, str+0, S("a"));
-    test(S("abcde"), 1, 4, str, str+0, S("a"));
-    test(S("abcde"), 1, 4, str, str+1, S("a1"));
-    test(S("abcde"), 1, 4, str, str+2, S("a12"));
-    test(S("abcde"), 1, 4, str, str+4, S("a1234"));
-    test(S("abcde"), 1, 4, str, str+5, S("a12345"));
-    test(S("abcde"), 1, 4, str, str+0, S("a"));
-    test(S("abcde"), 1, 4, str, str+1, S("a1"));
-    test(S("abcde"), 1, 4, str, str+5, S("a12345"));
-    test(S("abcde"), 1, 4, str, str+9, S("a123456789"));
-    test(S("abcde"), 1, 4, str, str+10, S("a1234567890"));
-    test(S("abcde"), 1, 4, str, str+0, S("a"));
-    test(S("abcde"), 1, 4, str, str+1, S("a1"));
-    test(S("abcde"), 1, 4, str, str+10, S("a1234567890"));
-    test(S("abcde"), 1, 4, str, str+19, S("a1234567890123456789"));
-    test(S("abcde"), 1, 4, str, str+20, S("a12345678901234567890"));
-    test(S("abcde"), 2, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 2, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 2, 0, str, str+1, S("ab1cde"));
-    test(S("abcde"), 2, 0, str, str+2, S("ab12cde"));
-    test(S("abcde"), 2, 0, str, str+4, S("ab1234cde"));
-    test(S("abcde"), 2, 0, str, str+5, S("ab12345cde"));
-    test(S("abcde"), 2, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 2, 0, str, str+1, S("ab1cde"));
-    test(S("abcde"), 2, 0, str, str+5, S("ab12345cde"));
-    test(S("abcde"), 2, 0, str, str+9, S("ab123456789cde"));
-    test(S("abcde"), 2, 0, str, str+10, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 2, 0, str, str+1, S("ab1cde"));
-    test(S("abcde"), 2, 0, str, str+10, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, str, str+19, S("ab1234567890123456789cde"));
-    test(S("abcde"), 2, 0, str, str+20, S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 1, str, str+0, S("abde"));
-    test(S("abcde"), 2, 1, str, str+0, S("abde"));
-    test(S("abcde"), 2, 1, str, str+1, S("ab1de"));
-    test(S("abcde"), 2, 1, str, str+2, S("ab12de"));
-    test(S("abcde"), 2, 1, str, str+4, S("ab1234de"));
-    test(S("abcde"), 2, 1, str, str+5, S("ab12345de"));
-    test(S("abcde"), 2, 1, str, str+0, S("abde"));
-    test(S("abcde"), 2, 1, str, str+1, S("ab1de"));
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S("abcde"), 1, 0, str, str + 4, S("a1234bcde"));
+  test(S("abcde"), 1, 0, str, str + 5, S("a12345bcde"));
+  test(S("abcde"), 1, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 1, 0, str, str + 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, str, str + 5, S("a12345bcde"));
+  test(S("abcde"), 1, 0, str, str + 9, S("a123456789bcde"));
+  test(S("abcde"), 1, 0, str, str + 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 1, 0, str, str + 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, str, str + 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, str, str + 19, S("a1234567890123456789bcde"));
+  test(S("abcde"), 1, 0, str, str + 20, S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 1, str, str + 0, S("acde"));
+  test(S("abcde"), 1, 1, str, str + 0, S("acde"));
+  test(S("abcde"), 1, 1, str, str + 1, S("a1cde"));
+  test(S("abcde"), 1, 1, str, str + 2, S("a12cde"));
+  test(S("abcde"), 1, 1, str, str + 4, S("a1234cde"));
+  test(S("abcde"), 1, 1, str, str + 5, S("a12345cde"));
+  test(S("abcde"), 1, 1, str, str + 0, S("acde"));
+  test(S("abcde"), 1, 1, str, str + 1, S("a1cde"));
+  test(S("abcde"), 1, 1, str, str + 5, S("a12345cde"));
+  test(S("abcde"), 1, 1, str, str + 9, S("a123456789cde"));
+  test(S("abcde"), 1, 1, str, str + 10, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, str, str + 0, S("acde"));
+  test(S("abcde"), 1, 1, str, str + 1, S("a1cde"));
+  test(S("abcde"), 1, 1, str, str + 10, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, str, str + 19, S("a1234567890123456789cde"));
+  test(S("abcde"), 1, 1, str, str + 20, S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 2, str, str + 0, S("ade"));
+  test(S("abcde"), 1, 2, str, str + 0, S("ade"));
+  test(S("abcde"), 1, 2, str, str + 1, S("a1de"));
+  test(S("abcde"), 1, 2, str, str + 2, S("a12de"));
+  test(S("abcde"), 1, 2, str, str + 4, S("a1234de"));
+  test(S("abcde"), 1, 2, str, str + 5, S("a12345de"));
+  test(S("abcde"), 1, 2, str, str + 0, S("ade"));
+  test(S("abcde"), 1, 2, str, str + 1, S("a1de"));
+  test(S("abcde"), 1, 2, str, str + 5, S("a12345de"));
+  test(S("abcde"), 1, 2, str, str + 9, S("a123456789de"));
+  test(S("abcde"), 1, 2, str, str + 10, S("a1234567890de"));
+  test(S("abcde"), 1, 2, str, str + 0, S("ade"));
+  test(S("abcde"), 1, 2, str, str + 1, S("a1de"));
+  test(S("abcde"), 1, 2, str, str + 10, S("a1234567890de"));
+  test(S("abcde"), 1, 2, str, str + 19, S("a1234567890123456789de"));
+  test(S("abcde"), 1, 2, str, str + 20, S("a12345678901234567890de"));
+  test(S("abcde"), 1, 3, str, str + 0, S("ae"));
+  test(S("abcde"), 1, 3, str, str + 0, S("ae"));
+  test(S("abcde"), 1, 3, str, str + 1, S("a1e"));
+  test(S("abcde"), 1, 3, str, str + 2, S("a12e"));
+  test(S("abcde"), 1, 3, str, str + 4, S("a1234e"));
+  test(S("abcde"), 1, 3, str, str + 5, S("a12345e"));
+  test(S("abcde"), 1, 3, str, str + 0, S("ae"));
+  test(S("abcde"), 1, 3, str, str + 1, S("a1e"));
+  test(S("abcde"), 1, 3, str, str + 5, S("a12345e"));
+  test(S("abcde"), 1, 3, str, str + 9, S("a123456789e"));
+  test(S("abcde"), 1, 3, str, str + 10, S("a1234567890e"));
+  test(S("abcde"), 1, 3, str, str + 0, S("ae"));
+  test(S("abcde"), 1, 3, str, str + 1, S("a1e"));
+  test(S("abcde"), 1, 3, str, str + 10, S("a1234567890e"));
+  test(S("abcde"), 1, 3, str, str + 19, S("a1234567890123456789e"));
+  test(S("abcde"), 1, 3, str, str + 20, S("a12345678901234567890e"));
+  test(S("abcde"), 1, 4, str, str + 0, S("a"));
+  test(S("abcde"), 1, 4, str, str + 0, S("a"));
+  test(S("abcde"), 1, 4, str, str + 1, S("a1"));
+  test(S("abcde"), 1, 4, str, str + 2, S("a12"));
+  test(S("abcde"), 1, 4, str, str + 4, S("a1234"));
+  test(S("abcde"), 1, 4, str, str + 5, S("a12345"));
+  test(S("abcde"), 1, 4, str, str + 0, S("a"));
+  test(S("abcde"), 1, 4, str, str + 1, S("a1"));
+  test(S("abcde"), 1, 4, str, str + 5, S("a12345"));
+  test(S("abcde"), 1, 4, str, str + 9, S("a123456789"));
+  test(S("abcde"), 1, 4, str, str + 10, S("a1234567890"));
+  test(S("abcde"), 1, 4, str, str + 0, S("a"));
+  test(S("abcde"), 1, 4, str, str + 1, S("a1"));
+  test(S("abcde"), 1, 4, str, str + 10, S("a1234567890"));
+  test(S("abcde"), 1, 4, str, str + 19, S("a1234567890123456789"));
+  test(S("abcde"), 1, 4, str, str + 20, S("a12345678901234567890"));
+  test(S("abcde"), 2, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 2, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 2, 0, str, str + 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, str, str + 2, S("ab12cde"));
+  test(S("abcde"), 2, 0, str, str + 4, S("ab1234cde"));
+  test(S("abcde"), 2, 0, str, str + 5, S("ab12345cde"));
+  test(S("abcde"), 2, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 2, 0, str, str + 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, str, str + 5, S("ab12345cde"));
+  test(S("abcde"), 2, 0, str, str + 9, S("ab123456789cde"));
+  test(S("abcde"), 2, 0, str, str + 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 2, 0, str, str + 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, str, str + 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, str, str + 19, S("ab1234567890123456789cde"));
+  test(S("abcde"), 2, 0, str, str + 20, S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 1, str, str + 0, S("abde"));
+  test(S("abcde"), 2, 1, str, str + 0, S("abde"));
+  test(S("abcde"), 2, 1, str, str + 1, S("ab1de"));
+  test(S("abcde"), 2, 1, str, str + 2, S("ab12de"));
+  test(S("abcde"), 2, 1, str, str + 4, S("ab1234de"));
+  test(S("abcde"), 2, 1, str, str + 5, S("ab12345de"));
+  test(S("abcde"), 2, 1, str, str + 0, S("abde"));
+  test(S("abcde"), 2, 1, str, str + 1, S("ab1de"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S("abcde"), 2, 1, str, str+5, S("ab12345de"));
-    test(S("abcde"), 2, 1, str, str+9, S("ab123456789de"));
-    test(S("abcde"), 2, 1, str, str+10, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, str, str+0, S("abde"));
-    test(S("abcde"), 2, 1, str, str+1, S("ab1de"));
-    test(S("abcde"), 2, 1, str, str+10, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, str, str+19, S("ab1234567890123456789de"));
-    test(S("abcde"), 2, 1, str, str+20, S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 2, str, str+0, S("abe"));
-    test(S("abcde"), 2, 2, str, str+0, S("abe"));
-    test(S("abcde"), 2, 2, str, str+1, S("ab1e"));
-    test(S("abcde"), 2, 2, str, str+2, S("ab12e"));
-    test(S("abcde"), 2, 2, str, str+4, S("ab1234e"));
-    test(S("abcde"), 2, 2, str, str+5, S("ab12345e"));
-    test(S("abcde"), 2, 2, str, str+0, S("abe"));
-    test(S("abcde"), 2, 2, str, str+1, S("ab1e"));
-    test(S("abcde"), 2, 2, str, str+5, S("ab12345e"));
-    test(S("abcde"), 2, 2, str, str+9, S("ab123456789e"));
-    test(S("abcde"), 2, 2, str, str+10, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, str, str+0, S("abe"));
-    test(S("abcde"), 2, 2, str, str+1, S("ab1e"));
-    test(S("abcde"), 2, 2, str, str+10, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, str, str+19, S("ab1234567890123456789e"));
-    test(S("abcde"), 2, 2, str, str+20, S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 3, str, str+0, S("ab"));
-    test(S("abcde"), 2, 3, str, str+0, S("ab"));
-    test(S("abcde"), 2, 3, str, str+1, S("ab1"));
-    test(S("abcde"), 2, 3, str, str+2, S("ab12"));
-    test(S("abcde"), 2, 3, str, str+4, S("ab1234"));
-    test(S("abcde"), 2, 3, str, str+5, S("ab12345"));
-    test(S("abcde"), 2, 3, str, str+0, S("ab"));
-    test(S("abcde"), 2, 3, str, str+1, S("ab1"));
-    test(S("abcde"), 2, 3, str, str+5, S("ab12345"));
-    test(S("abcde"), 2, 3, str, str+9, S("ab123456789"));
-    test(S("abcde"), 2, 3, str, str+10, S("ab1234567890"));
-    test(S("abcde"), 2, 3, str, str+0, S("ab"));
-    test(S("abcde"), 2, 3, str, str+1, S("ab1"));
-    test(S("abcde"), 2, 3, str, str+10, S("ab1234567890"));
-    test(S("abcde"), 2, 3, str, str+19, S("ab1234567890123456789"));
-    test(S("abcde"), 2, 3, str, str+20, S("ab12345678901234567890"));
-    test(S("abcde"), 4, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 4, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 4, 0, str, str+1, S("abcd1e"));
-    test(S("abcde"), 4, 0, str, str+2, S("abcd12e"));
-    test(S("abcde"), 4, 0, str, str+4, S("abcd1234e"));
-    test(S("abcde"), 4, 0, str, str+5, S("abcd12345e"));
-    test(S("abcde"), 4, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 4, 0, str, str+1, S("abcd1e"));
-    test(S("abcde"), 4, 0, str, str+5, S("abcd12345e"));
-    test(S("abcde"), 4, 0, str, str+9, S("abcd123456789e"));
-    test(S("abcde"), 4, 0, str, str+10, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 4, 0, str, str+1, S("abcd1e"));
-    test(S("abcde"), 4, 0, str, str+10, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, str, str+19, S("abcd1234567890123456789e"));
-    test(S("abcde"), 4, 0, str, str+20, S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 1, str, str+0, S("abcd"));
-    test(S("abcde"), 4, 1, str, str+0, S("abcd"));
-    test(S("abcde"), 4, 1, str, str+1, S("abcd1"));
-    test(S("abcde"), 4, 1, str, str+2, S("abcd12"));
-    test(S("abcde"), 4, 1, str, str+4, S("abcd1234"));
-    test(S("abcde"), 4, 1, str, str+5, S("abcd12345"));
-    test(S("abcde"), 4, 1, str, str+0, S("abcd"));
-    test(S("abcde"), 4, 1, str, str+1, S("abcd1"));
-    test(S("abcde"), 4, 1, str, str+5, S("abcd12345"));
-    test(S("abcde"), 4, 1, str, str+9, S("abcd123456789"));
-    test(S("abcde"), 4, 1, str, str+10, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, str, str+0, S("abcd"));
-    test(S("abcde"), 4, 1, str, str+1, S("abcd1"));
-    test(S("abcde"), 4, 1, str, str+10, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, str, str+19, S("abcd1234567890123456789"));
-    test(S("abcde"), 4, 1, str, str+20, S("abcd12345678901234567890"));
-    test(S("abcde"), 5, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 5, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 5, 0, str, str+1, S("abcde1"));
-    test(S("abcde"), 5, 0, str, str+2, S("abcde12"));
-    test(S("abcde"), 5, 0, str, str+4, S("abcde1234"));
-    test(S("abcde"), 5, 0, str, str+5, S("abcde12345"));
-    test(S("abcde"), 5, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 5, 0, str, str+1, S("abcde1"));
-    test(S("abcde"), 5, 0, str, str+5, S("abcde12345"));
-    test(S("abcde"), 5, 0, str, str+9, S("abcde123456789"));
-    test(S("abcde"), 5, 0, str, str+10, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, str, str+0, S("abcde"));
-    test(S("abcde"), 5, 0, str, str+1, S("abcde1"));
-    test(S("abcde"), 5, 0, str, str+10, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, str, str+19, S("abcde1234567890123456789"));
-    test(S("abcde"), 5, 0, str, str+20, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 0, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+2, S("12abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+4, S("1234abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+9, S("123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+0, S("abcdefghij"));
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S("abcde"), 2, 1, str, str + 5, S("ab12345de"));
+  test(S("abcde"), 2, 1, str, str + 9, S("ab123456789de"));
+  test(S("abcde"), 2, 1, str, str + 10, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, str, str + 0, S("abde"));
+  test(S("abcde"), 2, 1, str, str + 1, S("ab1de"));
+  test(S("abcde"), 2, 1, str, str + 10, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, str, str + 19, S("ab1234567890123456789de"));
+  test(S("abcde"), 2, 1, str, str + 20, S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 2, str, str + 0, S("abe"));
+  test(S("abcde"), 2, 2, str, str + 0, S("abe"));
+  test(S("abcde"), 2, 2, str, str + 1, S("ab1e"));
+  test(S("abcde"), 2, 2, str, str + 2, S("ab12e"));
+  test(S("abcde"), 2, 2, str, str + 4, S("ab1234e"));
+  test(S("abcde"), 2, 2, str, str + 5, S("ab12345e"));
+  test(S("abcde"), 2, 2, str, str + 0, S("abe"));
+  test(S("abcde"), 2, 2, str, str + 1, S("ab1e"));
+  test(S("abcde"), 2, 2, str, str + 5, S("ab12345e"));
+  test(S("abcde"), 2, 2, str, str + 9, S("ab123456789e"));
+  test(S("abcde"), 2, 2, str, str + 10, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, str, str + 0, S("abe"));
+  test(S("abcde"), 2, 2, str, str + 1, S("ab1e"));
+  test(S("abcde"), 2, 2, str, str + 10, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, str, str + 19, S("ab1234567890123456789e"));
+  test(S("abcde"), 2, 2, str, str + 20, S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 3, str, str + 0, S("ab"));
+  test(S("abcde"), 2, 3, str, str + 0, S("ab"));
+  test(S("abcde"), 2, 3, str, str + 1, S("ab1"));
+  test(S("abcde"), 2, 3, str, str + 2, S("ab12"));
+  test(S("abcde"), 2, 3, str, str + 4, S("ab1234"));
+  test(S("abcde"), 2, 3, str, str + 5, S("ab12345"));
+  test(S("abcde"), 2, 3, str, str + 0, S("ab"));
+  test(S("abcde"), 2, 3, str, str + 1, S("ab1"));
+  test(S("abcde"), 2, 3, str, str + 5, S("ab12345"));
+  test(S("abcde"), 2, 3, str, str + 9, S("ab123456789"));
+  test(S("abcde"), 2, 3, str, str + 10, S("ab1234567890"));
+  test(S("abcde"), 2, 3, str, str + 0, S("ab"));
+  test(S("abcde"), 2, 3, str, str + 1, S("ab1"));
+  test(S("abcde"), 2, 3, str, str + 10, S("ab1234567890"));
+  test(S("abcde"), 2, 3, str, str + 19, S("ab1234567890123456789"));
+  test(S("abcde"), 2, 3, str, str + 20, S("ab12345678901234567890"));
+  test(S("abcde"), 4, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 4, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 4, 0, str, str + 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, str, str + 2, S("abcd12e"));
+  test(S("abcde"), 4, 0, str, str + 4, S("abcd1234e"));
+  test(S("abcde"), 4, 0, str, str + 5, S("abcd12345e"));
+  test(S("abcde"), 4, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 4, 0, str, str + 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, str, str + 5, S("abcd12345e"));
+  test(S("abcde"), 4, 0, str, str + 9, S("abcd123456789e"));
+  test(S("abcde"), 4, 0, str, str + 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 4, 0, str, str + 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, str, str + 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, str, str + 19, S("abcd1234567890123456789e"));
+  test(S("abcde"), 4, 0, str, str + 20, S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 1, str, str + 0, S("abcd"));
+  test(S("abcde"), 4, 1, str, str + 0, S("abcd"));
+  test(S("abcde"), 4, 1, str, str + 1, S("abcd1"));
+  test(S("abcde"), 4, 1, str, str + 2, S("abcd12"));
+  test(S("abcde"), 4, 1, str, str + 4, S("abcd1234"));
+  test(S("abcde"), 4, 1, str, str + 5, S("abcd12345"));
+  test(S("abcde"), 4, 1, str, str + 0, S("abcd"));
+  test(S("abcde"), 4, 1, str, str + 1, S("abcd1"));
+  test(S("abcde"), 4, 1, str, str + 5, S("abcd12345"));
+  test(S("abcde"), 4, 1, str, str + 9, S("abcd123456789"));
+  test(S("abcde"), 4, 1, str, str + 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, str, str + 0, S("abcd"));
+  test(S("abcde"), 4, 1, str, str + 1, S("abcd1"));
+  test(S("abcde"), 4, 1, str, str + 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, str, str + 19, S("abcd1234567890123456789"));
+  test(S("abcde"), 4, 1, str, str + 20, S("abcd12345678901234567890"));
+  test(S("abcde"), 5, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 5, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 5, 0, str, str + 1, S("abcde1"));
+  test(S("abcde"), 5, 0, str, str + 2, S("abcde12"));
+  test(S("abcde"), 5, 0, str, str + 4, S("abcde1234"));
+  test(S("abcde"), 5, 0, str, str + 5, S("abcde12345"));
+  test(S("abcde"), 5, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 5, 0, str, str + 1, S("abcde1"));
+  test(S("abcde"), 5, 0, str, str + 5, S("abcde12345"));
+  test(S("abcde"), 5, 0, str, str + 9, S("abcde123456789"));
+  test(S("abcde"), 5, 0, str, str + 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, str, str + 0, S("abcde"));
+  test(S("abcde"), 5, 0, str, str + 1, S("abcde1"));
+  test(S("abcde"), 5, 0, str, str + 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, str, str + 19, S("abcde1234567890123456789"));
+  test(S("abcde"), 5, 0, str, str + 20, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 0, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 2, S("12abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 4, S("1234abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 9, S("123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 0, S("abcdefghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test3()
-{
-    test(S("abcdefghij"), 0, 0, str, str+1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+19, S("1234567890123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, str, str+20, S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+2, S("12bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+4, S("1234bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+5, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+5, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+9, S("123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+10, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+10, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+19, S("1234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, str, str+20, S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 5, str, str+0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+2, S("12fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+4, S("1234fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+5, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+5, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+9, S("123456789fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+10, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+10, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+19, S("1234567890123456789fghij"));
-    test(S("abcdefghij"), 0, 5, str, str+20, S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 9, str, str+0, S("j"));
-    test(S("abcdefghij"), 0, 9, str, str+0, S("j"));
-    test(S("abcdefghij"), 0, 9, str, str+1, S("1j"));
-    test(S("abcdefghij"), 0, 9, str, str+2, S("12j"));
-    test(S("abcdefghij"), 0, 9, str, str+4, S("1234j"));
-    test(S("abcdefghij"), 0, 9, str, str+5, S("12345j"));
-    test(S("abcdefghij"), 0, 9, str, str+0, S("j"));
-    test(S("abcdefghij"), 0, 9, str, str+1, S("1j"));
-    test(S("abcdefghij"), 0, 9, str, str+5, S("12345j"));
-    test(S("abcdefghij"), 0, 9, str, str+9, S("123456789j"));
-    test(S("abcdefghij"), 0, 9, str, str+10, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, str, str+0, S("j"));
-    test(S("abcdefghij"), 0, 9, str, str+1, S("1j"));
-    test(S("abcdefghij"), 0, 9, str, str+10, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, str, str+19, S("1234567890123456789j"));
-    test(S("abcdefghij"), 0, 9, str, str+20, S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 10, str, str+0, S(""));
-    test(S("abcdefghij"), 0, 10, str, str+0, S(""));
-    test(S("abcdefghij"), 0, 10, str, str+1, S("1"));
-    test(S("abcdefghij"), 0, 10, str, str+2, S("12"));
-    test(S("abcdefghij"), 0, 10, str, str+4, S("1234"));
-    test(S("abcdefghij"), 0, 10, str, str+5, S("12345"));
-    test(S("abcdefghij"), 0, 10, str, str+0, S(""));
-    test(S("abcdefghij"), 0, 10, str, str+1, S("1"));
-    test(S("abcdefghij"), 0, 10, str, str+5, S("12345"));
-    test(S("abcdefghij"), 0, 10, str, str+9, S("123456789"));
-    test(S("abcdefghij"), 0, 10, str, str+10, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, str, str+0, S(""));
-    test(S("abcdefghij"), 0, 10, str, str+1, S("1"));
-    test(S("abcdefghij"), 0, 10, str, str+10, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, str, str+19, S("1234567890123456789"));
-    test(S("abcdefghij"), 0, 10, str, str+20, S("12345678901234567890"));
-    test(S("abcdefghij"), 1, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+2, S("a12bcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+4, S("a1234bcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+9, S("a123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+19, S("a1234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, str, str+20, S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+2, S("a12cdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+4, S("a1234cdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+5, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+5, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+9, S("a123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+10, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+10, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+19, S("a1234567890123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, str, str+20, S("a12345678901234567890cdefghij"));
+TEST_CONSTEXPR_CXX20 bool test3() {
+  test(S("abcdefghij"), 0, 0, str, str + 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 19, S("1234567890123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, str, str + 20, S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 2, S("12bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 4, S("1234bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 5, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 5, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 9, S("123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 10, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 10, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 19, S("1234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, str, str + 20, S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 2, S("12fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 4, S("1234fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 5, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 5, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 9, S("123456789fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 10, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 10, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 19, S("1234567890123456789fghij"));
+  test(S("abcdefghij"), 0, 5, str, str + 20, S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 9, str, str + 0, S("j"));
+  test(S("abcdefghij"), 0, 9, str, str + 0, S("j"));
+  test(S("abcdefghij"), 0, 9, str, str + 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, str, str + 2, S("12j"));
+  test(S("abcdefghij"), 0, 9, str, str + 4, S("1234j"));
+  test(S("abcdefghij"), 0, 9, str, str + 5, S("12345j"));
+  test(S("abcdefghij"), 0, 9, str, str + 0, S("j"));
+  test(S("abcdefghij"), 0, 9, str, str + 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, str, str + 5, S("12345j"));
+  test(S("abcdefghij"), 0, 9, str, str + 9, S("123456789j"));
+  test(S("abcdefghij"), 0, 9, str, str + 10, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, str, str + 0, S("j"));
+  test(S("abcdefghij"), 0, 9, str, str + 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, str, str + 10, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, str, str + 19, S("1234567890123456789j"));
+  test(S("abcdefghij"), 0, 9, str, str + 20, S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 10, str, str + 0, S(""));
+  test(S("abcdefghij"), 0, 10, str, str + 0, S(""));
+  test(S("abcdefghij"), 0, 10, str, str + 1, S("1"));
+  test(S("abcdefghij"), 0, 10, str, str + 2, S("12"));
+  test(S("abcdefghij"), 0, 10, str, str + 4, S("1234"));
+  test(S("abcdefghij"), 0, 10, str, str + 5, S("12345"));
+  test(S("abcdefghij"), 0, 10, str, str + 0, S(""));
+  test(S("abcdefghij"), 0, 10, str, str + 1, S("1"));
+  test(S("abcdefghij"), 0, 10, str, str + 5, S("12345"));
+  test(S("abcdefghij"), 0, 10, str, str + 9, S("123456789"));
+  test(S("abcdefghij"), 0, 10, str, str + 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, str, str + 0, S(""));
+  test(S("abcdefghij"), 0, 10, str, str + 1, S("1"));
+  test(S("abcdefghij"), 0, 10, str, str + 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, str, str + 19, S("1234567890123456789"));
+  test(S("abcdefghij"), 0, 10, str, str + 20, S("12345678901234567890"));
+  test(S("abcdefghij"), 1, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 2, S("a12bcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 4, S("a1234bcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 9, S("a123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 19, S("a1234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, str, str + 20, S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 2, S("a12cdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 4, S("a1234cdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 5, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 5, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 9, S("a123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 10, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 10, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 19, S("a1234567890123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, str, str + 20, S("a12345678901234567890cdefghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test4()
-{
-    test(S("abcdefghij"), 1, 4, str, str+0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, str, str+0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, str, str+1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, str, str+2, S("a12fghij"));
-    test(S("abcdefghij"), 1, 4, str, str+4, S("a1234fghij"));
-    test(S("abcdefghij"), 1, 4, str, str+5, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, str, str+0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, str, str+1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, str, str+5, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, str, str+9, S("a123456789fghij"));
-    test(S("abcdefghij"), 1, 4, str, str+10, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, str, str+0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, str, str+1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, str, str+10, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, str, str+19, S("a1234567890123456789fghij"));
-    test(S("abcdefghij"), 1, 4, str, str+20, S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 8, str, str+0, S("aj"));
-    test(S("abcdefghij"), 1, 8, str, str+0, S("aj"));
-    test(S("abcdefghij"), 1, 8, str, str+1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, str, str+2, S("a12j"));
-    test(S("abcdefghij"), 1, 8, str, str+4, S("a1234j"));
-    test(S("abcdefghij"), 1, 8, str, str+5, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, str, str+0, S("aj"));
-    test(S("abcdefghij"), 1, 8, str, str+1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, str, str+5, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, str, str+9, S("a123456789j"));
-    test(S("abcdefghij"), 1, 8, str, str+10, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, str, str+0, S("aj"));
-    test(S("abcdefghij"), 1, 8, str, str+1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, str, str+10, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, str, str+19, S("a1234567890123456789j"));
-    test(S("abcdefghij"), 1, 8, str, str+20, S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 9, str, str+0, S("a"));
-    test(S("abcdefghij"), 1, 9, str, str+0, S("a"));
-    test(S("abcdefghij"), 1, 9, str, str+1, S("a1"));
-    test(S("abcdefghij"), 1, 9, str, str+2, S("a12"));
-    test(S("abcdefghij"), 1, 9, str, str+4, S("a1234"));
-    test(S("abcdefghij"), 1, 9, str, str+5, S("a12345"));
-    test(S("abcdefghij"), 1, 9, str, str+0, S("a"));
-    test(S("abcdefghij"), 1, 9, str, str+1, S("a1"));
-    test(S("abcdefghij"), 1, 9, str, str+5, S("a12345"));
-    test(S("abcdefghij"), 1, 9, str, str+9, S("a123456789"));
-    test(S("abcdefghij"), 1, 9, str, str+10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, str, str+0, S("a"));
-    test(S("abcdefghij"), 1, 9, str, str+1, S("a1"));
-    test(S("abcdefghij"), 1, 9, str, str+10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, str, str+19, S("a1234567890123456789"));
-    test(S("abcdefghij"), 1, 9, str, str+20, S("a12345678901234567890"));
-    test(S("abcdefghij"), 5, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, str, str+1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, str, str+2, S("abcde12fghij"));
-    test(S("abcdefghij"), 5, 0, str, str+4, S("abcde1234fghij"));
-    test(S("abcdefghij"), 5, 0, str, str+5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, str, str+1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, str, str+5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, str, str+9, S("abcde123456789fghij"));
-    test(S("abcdefghij"), 5, 0, str, str+10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, str, str+1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, str, str+10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, str, str+19, S("abcde1234567890123456789fghij"));
-    test(S("abcdefghij"), 5, 0, str, str+20, S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 1, str, str+0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, str, str+0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, str, str+1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, str, str+2, S("abcde12ghij"));
-    test(S("abcdefghij"), 5, 1, str, str+4, S("abcde1234ghij"));
-    test(S("abcdefghij"), 5, 1, str, str+5, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, str, str+0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, str, str+1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, str, str+5, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, str, str+9, S("abcde123456789ghij"));
-    test(S("abcdefghij"), 5, 1, str, str+10, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, str, str+0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, str, str+1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, str, str+10, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, str, str+19, S("abcde1234567890123456789ghij"));
-    test(S("abcdefghij"), 5, 1, str, str+20, S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 2, str, str+0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, str, str+0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, str, str+1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, str, str+2, S("abcde12hij"));
-    test(S("abcdefghij"), 5, 2, str, str+4, S("abcde1234hij"));
-    test(S("abcdefghij"), 5, 2, str, str+5, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, str, str+0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, str, str+1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, str, str+5, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, str, str+9, S("abcde123456789hij"));
-    test(S("abcdefghij"), 5, 2, str, str+10, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, str, str+0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, str, str+1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, str, str+10, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, str, str+19, S("abcde1234567890123456789hij"));
-    test(S("abcdefghij"), 5, 2, str, str+20, S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 4, str, str+0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, str, str+0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, str, str+1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, str, str+2, S("abcde12j"));
+TEST_CONSTEXPR_CXX20 bool test4() {
+  test(S("abcdefghij"), 1, 4, str, str + 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 2, S("a12fghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 4, S("a1234fghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 5, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 5, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 9, S("a123456789fghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 10, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 10, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 19, S("a1234567890123456789fghij"));
+  test(S("abcdefghij"), 1, 4, str, str + 20, S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 8, str, str + 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, str, str + 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, str, str + 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, str, str + 2, S("a12j"));
+  test(S("abcdefghij"), 1, 8, str, str + 4, S("a1234j"));
+  test(S("abcdefghij"), 1, 8, str, str + 5, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, str, str + 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, str, str + 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, str, str + 5, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, str, str + 9, S("a123456789j"));
+  test(S("abcdefghij"), 1, 8, str, str + 10, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, str, str + 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, str, str + 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, str, str + 10, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, str, str + 19, S("a1234567890123456789j"));
+  test(S("abcdefghij"), 1, 8, str, str + 20, S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 9, str, str + 0, S("a"));
+  test(S("abcdefghij"), 1, 9, str, str + 0, S("a"));
+  test(S("abcdefghij"), 1, 9, str, str + 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, str, str + 2, S("a12"));
+  test(S("abcdefghij"), 1, 9, str, str + 4, S("a1234"));
+  test(S("abcdefghij"), 1, 9, str, str + 5, S("a12345"));
+  test(S("abcdefghij"), 1, 9, str, str + 0, S("a"));
+  test(S("abcdefghij"), 1, 9, str, str + 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, str, str + 5, S("a12345"));
+  test(S("abcdefghij"), 1, 9, str, str + 9, S("a123456789"));
+  test(S("abcdefghij"), 1, 9, str, str + 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, str, str + 0, S("a"));
+  test(S("abcdefghij"), 1, 9, str, str + 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, str, str + 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, str, str + 19, S("a1234567890123456789"));
+  test(S("abcdefghij"), 1, 9, str, str + 20, S("a12345678901234567890"));
+  test(S("abcdefghij"), 5, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 2, S("abcde12fghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 4, S("abcde1234fghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 9, S("abcde123456789fghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 19, S("abcde1234567890123456789fghij"));
+  test(S("abcdefghij"), 5, 0, str, str + 20, S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 2, S("abcde12ghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 4, S("abcde1234ghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 5, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 5, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 9, S("abcde123456789ghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 10, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 10, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 19, S("abcde1234567890123456789ghij"));
+  test(S("abcdefghij"), 5, 1, str, str + 20, S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 2, str, str + 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, str, str + 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, str, str + 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, str, str + 2, S("abcde12hij"));
+  test(S("abcdefghij"), 5, 2, str, str + 4, S("abcde1234hij"));
+  test(S("abcdefghij"), 5, 2, str, str + 5, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, str, str + 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, str, str + 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, str, str + 5, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, str, str + 9, S("abcde123456789hij"));
+  test(S("abcdefghij"), 5, 2, str, str + 10, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, str, str + 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, str, str + 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, str, str + 10, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, str, str + 19, S("abcde1234567890123456789hij"));
+  test(S("abcdefghij"), 5, 2, str, str + 20, S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 4, str, str + 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, str, str + 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, str, str + 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, str, str + 2, S("abcde12j"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test5()
-{
-    test(S("abcdefghij"), 5, 4, str, str+4, S("abcde1234j"));
-    test(S("abcdefghij"), 5, 4, str, str+5, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, str, str+0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, str, str+1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, str, str+5, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, str, str+9, S("abcde123456789j"));
-    test(S("abcdefghij"), 5, 4, str, str+10, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, str, str+0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, str, str+1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, str, str+10, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, str, str+19, S("abcde1234567890123456789j"));
-    test(S("abcdefghij"), 5, 4, str, str+20, S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 5, str, str+0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, str, str+0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, str, str+1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, str, str+2, S("abcde12"));
-    test(S("abcdefghij"), 5, 5, str, str+4, S("abcde1234"));
-    test(S("abcdefghij"), 5, 5, str, str+5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, str, str+0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, str, str+1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, str, str+5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, str, str+9, S("abcde123456789"));
-    test(S("abcdefghij"), 5, 5, str, str+10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, str, str+0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, str, str+1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, str, str+10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, str, str+19, S("abcde1234567890123456789"));
-    test(S("abcdefghij"), 5, 5, str, str+20, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 9, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, str, str+1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, str, str+2, S("abcdefghi12j"));
-    test(S("abcdefghij"), 9, 0, str, str+4, S("abcdefghi1234j"));
-    test(S("abcdefghij"), 9, 0, str, str+5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, str, str+1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, str, str+5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, str, str+9, S("abcdefghi123456789j"));
-    test(S("abcdefghij"), 9, 0, str, str+10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, str, str+1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, str, str+10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, str, str+19, S("abcdefghi1234567890123456789j"));
-    test(S("abcdefghij"), 9, 0, str, str+20, S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 1, str, str+0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, str, str+0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, str, str+1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, str, str+2, S("abcdefghi12"));
-    test(S("abcdefghij"), 9, 1, str, str+4, S("abcdefghi1234"));
-    test(S("abcdefghij"), 9, 1, str, str+5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, str, str+0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, str, str+1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, str, str+5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, str, str+9, S("abcdefghi123456789"));
-    test(S("abcdefghij"), 9, 1, str, str+10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, str, str+0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, str, str+1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, str, str+10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, str, str+19, S("abcdefghi1234567890123456789"));
-    test(S("abcdefghij"), 9, 1, str, str+20, S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, str, str+1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, str, str+2, S("abcdefghij12"));
-    test(S("abcdefghij"), 10, 0, str, str+4, S("abcdefghij1234"));
-    test(S("abcdefghij"), 10, 0, str, str+5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, str, str+1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, str, str+5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, str, str+9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, 0, str, str+10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, str, str+0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, str, str+1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, str, str+10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, str, str+19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghij"), 10, 0, str, str+20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+2, S("12abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+4, S("1234abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+9, S("123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+19, S("1234567890123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, str, str+20, S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+2, S("12bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+4, S("1234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+5, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+1, S("1bcdefghijklmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test5() {
+  test(S("abcdefghij"), 5, 4, str, str + 4, S("abcde1234j"));
+  test(S("abcdefghij"), 5, 4, str, str + 5, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, str, str + 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, str, str + 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, str, str + 5, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, str, str + 9, S("abcde123456789j"));
+  test(S("abcdefghij"), 5, 4, str, str + 10, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, str, str + 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, str, str + 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, str, str + 10, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, str, str + 19, S("abcde1234567890123456789j"));
+  test(S("abcdefghij"), 5, 4, str, str + 20, S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 5, str, str + 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, str, str + 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, str, str + 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, str, str + 2, S("abcde12"));
+  test(S("abcdefghij"), 5, 5, str, str + 4, S("abcde1234"));
+  test(S("abcdefghij"), 5, 5, str, str + 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, str, str + 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, str, str + 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, str, str + 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, str, str + 9, S("abcde123456789"));
+  test(S("abcdefghij"), 5, 5, str, str + 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, str, str + 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, str, str + 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, str, str + 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, str, str + 19, S("abcde1234567890123456789"));
+  test(S("abcdefghij"), 5, 5, str, str + 20, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 9, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, str, str + 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, str, str + 2, S("abcdefghi12j"));
+  test(S("abcdefghij"), 9, 0, str, str + 4, S("abcdefghi1234j"));
+  test(S("abcdefghij"), 9, 0, str, str + 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, str, str + 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, str, str + 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, str, str + 9, S("abcdefghi123456789j"));
+  test(S("abcdefghij"), 9, 0, str, str + 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, str, str + 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, str, str + 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, str, str + 19, S("abcdefghi1234567890123456789j"));
+  test(S("abcdefghij"), 9, 0, str, str + 20, S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 1, str, str + 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, str, str + 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, str, str + 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, str, str + 2, S("abcdefghi12"));
+  test(S("abcdefghij"), 9, 1, str, str + 4, S("abcdefghi1234"));
+  test(S("abcdefghij"), 9, 1, str, str + 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, str, str + 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, str, str + 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, str, str + 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, str, str + 9, S("abcdefghi123456789"));
+  test(S("abcdefghij"), 9, 1, str, str + 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, str, str + 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, str, str + 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, str, str + 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, str, str + 19, S("abcdefghi1234567890123456789"));
+  test(S("abcdefghij"), 9, 1, str, str + 20, S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, str, str + 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, str, str + 2, S("abcdefghij12"));
+  test(S("abcdefghij"), 10, 0, str, str + 4, S("abcdefghij1234"));
+  test(S("abcdefghij"), 10, 0, str, str + 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, str, str + 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, str, str + 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, str, str + 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, 0, str, str + 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, str, str + 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, str, str + 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, str, str + 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghij"), 10, 0, str, str + 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 2, S("12abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 4, S("1234abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 9, S("123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 19, S("1234567890123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, str, str + 20, S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 2, S("12bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 4, S("1234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 5, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 1, S("1bcdefghijklmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test6()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+5, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+9, S("123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+10, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+10, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+19, S("1234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, str, str+20, S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+2, S("12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+4, S("1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+5, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+5, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+9, S("123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+10, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+10, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+19, S("1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, str, str+20, S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+2, S("12t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+4, S("1234t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+5, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+5, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+9, S("123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+10, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+10, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+19, S("1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, str, str+20, S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+2, S("12"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+4, S("1234"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+9, S("123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+19, S("1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, str, str+20, S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+2, S("a12bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+4, S("a1234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+9, S("a123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+19, S("a1234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, str, str+20, S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+2, S("a12cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+4, S("a1234cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+5, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+5, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+9, S("a123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+10, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+10, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+19, S("a1234567890123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, str, str+20, S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+2, S("a12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+4, S("a1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+5, S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+5, S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+9, S("a123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+10, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+0, S("aklmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test6() {
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 5, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 9, S("123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 10, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 10, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 19, S("1234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, str, str + 20, S("12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 2, S("12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 4, S("1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 5, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 5, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 9, S("123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 10, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 10, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 19, S("1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, str, str + 20, S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 2, S("12t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 4, S("1234t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 5, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 5, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 9, S("123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 10, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 10, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 19, S("1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, str, str + 20, S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 2, S("12"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 4, S("1234"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 9, S("123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 19, S("1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, str, str + 20, S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 2, S("a12bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 4, S("a1234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 9, S("a123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 19, S("a1234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, str, str + 20, S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 2, S("a12cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 4, S("a1234cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 5, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 5, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 9, S("a123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 10, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 10, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 19, S("a1234567890123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, str, str + 20, S("a12345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 2, S("a12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 4, S("a1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 5, S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 5, S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 9, S("a123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 10, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 0, S("aklmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test7()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+10, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+19, S("a1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, str, str+20, S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+2, S("a12t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+4, S("a1234t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+5, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+5, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+9, S("a123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+10, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+10, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+19, S("a1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, str, str+20, S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+2, S("a12"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+4, S("a1234"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+9, S("a123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+19, S("a1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, str, str+20, S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+2, S("abcdefghij12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+4, S("abcdefghij1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+9, S("abcdefghij123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+19, S("abcdefghij1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, str, str+20, S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+2, S("abcdefghij12lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+4, S("abcdefghij1234lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+5, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+5, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+9, S("abcdefghij123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+10, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+10, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+19, S("abcdefghij1234567890123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, str, str+20, S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+2, S("abcdefghij12pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+4, S("abcdefghij1234pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+5, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+5, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+9, S("abcdefghij123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+10, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+10, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+19, S("abcdefghij1234567890123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, str, str+20, S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+2, S("abcdefghij12t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+4, S("abcdefghij1234t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+5, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+5, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+9, S("abcdefghij123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+10, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+10, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+19, S("abcdefghij1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, str, str+20, S("abcdefghij12345678901234567890t"));
+TEST_CONSTEXPR_CXX20 bool test7() {
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 10, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 19, S("a1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, str, str + 20, S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 2, S("a12t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 4, S("a1234t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 5, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 5, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 9, S("a123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 10, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 10, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 19, S("a1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, str, str + 20, S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 2, S("a12"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 4, S("a1234"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 9, S("a123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 19, S("a1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, str, str + 20, S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 2, S("abcdefghij12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 4, S("abcdefghij1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 9, S("abcdefghij123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 19, S("abcdefghij1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, str, str + 20, S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 2, S("abcdefghij12lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 4, S("abcdefghij1234lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 5, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 5, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 9, S("abcdefghij123456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 10, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 10, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 19, S("abcdefghij1234567890123456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, str, str + 20, S("abcdefghij12345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 2, S("abcdefghij12pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 4, S("abcdefghij1234pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 5, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 5, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 9, S("abcdefghij123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 10, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 10, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 19, S("abcdefghij1234567890123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, str, str + 20, S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 2, S("abcdefghij12t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 4, S("abcdefghij1234t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 5, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 5, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 9, S("abcdefghij123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 10, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 10, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 19, S("abcdefghij1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, str, str + 20, S("abcdefghij12345678901234567890t"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test8()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+2, S("abcdefghij12"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+4, S("abcdefghij1234"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+9, S("abcdefghij123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, str, str+20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+2, S("abcdefghijklmnopqrs12t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+4, S("abcdefghijklmnopqrs1234t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+9, S("abcdefghijklmnopqrs123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+19, S("abcdefghijklmnopqrs1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, str, str+20, S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+2, S("abcdefghijklmnopqrs12"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+4, S("abcdefghijklmnopqrs1234"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+9, S("abcdefghijklmnopqrs123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+19, S("abcdefghijklmnopqrs1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, str, str+20, S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+2, S("abcdefghijklmnopqrst12"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+4, S("abcdefghijklmnopqrst1234"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+19, S("abcdefghijklmnopqrst1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, str, str+20, S("abcdefghijklmnopqrst12345678901234567890"));
+TEST_CONSTEXPR_CXX20 bool test8() {
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 2, S("abcdefghij12"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 4, S("abcdefghij1234"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 9, S("abcdefghij123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, str, str + 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 2, S("abcdefghijklmnopqrs12t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 4, S("abcdefghijklmnopqrs1234t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 9, S("abcdefghijklmnopqrs123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 19, S("abcdefghijklmnopqrs1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, str, str + 20, S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 2, S("abcdefghijklmnopqrs12"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 4, S("abcdefghijklmnopqrs1234"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 9, S("abcdefghijklmnopqrs123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 19, S("abcdefghijklmnopqrs1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, str, str + 20, S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 2, S("abcdefghijklmnopqrst12"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 4, S("abcdefghijklmnopqrst1234"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 19, S("abcdefghijklmnopqrst1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, str, str + 20, S("abcdefghijklmnopqrst12345678901234567890"));
 
-    return true;
+  return true;
 }
 
 template <class S>
@@ -999,16 +989,16 @@ TEST_CONSTEXPR_CXX20 bool test9() {
     typedef ThrowingIterator<char> TIter;
     typedef cpp17_input_iterator<TIter> IIter;
     const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, IIter(TIter(s, s+10, 4, TIter::TAIncrement)), IIter(TIter()));
-    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, IIter(TIter(s, s+10, 5, TIter::TADereference)), IIter(TIter()));
-    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, IIter(TIter(s, s+10, 6, TIter::TAComparison)), IIter(TIter()));
+    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, IIter(TIter(s, s + 10, 4, TIter::TAIncrement)), IIter(TIter()));
+    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, IIter(TIter(s, s + 10, 5, TIter::TADereference)), IIter(TIter()));
+    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, IIter(TIter(s, s + 10, 6, TIter::TAComparison)), IIter(TIter()));
 
-    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, TIter(s, s+10, 4, TIter::TAIncrement), TIter());
-    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, TIter(s, s+10, 5, TIter::TADereference), TIter());
-    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, TIter(s, s+10, 6, TIter::TAComparison), TIter());
+    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, TIter(s, s + 10, 4, TIter::TAIncrement), TIter());
+    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, TIter(s, s + 10, 5, TIter::TADereference), TIter());
+    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, TIter(s, s + 10, 6, TIter::TAComparison), TIter());
 
     Widget w[100];
-    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, w, w+100);
+    test_exceptions(S("abcdefghijklmnopqrst"), 10, 5, w, w + 100);
   }
 #endif
 
@@ -1029,7 +1019,7 @@ TEST_CONSTEXPR_CXX20 bool test9() {
 
   { // test assigning a 
diff erent type
     const std::uint8_t pc[] = "ABCD";
-    std::uint8_t        p[] = "EFGH";
+    std::uint8_t p[]        = "EFGH";
 
     S s;
     s.replace(s.begin(), s.end(), pc, pc + 4);
@@ -1070,8 +1060,7 @@ void test() {
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp
index b60cb343b720416..79c3bce081acf24 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp
@@ -22,269 +22,265 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(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);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
-    typename S::size_type rlen = S::traits_type::length(str);
-    assert(s.size() == old_size - xlen + rlen);
+test(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);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
+  typename S::size_type rlen = S::traits_type::length(str);
+  assert(s.size() == old_size - xlen + rlen);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, "", S(""));
-    test(S(""), 0, 0, "12345", S("12345"));
-    test(S(""), 0, 0, "1234567890", S("1234567890"));
-    test(S(""), 0, 0, "12345678901234567890", S("12345678901234567890"));
-    test(S("abcde"), 0, 0, "", S("abcde"));
-    test(S("abcde"), 0, 0, "12345", S("12345abcde"));
-    test(S("abcde"), 0, 0, "1234567890", S("1234567890abcde"));
-    test(S("abcde"), 0, 0, "12345678901234567890", S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 1, "", S("bcde"));
-    test(S("abcde"), 0, 1, "12345", S("12345bcde"));
-    test(S("abcde"), 0, 1, "1234567890", S("1234567890bcde"));
-    test(S("abcde"), 0, 1, "12345678901234567890", S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 2, "", S("cde"));
-    test(S("abcde"), 0, 2, "12345", S("12345cde"));
-    test(S("abcde"), 0, 2, "1234567890", S("1234567890cde"));
-    test(S("abcde"), 0, 2, "12345678901234567890", S("12345678901234567890cde"));
-    test(S("abcde"), 0, 4, "", S("e"));
-    test(S("abcde"), 0, 4, "12345", S("12345e"));
-    test(S("abcde"), 0, 4, "1234567890", S("1234567890e"));
-    test(S("abcde"), 0, 4, "12345678901234567890", S("12345678901234567890e"));
-    test(S("abcde"), 0, 5, "", S(""));
-    test(S("abcde"), 0, 5, "12345", S("12345"));
-    test(S("abcde"), 0, 5, "1234567890", S("1234567890"));
-    test(S("abcde"), 0, 5, "12345678901234567890", S("12345678901234567890"));
-    test(S("abcde"), 1, 0, "", S("abcde"));
-    test(S("abcde"), 1, 0, "12345", S("a12345bcde"));
-    test(S("abcde"), 1, 0, "1234567890", S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, "12345678901234567890", S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 1, "", S("acde"));
-    test(S("abcde"), 1, 1, "12345", S("a12345cde"));
-    test(S("abcde"), 1, 1, "1234567890", S("a1234567890cde"));
-    test(S("abcde"), 1, 1, "12345678901234567890", S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 2, "", S("ade"));
-    test(S("abcde"), 1, 2, "12345", S("a12345de"));
-    test(S("abcde"), 1, 2, "1234567890", S("a1234567890de"));
-    test(S("abcde"), 1, 2, "12345678901234567890", S("a12345678901234567890de"));
-    test(S("abcde"), 1, 3, "", S("ae"));
-    test(S("abcde"), 1, 3, "12345", S("a12345e"));
-    test(S("abcde"), 1, 3, "1234567890", S("a1234567890e"));
-    test(S("abcde"), 1, 3, "12345678901234567890", S("a12345678901234567890e"));
-    test(S("abcde"), 1, 4, "", S("a"));
-    test(S("abcde"), 1, 4, "12345", S("a12345"));
-    test(S("abcde"), 1, 4, "1234567890", S("a1234567890"));
-    test(S("abcde"), 1, 4, "12345678901234567890", S("a12345678901234567890"));
-    test(S("abcde"), 2, 0, "", S("abcde"));
-    test(S("abcde"), 2, 0, "12345", S("ab12345cde"));
-    test(S("abcde"), 2, 0, "1234567890", S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, "12345678901234567890", S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 1, "", S("abde"));
-    test(S("abcde"), 2, 1, "12345", S("ab12345de"));
-    test(S("abcde"), 2, 1, "1234567890", S("ab1234567890de"));
-    test(S("abcde"), 2, 1, "12345678901234567890", S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 2, "", S("abe"));
-    test(S("abcde"), 2, 2, "12345", S("ab12345e"));
-    test(S("abcde"), 2, 2, "1234567890", S("ab1234567890e"));
-    test(S("abcde"), 2, 2, "12345678901234567890", S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 3, "", S("ab"));
-    test(S("abcde"), 2, 3, "12345", S("ab12345"));
-    test(S("abcde"), 2, 3, "1234567890", S("ab1234567890"));
-    test(S("abcde"), 2, 3, "12345678901234567890", S("ab12345678901234567890"));
-    test(S("abcde"), 4, 0, "", S("abcde"));
-    test(S("abcde"), 4, 0, "12345", S("abcd12345e"));
-    test(S("abcde"), 4, 0, "1234567890", S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, "12345678901234567890", S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 1, "", S("abcd"));
-    test(S("abcde"), 4, 1, "12345", S("abcd12345"));
-    test(S("abcde"), 4, 1, "1234567890", S("abcd1234567890"));
-    test(S("abcde"), 4, 1, "12345678901234567890", S("abcd12345678901234567890"));
-    test(S("abcde"), 5, 0, "", S("abcde"));
-    test(S("abcde"), 5, 0, "12345", S("abcde12345"));
-    test(S("abcde"), 5, 0, "1234567890", S("abcde1234567890"));
-    test(S("abcde"), 5, 0, "12345678901234567890", S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 0, 0, "", S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345", S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "1234567890", S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345678901234567890", S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 1, "", S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345", S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "1234567890", S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345678901234567890", S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 5, "", S("fghij"));
-    test(S("abcdefghij"), 0, 5, "12345", S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, "1234567890", S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, "12345678901234567890", S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 9, "", S("j"));
-    test(S("abcdefghij"), 0, 9, "12345", S("12345j"));
-    test(S("abcdefghij"), 0, 9, "1234567890", S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, "12345678901234567890", S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 10, "", S(""));
-    test(S("abcdefghij"), 0, 10, "12345", S("12345"));
-    test(S("abcdefghij"), 0, 10, "1234567890", S("1234567890"));
-    test(S("abcdefghij"), 0, 10, "12345678901234567890", S("12345678901234567890"));
-    test(S("abcdefghij"), 1, 0, "", S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345", S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "1234567890", S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345678901234567890", S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 1, "", S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345", S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, "1234567890", S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345678901234567890", S("a12345678901234567890cdefghij"));
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, "", S(""));
+  test(S(""), 0, 0, "12345", S("12345"));
+  test(S(""), 0, 0, "1234567890", S("1234567890"));
+  test(S(""), 0, 0, "12345678901234567890", S("12345678901234567890"));
+  test(S("abcde"), 0, 0, "", S("abcde"));
+  test(S("abcde"), 0, 0, "12345", S("12345abcde"));
+  test(S("abcde"), 0, 0, "1234567890", S("1234567890abcde"));
+  test(S("abcde"), 0, 0, "12345678901234567890", S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 1, "", S("bcde"));
+  test(S("abcde"), 0, 1, "12345", S("12345bcde"));
+  test(S("abcde"), 0, 1, "1234567890", S("1234567890bcde"));
+  test(S("abcde"), 0, 1, "12345678901234567890", S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 2, "", S("cde"));
+  test(S("abcde"), 0, 2, "12345", S("12345cde"));
+  test(S("abcde"), 0, 2, "1234567890", S("1234567890cde"));
+  test(S("abcde"), 0, 2, "12345678901234567890", S("12345678901234567890cde"));
+  test(S("abcde"), 0, 4, "", S("e"));
+  test(S("abcde"), 0, 4, "12345", S("12345e"));
+  test(S("abcde"), 0, 4, "1234567890", S("1234567890e"));
+  test(S("abcde"), 0, 4, "12345678901234567890", S("12345678901234567890e"));
+  test(S("abcde"), 0, 5, "", S(""));
+  test(S("abcde"), 0, 5, "12345", S("12345"));
+  test(S("abcde"), 0, 5, "1234567890", S("1234567890"));
+  test(S("abcde"), 0, 5, "12345678901234567890", S("12345678901234567890"));
+  test(S("abcde"), 1, 0, "", S("abcde"));
+  test(S("abcde"), 1, 0, "12345", S("a12345bcde"));
+  test(S("abcde"), 1, 0, "1234567890", S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, "12345678901234567890", S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 1, "", S("acde"));
+  test(S("abcde"), 1, 1, "12345", S("a12345cde"));
+  test(S("abcde"), 1, 1, "1234567890", S("a1234567890cde"));
+  test(S("abcde"), 1, 1, "12345678901234567890", S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 2, "", S("ade"));
+  test(S("abcde"), 1, 2, "12345", S("a12345de"));
+  test(S("abcde"), 1, 2, "1234567890", S("a1234567890de"));
+  test(S("abcde"), 1, 2, "12345678901234567890", S("a12345678901234567890de"));
+  test(S("abcde"), 1, 3, "", S("ae"));
+  test(S("abcde"), 1, 3, "12345", S("a12345e"));
+  test(S("abcde"), 1, 3, "1234567890", S("a1234567890e"));
+  test(S("abcde"), 1, 3, "12345678901234567890", S("a12345678901234567890e"));
+  test(S("abcde"), 1, 4, "", S("a"));
+  test(S("abcde"), 1, 4, "12345", S("a12345"));
+  test(S("abcde"), 1, 4, "1234567890", S("a1234567890"));
+  test(S("abcde"), 1, 4, "12345678901234567890", S("a12345678901234567890"));
+  test(S("abcde"), 2, 0, "", S("abcde"));
+  test(S("abcde"), 2, 0, "12345", S("ab12345cde"));
+  test(S("abcde"), 2, 0, "1234567890", S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, "12345678901234567890", S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 1, "", S("abde"));
+  test(S("abcde"), 2, 1, "12345", S("ab12345de"));
+  test(S("abcde"), 2, 1, "1234567890", S("ab1234567890de"));
+  test(S("abcde"), 2, 1, "12345678901234567890", S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 2, "", S("abe"));
+  test(S("abcde"), 2, 2, "12345", S("ab12345e"));
+  test(S("abcde"), 2, 2, "1234567890", S("ab1234567890e"));
+  test(S("abcde"), 2, 2, "12345678901234567890", S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 3, "", S("ab"));
+  test(S("abcde"), 2, 3, "12345", S("ab12345"));
+  test(S("abcde"), 2, 3, "1234567890", S("ab1234567890"));
+  test(S("abcde"), 2, 3, "12345678901234567890", S("ab12345678901234567890"));
+  test(S("abcde"), 4, 0, "", S("abcde"));
+  test(S("abcde"), 4, 0, "12345", S("abcd12345e"));
+  test(S("abcde"), 4, 0, "1234567890", S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, "12345678901234567890", S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 1, "", S("abcd"));
+  test(S("abcde"), 4, 1, "12345", S("abcd12345"));
+  test(S("abcde"), 4, 1, "1234567890", S("abcd1234567890"));
+  test(S("abcde"), 4, 1, "12345678901234567890", S("abcd12345678901234567890"));
+  test(S("abcde"), 5, 0, "", S("abcde"));
+  test(S("abcde"), 5, 0, "12345", S("abcde12345"));
+  test(S("abcde"), 5, 0, "1234567890", S("abcde1234567890"));
+  test(S("abcde"), 5, 0, "12345678901234567890", S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 0, 0, "", S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345", S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "1234567890", S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345678901234567890", S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 1, "", S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345", S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "1234567890", S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345678901234567890", S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 5, "", S("fghij"));
+  test(S("abcdefghij"), 0, 5, "12345", S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, "1234567890", S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, "12345678901234567890", S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 9, "", S("j"));
+  test(S("abcdefghij"), 0, 9, "12345", S("12345j"));
+  test(S("abcdefghij"), 0, 9, "1234567890", S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, "12345678901234567890", S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 10, "", S(""));
+  test(S("abcdefghij"), 0, 10, "12345", S("12345"));
+  test(S("abcdefghij"), 0, 10, "1234567890", S("1234567890"));
+  test(S("abcdefghij"), 0, 10, "12345678901234567890", S("12345678901234567890"));
+  test(S("abcdefghij"), 1, 0, "", S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345", S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "1234567890", S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345678901234567890", S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 1, "", S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345", S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, "1234567890", S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345678901234567890", S("a12345678901234567890cdefghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S("abcdefghij"), 1, 4, "", S("afghij"));
-    test(S("abcdefghij"), 1, 4, "12345", S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, "1234567890", S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, "12345678901234567890", S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 8, "", S("aj"));
-    test(S("abcdefghij"), 1, 8, "12345", S("a12345j"));
-    test(S("abcdefghij"), 1, 8, "1234567890", S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, "12345678901234567890", S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 9, "", S("a"));
-    test(S("abcdefghij"), 1, 9, "12345", S("a12345"));
-    test(S("abcdefghij"), 1, 9, "1234567890", S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, "12345678901234567890", S("a12345678901234567890"));
-    test(S("abcdefghij"), 5, 0, "", S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, "12345", S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, "1234567890", S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, "12345678901234567890", S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 1, "", S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, "12345", S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, "1234567890", S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, "12345678901234567890", S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 2, "", S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, "12345", S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, "1234567890", S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, "12345678901234567890", S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 4, "", S("abcdej"));
-    test(S("abcdefghij"), 5, 4, "12345", S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, "1234567890", S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, "12345678901234567890", S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 5, "", S("abcde"));
-    test(S("abcdefghij"), 5, 5, "12345", S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, "1234567890", S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, "12345678901234567890", S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 9, 0, "", S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, "12345", S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, "1234567890", S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, "12345678901234567890", S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 1, "", S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, "12345", S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, "1234567890", S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, "12345678901234567890", S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, "", S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, "12345", S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, "1234567890", S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, "12345678901234567890", S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "", S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345", S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "", S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345", S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "", S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345", S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "", S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345", S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "", S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345", S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "", S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345", S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "", S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345", S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "", S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345", S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "", S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345", S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "", S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345", S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "", S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345", S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "", S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345", S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "", S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345", S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "", S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345", S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", S("abcdefghij12345678901234567890t"));
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S("abcdefghij"), 1, 4, "", S("afghij"));
+  test(S("abcdefghij"), 1, 4, "12345", S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, "1234567890", S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, "12345678901234567890", S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 8, "", S("aj"));
+  test(S("abcdefghij"), 1, 8, "12345", S("a12345j"));
+  test(S("abcdefghij"), 1, 8, "1234567890", S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, "12345678901234567890", S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 9, "", S("a"));
+  test(S("abcdefghij"), 1, 9, "12345", S("a12345"));
+  test(S("abcdefghij"), 1, 9, "1234567890", S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, "12345678901234567890", S("a12345678901234567890"));
+  test(S("abcdefghij"), 5, 0, "", S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, "12345", S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, "1234567890", S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, "12345678901234567890", S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 1, "", S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, "12345", S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, "1234567890", S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, "12345678901234567890", S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 2, "", S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, "12345", S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, "1234567890", S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, "12345678901234567890", S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 4, "", S("abcdej"));
+  test(S("abcdefghij"), 5, 4, "12345", S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, "1234567890", S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, "12345678901234567890", S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 5, "", S("abcde"));
+  test(S("abcdefghij"), 5, 5, "12345", S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, "1234567890", S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, "12345678901234567890", S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 9, 0, "", S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, "12345", S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, "1234567890", S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, "12345678901234567890", S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 1, "", S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, "12345", S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, "1234567890", S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, "12345678901234567890", S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, "", S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, "12345", S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, "1234567890", S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, "12345678901234567890", S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "", S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345", S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "", S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345", S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", S("12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "", S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345", S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "", S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345", S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "", S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345", S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "", S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345", S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "", S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345", S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", S("a12345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "", S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345", S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "", S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345", S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "", S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345", S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "", S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345", S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "", S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345", S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", S("abcdefghij12345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "", S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345", S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "", S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345", S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", S("abcdefghij12345678901234567890t"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 10, "", S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345", S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "", S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345", S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "", S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345", S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "", S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345", S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", S("abcdefghijklmnopqrst12345678901234567890"));
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S("abcdefghijklmnopqrst"), 10, 10, "", S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345", S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "", S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345", S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "", S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345", S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "", S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345", S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", S("abcdefghijklmnopqrst12345678901234567890"));
 
-    { // test replacing into self
-      S s_short = "123/";
-      S s_long  = "Lorem ipsum dolor sit amet, consectetur/";
+  { // test replacing into self
+    S s_short = "123/";
+    S s_long  = "Lorem ipsum dolor sit amet, consectetur/";
 
-      s_short.replace(s_short.begin(), s_short.begin(), s_short.c_str());
-      assert(s_short == "123/123/");
-      s_short.replace(s_short.begin(), s_short.begin(), s_short.c_str());
-      assert(s_short == "123/123/123/123/");
-      s_short.replace(s_short.begin(), s_short.begin(), s_short.c_str());
-      assert(s_short == "123/123/123/123/123/123/123/123/");
+    s_short.replace(s_short.begin(), s_short.begin(), s_short.c_str());
+    assert(s_short == "123/123/");
+    s_short.replace(s_short.begin(), s_short.begin(), s_short.c_str());
+    assert(s_short == "123/123/123/123/");
+    s_short.replace(s_short.begin(), s_short.begin(), s_short.c_str());
+    assert(s_short == "123/123/123/123/123/123/123/123/");
 
-      s_long.replace(s_long.begin(), s_long.begin(), s_long.c_str());
-      assert(s_long == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/");
-    }
+    s_long.replace(s_long.begin(), s_long.begin(), s_long.c_str());
+    assert(s_long == "Lorem ipsum dolor sit amet, consectetur/Lorem ipsum dolor sit amet, consectetur/");
+  }
 
-    return true;
+  return true;
 }
 
 TEST_CONSTEXPR_CXX20 void test() {
@@ -305,17 +301,16 @@ TEST_CONSTEXPR_CXX20 void test() {
     test0<S>();
     test1<S>();
     test2<S>();
-#if TEST_STD_VER > 17
+#  if TEST_STD_VER > 17
     static_assert(test0<S>());
     static_assert(test1<S>());
     static_assert(test2<S>());
-#endif
+#  endif
   }
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 
   return 0;

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp
index 81d7d8ba8db6ee7..45d57c793a3352f 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp
@@ -20,945 +20,939 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos1, typename S::size_type n1, const typename S::value_type* str,
-     typename S::size_type n2, 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, n2);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
-    typename S::size_type rlen = n2;
-    assert(s.size() == old_size - xlen + rlen);
+test(S s,
+     typename S::size_type pos1,
+     typename S::size_type n1,
+     const typename S::value_type* str,
+     typename S::size_type n2,
+     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, n2);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
+  typename S::size_type rlen = n2;
+  assert(s.size() == old_size - xlen + rlen);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, "", 0, S(""));
-    test(S(""), 0, 0, "12345", 0, S(""));
-    test(S(""), 0, 0, "12345", 1, S("1"));
-    test(S(""), 0, 0, "12345", 2, S("12"));
-    test(S(""), 0, 0, "12345", 4, S("1234"));
-    test(S(""), 0, 0, "12345", 5, S("12345"));
-    test(S(""), 0, 0, "1234567890", 0, S(""));
-    test(S(""), 0, 0, "1234567890", 1, S("1"));
-    test(S(""), 0, 0, "1234567890", 5, S("12345"));
-    test(S(""), 0, 0, "1234567890", 9, S("123456789"));
-    test(S(""), 0, 0, "1234567890", 10, S("1234567890"));
-    test(S(""), 0, 0, "12345678901234567890", 0, S(""));
-    test(S(""), 0, 0, "12345678901234567890", 1, S("1"));
-    test(S(""), 0, 0, "12345678901234567890", 10, S("1234567890"));
-    test(S(""), 0, 0, "12345678901234567890", 19, S("1234567890123456789"));
-    test(S(""), 0, 0, "12345678901234567890", 20, S("12345678901234567890"));
-    test(S("abcde"), 0, 0, "", 0, S("abcde"));
-    test(S("abcde"), 0, 0, "12345", 0, S("abcde"));
-    test(S("abcde"), 0, 0, "12345", 1, S("1abcde"));
-    test(S("abcde"), 0, 0, "12345", 2, S("12abcde"));
-    test(S("abcde"), 0, 0, "12345", 4, S("1234abcde"));
-    test(S("abcde"), 0, 0, "12345", 5, S("12345abcde"));
-    test(S("abcde"), 0, 0, "1234567890", 0, S("abcde"));
-    test(S("abcde"), 0, 0, "1234567890", 1, S("1abcde"));
-    test(S("abcde"), 0, 0, "1234567890", 5, S("12345abcde"));
-    test(S("abcde"), 0, 0, "1234567890", 9, S("123456789abcde"));
-    test(S("abcde"), 0, 0, "1234567890", 10, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, "12345678901234567890", 0, S("abcde"));
-    test(S("abcde"), 0, 0, "12345678901234567890", 1, S("1abcde"));
-    test(S("abcde"), 0, 0, "12345678901234567890", 10, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcde"));
-    test(S("abcde"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 1, "", 0, S("bcde"));
-    test(S("abcde"), 0, 1, "12345", 0, S("bcde"));
-    test(S("abcde"), 0, 1, "12345", 1, S("1bcde"));
-    test(S("abcde"), 0, 1, "12345", 2, S("12bcde"));
-    test(S("abcde"), 0, 1, "12345", 4, S("1234bcde"));
-    test(S("abcde"), 0, 1, "12345", 5, S("12345bcde"));
-    test(S("abcde"), 0, 1, "1234567890", 0, S("bcde"));
-    test(S("abcde"), 0, 1, "1234567890", 1, S("1bcde"));
-    test(S("abcde"), 0, 1, "1234567890", 5, S("12345bcde"));
-    test(S("abcde"), 0, 1, "1234567890", 9, S("123456789bcde"));
-    test(S("abcde"), 0, 1, "1234567890", 10, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, "12345678901234567890", 0, S("bcde"));
-    test(S("abcde"), 0, 1, "12345678901234567890", 1, S("1bcde"));
-    test(S("abcde"), 0, 1, "12345678901234567890", 10, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcde"));
-    test(S("abcde"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 2, "", 0, S("cde"));
-    test(S("abcde"), 0, 2, "12345", 0, S("cde"));
-    test(S("abcde"), 0, 2, "12345", 1, S("1cde"));
-    test(S("abcde"), 0, 2, "12345", 2, S("12cde"));
-    test(S("abcde"), 0, 2, "12345", 4, S("1234cde"));
-    test(S("abcde"), 0, 2, "12345", 5, S("12345cde"));
-    test(S("abcde"), 0, 2, "1234567890", 0, S("cde"));
-    test(S("abcde"), 0, 2, "1234567890", 1, S("1cde"));
-    test(S("abcde"), 0, 2, "1234567890", 5, S("12345cde"));
-    test(S("abcde"), 0, 2, "1234567890", 9, S("123456789cde"));
-    test(S("abcde"), 0, 2, "1234567890", 10, S("1234567890cde"));
-    test(S("abcde"), 0, 2, "12345678901234567890", 0, S("cde"));
-    test(S("abcde"), 0, 2, "12345678901234567890", 1, S("1cde"));
-    test(S("abcde"), 0, 2, "12345678901234567890", 10, S("1234567890cde"));
-    test(S("abcde"), 0, 2, "12345678901234567890", 19, S("1234567890123456789cde"));
-    test(S("abcde"), 0, 2, "12345678901234567890", 20, S("12345678901234567890cde"));
-    test(S("abcde"), 0, 4, "", 0, S("e"));
-    test(S("abcde"), 0, 4, "12345", 0, S("e"));
-    test(S("abcde"), 0, 4, "12345", 1, S("1e"));
-    test(S("abcde"), 0, 4, "12345", 2, S("12e"));
-    test(S("abcde"), 0, 4, "12345", 4, S("1234e"));
-    test(S("abcde"), 0, 4, "12345", 5, S("12345e"));
-    test(S("abcde"), 0, 4, "1234567890", 0, S("e"));
-    test(S("abcde"), 0, 4, "1234567890", 1, S("1e"));
-    test(S("abcde"), 0, 4, "1234567890", 5, S("12345e"));
-    test(S("abcde"), 0, 4, "1234567890", 9, S("123456789e"));
-    test(S("abcde"), 0, 4, "1234567890", 10, S("1234567890e"));
-    test(S("abcde"), 0, 4, "12345678901234567890", 0, S("e"));
-    test(S("abcde"), 0, 4, "12345678901234567890", 1, S("1e"));
-    test(S("abcde"), 0, 4, "12345678901234567890", 10, S("1234567890e"));
-    test(S("abcde"), 0, 4, "12345678901234567890", 19, S("1234567890123456789e"));
-    test(S("abcde"), 0, 4, "12345678901234567890", 20, S("12345678901234567890e"));
-    test(S("abcde"), 0, 5, "", 0, S(""));
-    test(S("abcde"), 0, 5, "12345", 0, S(""));
-    test(S("abcde"), 0, 5, "12345", 1, S("1"));
-    test(S("abcde"), 0, 5, "12345", 2, S("12"));
-    test(S("abcde"), 0, 5, "12345", 4, S("1234"));
-    test(S("abcde"), 0, 5, "12345", 5, S("12345"));
-    test(S("abcde"), 0, 5, "1234567890", 0, S(""));
-    test(S("abcde"), 0, 5, "1234567890", 1, S("1"));
-    test(S("abcde"), 0, 5, "1234567890", 5, S("12345"));
-    test(S("abcde"), 0, 5, "1234567890", 9, S("123456789"));
-    test(S("abcde"), 0, 5, "1234567890", 10, S("1234567890"));
-    test(S("abcde"), 0, 5, "12345678901234567890", 0, S(""));
-    test(S("abcde"), 0, 5, "12345678901234567890", 1, S("1"));
-    test(S("abcde"), 0, 5, "12345678901234567890", 10, S("1234567890"));
-    test(S("abcde"), 0, 5, "12345678901234567890", 19, S("1234567890123456789"));
-    test(S("abcde"), 0, 5, "12345678901234567890", 20, S("12345678901234567890"));
-    test(S("abcde"), 1, 0, "", 0, S("abcde"));
-    test(S("abcde"), 1, 0, "12345", 0, S("abcde"));
-    test(S("abcde"), 1, 0, "12345", 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, "12345", 2, S("a12bcde"));
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, "", 0, S(""));
+  test(S(""), 0, 0, "12345", 0, S(""));
+  test(S(""), 0, 0, "12345", 1, S("1"));
+  test(S(""), 0, 0, "12345", 2, S("12"));
+  test(S(""), 0, 0, "12345", 4, S("1234"));
+  test(S(""), 0, 0, "12345", 5, S("12345"));
+  test(S(""), 0, 0, "1234567890", 0, S(""));
+  test(S(""), 0, 0, "1234567890", 1, S("1"));
+  test(S(""), 0, 0, "1234567890", 5, S("12345"));
+  test(S(""), 0, 0, "1234567890", 9, S("123456789"));
+  test(S(""), 0, 0, "1234567890", 10, S("1234567890"));
+  test(S(""), 0, 0, "12345678901234567890", 0, S(""));
+  test(S(""), 0, 0, "12345678901234567890", 1, S("1"));
+  test(S(""), 0, 0, "12345678901234567890", 10, S("1234567890"));
+  test(S(""), 0, 0, "12345678901234567890", 19, S("1234567890123456789"));
+  test(S(""), 0, 0, "12345678901234567890", 20, S("12345678901234567890"));
+  test(S("abcde"), 0, 0, "", 0, S("abcde"));
+  test(S("abcde"), 0, 0, "12345", 0, S("abcde"));
+  test(S("abcde"), 0, 0, "12345", 1, S("1abcde"));
+  test(S("abcde"), 0, 0, "12345", 2, S("12abcde"));
+  test(S("abcde"), 0, 0, "12345", 4, S("1234abcde"));
+  test(S("abcde"), 0, 0, "12345", 5, S("12345abcde"));
+  test(S("abcde"), 0, 0, "1234567890", 0, S("abcde"));
+  test(S("abcde"), 0, 0, "1234567890", 1, S("1abcde"));
+  test(S("abcde"), 0, 0, "1234567890", 5, S("12345abcde"));
+  test(S("abcde"), 0, 0, "1234567890", 9, S("123456789abcde"));
+  test(S("abcde"), 0, 0, "1234567890", 10, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, "12345678901234567890", 0, S("abcde"));
+  test(S("abcde"), 0, 0, "12345678901234567890", 1, S("1abcde"));
+  test(S("abcde"), 0, 0, "12345678901234567890", 10, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcde"));
+  test(S("abcde"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 1, "", 0, S("bcde"));
+  test(S("abcde"), 0, 1, "12345", 0, S("bcde"));
+  test(S("abcde"), 0, 1, "12345", 1, S("1bcde"));
+  test(S("abcde"), 0, 1, "12345", 2, S("12bcde"));
+  test(S("abcde"), 0, 1, "12345", 4, S("1234bcde"));
+  test(S("abcde"), 0, 1, "12345", 5, S("12345bcde"));
+  test(S("abcde"), 0, 1, "1234567890", 0, S("bcde"));
+  test(S("abcde"), 0, 1, "1234567890", 1, S("1bcde"));
+  test(S("abcde"), 0, 1, "1234567890", 5, S("12345bcde"));
+  test(S("abcde"), 0, 1, "1234567890", 9, S("123456789bcde"));
+  test(S("abcde"), 0, 1, "1234567890", 10, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, "12345678901234567890", 0, S("bcde"));
+  test(S("abcde"), 0, 1, "12345678901234567890", 1, S("1bcde"));
+  test(S("abcde"), 0, 1, "12345678901234567890", 10, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcde"));
+  test(S("abcde"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 2, "", 0, S("cde"));
+  test(S("abcde"), 0, 2, "12345", 0, S("cde"));
+  test(S("abcde"), 0, 2, "12345", 1, S("1cde"));
+  test(S("abcde"), 0, 2, "12345", 2, S("12cde"));
+  test(S("abcde"), 0, 2, "12345", 4, S("1234cde"));
+  test(S("abcde"), 0, 2, "12345", 5, S("12345cde"));
+  test(S("abcde"), 0, 2, "1234567890", 0, S("cde"));
+  test(S("abcde"), 0, 2, "1234567890", 1, S("1cde"));
+  test(S("abcde"), 0, 2, "1234567890", 5, S("12345cde"));
+  test(S("abcde"), 0, 2, "1234567890", 9, S("123456789cde"));
+  test(S("abcde"), 0, 2, "1234567890", 10, S("1234567890cde"));
+  test(S("abcde"), 0, 2, "12345678901234567890", 0, S("cde"));
+  test(S("abcde"), 0, 2, "12345678901234567890", 1, S("1cde"));
+  test(S("abcde"), 0, 2, "12345678901234567890", 10, S("1234567890cde"));
+  test(S("abcde"), 0, 2, "12345678901234567890", 19, S("1234567890123456789cde"));
+  test(S("abcde"), 0, 2, "12345678901234567890", 20, S("12345678901234567890cde"));
+  test(S("abcde"), 0, 4, "", 0, S("e"));
+  test(S("abcde"), 0, 4, "12345", 0, S("e"));
+  test(S("abcde"), 0, 4, "12345", 1, S("1e"));
+  test(S("abcde"), 0, 4, "12345", 2, S("12e"));
+  test(S("abcde"), 0, 4, "12345", 4, S("1234e"));
+  test(S("abcde"), 0, 4, "12345", 5, S("12345e"));
+  test(S("abcde"), 0, 4, "1234567890", 0, S("e"));
+  test(S("abcde"), 0, 4, "1234567890", 1, S("1e"));
+  test(S("abcde"), 0, 4, "1234567890", 5, S("12345e"));
+  test(S("abcde"), 0, 4, "1234567890", 9, S("123456789e"));
+  test(S("abcde"), 0, 4, "1234567890", 10, S("1234567890e"));
+  test(S("abcde"), 0, 4, "12345678901234567890", 0, S("e"));
+  test(S("abcde"), 0, 4, "12345678901234567890", 1, S("1e"));
+  test(S("abcde"), 0, 4, "12345678901234567890", 10, S("1234567890e"));
+  test(S("abcde"), 0, 4, "12345678901234567890", 19, S("1234567890123456789e"));
+  test(S("abcde"), 0, 4, "12345678901234567890", 20, S("12345678901234567890e"));
+  test(S("abcde"), 0, 5, "", 0, S(""));
+  test(S("abcde"), 0, 5, "12345", 0, S(""));
+  test(S("abcde"), 0, 5, "12345", 1, S("1"));
+  test(S("abcde"), 0, 5, "12345", 2, S("12"));
+  test(S("abcde"), 0, 5, "12345", 4, S("1234"));
+  test(S("abcde"), 0, 5, "12345", 5, S("12345"));
+  test(S("abcde"), 0, 5, "1234567890", 0, S(""));
+  test(S("abcde"), 0, 5, "1234567890", 1, S("1"));
+  test(S("abcde"), 0, 5, "1234567890", 5, S("12345"));
+  test(S("abcde"), 0, 5, "1234567890", 9, S("123456789"));
+  test(S("abcde"), 0, 5, "1234567890", 10, S("1234567890"));
+  test(S("abcde"), 0, 5, "12345678901234567890", 0, S(""));
+  test(S("abcde"), 0, 5, "12345678901234567890", 1, S("1"));
+  test(S("abcde"), 0, 5, "12345678901234567890", 10, S("1234567890"));
+  test(S("abcde"), 0, 5, "12345678901234567890", 19, S("1234567890123456789"));
+  test(S("abcde"), 0, 5, "12345678901234567890", 20, S("12345678901234567890"));
+  test(S("abcde"), 1, 0, "", 0, S("abcde"));
+  test(S("abcde"), 1, 0, "12345", 0, S("abcde"));
+  test(S("abcde"), 1, 0, "12345", 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, "12345", 2, S("a12bcde"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S("abcde"), 1, 0, "12345", 4, S("a1234bcde"));
-    test(S("abcde"), 1, 0, "12345", 5, S("a12345bcde"));
-    test(S("abcde"), 1, 0, "1234567890", 0, S("abcde"));
-    test(S("abcde"), 1, 0, "1234567890", 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, "1234567890", 5, S("a12345bcde"));
-    test(S("abcde"), 1, 0, "1234567890", 9, S("a123456789bcde"));
-    test(S("abcde"), 1, 0, "1234567890", 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, "12345678901234567890", 0, S("abcde"));
-    test(S("abcde"), 1, 0, "12345678901234567890", 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, "12345678901234567890", 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcde"));
-    test(S("abcde"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 1, "", 0, S("acde"));
-    test(S("abcde"), 1, 1, "12345", 0, S("acde"));
-    test(S("abcde"), 1, 1, "12345", 1, S("a1cde"));
-    test(S("abcde"), 1, 1, "12345", 2, S("a12cde"));
-    test(S("abcde"), 1, 1, "12345", 4, S("a1234cde"));
-    test(S("abcde"), 1, 1, "12345", 5, S("a12345cde"));
-    test(S("abcde"), 1, 1, "1234567890", 0, S("acde"));
-    test(S("abcde"), 1, 1, "1234567890", 1, S("a1cde"));
-    test(S("abcde"), 1, 1, "1234567890", 5, S("a12345cde"));
-    test(S("abcde"), 1, 1, "1234567890", 9, S("a123456789cde"));
-    test(S("abcde"), 1, 1, "1234567890", 10, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, "12345678901234567890", 0, S("acde"));
-    test(S("abcde"), 1, 1, "12345678901234567890", 1, S("a1cde"));
-    test(S("abcde"), 1, 1, "12345678901234567890", 10, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cde"));
-    test(S("abcde"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 2, "", 0, S("ade"));
-    test(S("abcde"), 1, 2, "12345", 0, S("ade"));
-    test(S("abcde"), 1, 2, "12345", 1, S("a1de"));
-    test(S("abcde"), 1, 2, "12345", 2, S("a12de"));
-    test(S("abcde"), 1, 2, "12345", 4, S("a1234de"));
-    test(S("abcde"), 1, 2, "12345", 5, S("a12345de"));
-    test(S("abcde"), 1, 2, "1234567890", 0, S("ade"));
-    test(S("abcde"), 1, 2, "1234567890", 1, S("a1de"));
-    test(S("abcde"), 1, 2, "1234567890", 5, S("a12345de"));
-    test(S("abcde"), 1, 2, "1234567890", 9, S("a123456789de"));
-    test(S("abcde"), 1, 2, "1234567890", 10, S("a1234567890de"));
-    test(S("abcde"), 1, 2, "12345678901234567890", 0, S("ade"));
-    test(S("abcde"), 1, 2, "12345678901234567890", 1, S("a1de"));
-    test(S("abcde"), 1, 2, "12345678901234567890", 10, S("a1234567890de"));
-    test(S("abcde"), 1, 2, "12345678901234567890", 19, S("a1234567890123456789de"));
-    test(S("abcde"), 1, 2, "12345678901234567890", 20, S("a12345678901234567890de"));
-    test(S("abcde"), 1, 3, "", 0, S("ae"));
-    test(S("abcde"), 1, 3, "12345", 0, S("ae"));
-    test(S("abcde"), 1, 3, "12345", 1, S("a1e"));
-    test(S("abcde"), 1, 3, "12345", 2, S("a12e"));
-    test(S("abcde"), 1, 3, "12345", 4, S("a1234e"));
-    test(S("abcde"), 1, 3, "12345", 5, S("a12345e"));
-    test(S("abcde"), 1, 3, "1234567890", 0, S("ae"));
-    test(S("abcde"), 1, 3, "1234567890", 1, S("a1e"));
-    test(S("abcde"), 1, 3, "1234567890", 5, S("a12345e"));
-    test(S("abcde"), 1, 3, "1234567890", 9, S("a123456789e"));
-    test(S("abcde"), 1, 3, "1234567890", 10, S("a1234567890e"));
-    test(S("abcde"), 1, 3, "12345678901234567890", 0, S("ae"));
-    test(S("abcde"), 1, 3, "12345678901234567890", 1, S("a1e"));
-    test(S("abcde"), 1, 3, "12345678901234567890", 10, S("a1234567890e"));
-    test(S("abcde"), 1, 3, "12345678901234567890", 19, S("a1234567890123456789e"));
-    test(S("abcde"), 1, 3, "12345678901234567890", 20, S("a12345678901234567890e"));
-    test(S("abcde"), 1, 4, "", 0, S("a"));
-    test(S("abcde"), 1, 4, "12345", 0, S("a"));
-    test(S("abcde"), 1, 4, "12345", 1, S("a1"));
-    test(S("abcde"), 1, 4, "12345", 2, S("a12"));
-    test(S("abcde"), 1, 4, "12345", 4, S("a1234"));
-    test(S("abcde"), 1, 4, "12345", 5, S("a12345"));
-    test(S("abcde"), 1, 4, "1234567890", 0, S("a"));
-    test(S("abcde"), 1, 4, "1234567890", 1, S("a1"));
-    test(S("abcde"), 1, 4, "1234567890", 5, S("a12345"));
-    test(S("abcde"), 1, 4, "1234567890", 9, S("a123456789"));
-    test(S("abcde"), 1, 4, "1234567890", 10, S("a1234567890"));
-    test(S("abcde"), 1, 4, "12345678901234567890", 0, S("a"));
-    test(S("abcde"), 1, 4, "12345678901234567890", 1, S("a1"));
-    test(S("abcde"), 1, 4, "12345678901234567890", 10, S("a1234567890"));
-    test(S("abcde"), 1, 4, "12345678901234567890", 19, S("a1234567890123456789"));
-    test(S("abcde"), 1, 4, "12345678901234567890", 20, S("a12345678901234567890"));
-    test(S("abcde"), 2, 0, "", 0, S("abcde"));
-    test(S("abcde"), 2, 0, "12345", 0, S("abcde"));
-    test(S("abcde"), 2, 0, "12345", 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, "12345", 2, S("ab12cde"));
-    test(S("abcde"), 2, 0, "12345", 4, S("ab1234cde"));
-    test(S("abcde"), 2, 0, "12345", 5, S("ab12345cde"));
-    test(S("abcde"), 2, 0, "1234567890", 0, S("abcde"));
-    test(S("abcde"), 2, 0, "1234567890", 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, "1234567890", 5, S("ab12345cde"));
-    test(S("abcde"), 2, 0, "1234567890", 9, S("ab123456789cde"));
-    test(S("abcde"), 2, 0, "1234567890", 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, "12345678901234567890", 0, S("abcde"));
-    test(S("abcde"), 2, 0, "12345678901234567890", 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, "12345678901234567890", 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, "12345678901234567890", 19, S("ab1234567890123456789cde"));
-    test(S("abcde"), 2, 0, "12345678901234567890", 20, S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 1, "", 0, S("abde"));
-    test(S("abcde"), 2, 1, "12345", 0, S("abde"));
-    test(S("abcde"), 2, 1, "12345", 1, S("ab1de"));
-    test(S("abcde"), 2, 1, "12345", 2, S("ab12de"));
-    test(S("abcde"), 2, 1, "12345", 4, S("ab1234de"));
-    test(S("abcde"), 2, 1, "12345", 5, S("ab12345de"));
-    test(S("abcde"), 2, 1, "1234567890", 0, S("abde"));
-    test(S("abcde"), 2, 1, "1234567890", 1, S("ab1de"));
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S("abcde"), 1, 0, "12345", 4, S("a1234bcde"));
+  test(S("abcde"), 1, 0, "12345", 5, S("a12345bcde"));
+  test(S("abcde"), 1, 0, "1234567890", 0, S("abcde"));
+  test(S("abcde"), 1, 0, "1234567890", 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, "1234567890", 5, S("a12345bcde"));
+  test(S("abcde"), 1, 0, "1234567890", 9, S("a123456789bcde"));
+  test(S("abcde"), 1, 0, "1234567890", 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, "12345678901234567890", 0, S("abcde"));
+  test(S("abcde"), 1, 0, "12345678901234567890", 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, "12345678901234567890", 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcde"));
+  test(S("abcde"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 1, "", 0, S("acde"));
+  test(S("abcde"), 1, 1, "12345", 0, S("acde"));
+  test(S("abcde"), 1, 1, "12345", 1, S("a1cde"));
+  test(S("abcde"), 1, 1, "12345", 2, S("a12cde"));
+  test(S("abcde"), 1, 1, "12345", 4, S("a1234cde"));
+  test(S("abcde"), 1, 1, "12345", 5, S("a12345cde"));
+  test(S("abcde"), 1, 1, "1234567890", 0, S("acde"));
+  test(S("abcde"), 1, 1, "1234567890", 1, S("a1cde"));
+  test(S("abcde"), 1, 1, "1234567890", 5, S("a12345cde"));
+  test(S("abcde"), 1, 1, "1234567890", 9, S("a123456789cde"));
+  test(S("abcde"), 1, 1, "1234567890", 10, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, "12345678901234567890", 0, S("acde"));
+  test(S("abcde"), 1, 1, "12345678901234567890", 1, S("a1cde"));
+  test(S("abcde"), 1, 1, "12345678901234567890", 10, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cde"));
+  test(S("abcde"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 2, "", 0, S("ade"));
+  test(S("abcde"), 1, 2, "12345", 0, S("ade"));
+  test(S("abcde"), 1, 2, "12345", 1, S("a1de"));
+  test(S("abcde"), 1, 2, "12345", 2, S("a12de"));
+  test(S("abcde"), 1, 2, "12345", 4, S("a1234de"));
+  test(S("abcde"), 1, 2, "12345", 5, S("a12345de"));
+  test(S("abcde"), 1, 2, "1234567890", 0, S("ade"));
+  test(S("abcde"), 1, 2, "1234567890", 1, S("a1de"));
+  test(S("abcde"), 1, 2, "1234567890", 5, S("a12345de"));
+  test(S("abcde"), 1, 2, "1234567890", 9, S("a123456789de"));
+  test(S("abcde"), 1, 2, "1234567890", 10, S("a1234567890de"));
+  test(S("abcde"), 1, 2, "12345678901234567890", 0, S("ade"));
+  test(S("abcde"), 1, 2, "12345678901234567890", 1, S("a1de"));
+  test(S("abcde"), 1, 2, "12345678901234567890", 10, S("a1234567890de"));
+  test(S("abcde"), 1, 2, "12345678901234567890", 19, S("a1234567890123456789de"));
+  test(S("abcde"), 1, 2, "12345678901234567890", 20, S("a12345678901234567890de"));
+  test(S("abcde"), 1, 3, "", 0, S("ae"));
+  test(S("abcde"), 1, 3, "12345", 0, S("ae"));
+  test(S("abcde"), 1, 3, "12345", 1, S("a1e"));
+  test(S("abcde"), 1, 3, "12345", 2, S("a12e"));
+  test(S("abcde"), 1, 3, "12345", 4, S("a1234e"));
+  test(S("abcde"), 1, 3, "12345", 5, S("a12345e"));
+  test(S("abcde"), 1, 3, "1234567890", 0, S("ae"));
+  test(S("abcde"), 1, 3, "1234567890", 1, S("a1e"));
+  test(S("abcde"), 1, 3, "1234567890", 5, S("a12345e"));
+  test(S("abcde"), 1, 3, "1234567890", 9, S("a123456789e"));
+  test(S("abcde"), 1, 3, "1234567890", 10, S("a1234567890e"));
+  test(S("abcde"), 1, 3, "12345678901234567890", 0, S("ae"));
+  test(S("abcde"), 1, 3, "12345678901234567890", 1, S("a1e"));
+  test(S("abcde"), 1, 3, "12345678901234567890", 10, S("a1234567890e"));
+  test(S("abcde"), 1, 3, "12345678901234567890", 19, S("a1234567890123456789e"));
+  test(S("abcde"), 1, 3, "12345678901234567890", 20, S("a12345678901234567890e"));
+  test(S("abcde"), 1, 4, "", 0, S("a"));
+  test(S("abcde"), 1, 4, "12345", 0, S("a"));
+  test(S("abcde"), 1, 4, "12345", 1, S("a1"));
+  test(S("abcde"), 1, 4, "12345", 2, S("a12"));
+  test(S("abcde"), 1, 4, "12345", 4, S("a1234"));
+  test(S("abcde"), 1, 4, "12345", 5, S("a12345"));
+  test(S("abcde"), 1, 4, "1234567890", 0, S("a"));
+  test(S("abcde"), 1, 4, "1234567890", 1, S("a1"));
+  test(S("abcde"), 1, 4, "1234567890", 5, S("a12345"));
+  test(S("abcde"), 1, 4, "1234567890", 9, S("a123456789"));
+  test(S("abcde"), 1, 4, "1234567890", 10, S("a1234567890"));
+  test(S("abcde"), 1, 4, "12345678901234567890", 0, S("a"));
+  test(S("abcde"), 1, 4, "12345678901234567890", 1, S("a1"));
+  test(S("abcde"), 1, 4, "12345678901234567890", 10, S("a1234567890"));
+  test(S("abcde"), 1, 4, "12345678901234567890", 19, S("a1234567890123456789"));
+  test(S("abcde"), 1, 4, "12345678901234567890", 20, S("a12345678901234567890"));
+  test(S("abcde"), 2, 0, "", 0, S("abcde"));
+  test(S("abcde"), 2, 0, "12345", 0, S("abcde"));
+  test(S("abcde"), 2, 0, "12345", 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, "12345", 2, S("ab12cde"));
+  test(S("abcde"), 2, 0, "12345", 4, S("ab1234cde"));
+  test(S("abcde"), 2, 0, "12345", 5, S("ab12345cde"));
+  test(S("abcde"), 2, 0, "1234567890", 0, S("abcde"));
+  test(S("abcde"), 2, 0, "1234567890", 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, "1234567890", 5, S("ab12345cde"));
+  test(S("abcde"), 2, 0, "1234567890", 9, S("ab123456789cde"));
+  test(S("abcde"), 2, 0, "1234567890", 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, "12345678901234567890", 0, S("abcde"));
+  test(S("abcde"), 2, 0, "12345678901234567890", 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, "12345678901234567890", 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, "12345678901234567890", 19, S("ab1234567890123456789cde"));
+  test(S("abcde"), 2, 0, "12345678901234567890", 20, S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 1, "", 0, S("abde"));
+  test(S("abcde"), 2, 1, "12345", 0, S("abde"));
+  test(S("abcde"), 2, 1, "12345", 1, S("ab1de"));
+  test(S("abcde"), 2, 1, "12345", 2, S("ab12de"));
+  test(S("abcde"), 2, 1, "12345", 4, S("ab1234de"));
+  test(S("abcde"), 2, 1, "12345", 5, S("ab12345de"));
+  test(S("abcde"), 2, 1, "1234567890", 0, S("abde"));
+  test(S("abcde"), 2, 1, "1234567890", 1, S("ab1de"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S("abcde"), 2, 1, "1234567890", 5, S("ab12345de"));
-    test(S("abcde"), 2, 1, "1234567890", 9, S("ab123456789de"));
-    test(S("abcde"), 2, 1, "1234567890", 10, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, "12345678901234567890", 0, S("abde"));
-    test(S("abcde"), 2, 1, "12345678901234567890", 1, S("ab1de"));
-    test(S("abcde"), 2, 1, "12345678901234567890", 10, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, "12345678901234567890", 19, S("ab1234567890123456789de"));
-    test(S("abcde"), 2, 1, "12345678901234567890", 20, S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 2, "", 0, S("abe"));
-    test(S("abcde"), 2, 2, "12345", 0, S("abe"));
-    test(S("abcde"), 2, 2, "12345", 1, S("ab1e"));
-    test(S("abcde"), 2, 2, "12345", 2, S("ab12e"));
-    test(S("abcde"), 2, 2, "12345", 4, S("ab1234e"));
-    test(S("abcde"), 2, 2, "12345", 5, S("ab12345e"));
-    test(S("abcde"), 2, 2, "1234567890", 0, S("abe"));
-    test(S("abcde"), 2, 2, "1234567890", 1, S("ab1e"));
-    test(S("abcde"), 2, 2, "1234567890", 5, S("ab12345e"));
-    test(S("abcde"), 2, 2, "1234567890", 9, S("ab123456789e"));
-    test(S("abcde"), 2, 2, "1234567890", 10, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, "12345678901234567890", 0, S("abe"));
-    test(S("abcde"), 2, 2, "12345678901234567890", 1, S("ab1e"));
-    test(S("abcde"), 2, 2, "12345678901234567890", 10, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, "12345678901234567890", 19, S("ab1234567890123456789e"));
-    test(S("abcde"), 2, 2, "12345678901234567890", 20, S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 3, "", 0, S("ab"));
-    test(S("abcde"), 2, 3, "12345", 0, S("ab"));
-    test(S("abcde"), 2, 3, "12345", 1, S("ab1"));
-    test(S("abcde"), 2, 3, "12345", 2, S("ab12"));
-    test(S("abcde"), 2, 3, "12345", 4, S("ab1234"));
-    test(S("abcde"), 2, 3, "12345", 5, S("ab12345"));
-    test(S("abcde"), 2, 3, "1234567890", 0, S("ab"));
-    test(S("abcde"), 2, 3, "1234567890", 1, S("ab1"));
-    test(S("abcde"), 2, 3, "1234567890", 5, S("ab12345"));
-    test(S("abcde"), 2, 3, "1234567890", 9, S("ab123456789"));
-    test(S("abcde"), 2, 3, "1234567890", 10, S("ab1234567890"));
-    test(S("abcde"), 2, 3, "12345678901234567890", 0, S("ab"));
-    test(S("abcde"), 2, 3, "12345678901234567890", 1, S("ab1"));
-    test(S("abcde"), 2, 3, "12345678901234567890", 10, S("ab1234567890"));
-    test(S("abcde"), 2, 3, "12345678901234567890", 19, S("ab1234567890123456789"));
-    test(S("abcde"), 2, 3, "12345678901234567890", 20, S("ab12345678901234567890"));
-    test(S("abcde"), 4, 0, "", 0, S("abcde"));
-    test(S("abcde"), 4, 0, "12345", 0, S("abcde"));
-    test(S("abcde"), 4, 0, "12345", 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, "12345", 2, S("abcd12e"));
-    test(S("abcde"), 4, 0, "12345", 4, S("abcd1234e"));
-    test(S("abcde"), 4, 0, "12345", 5, S("abcd12345e"));
-    test(S("abcde"), 4, 0, "1234567890", 0, S("abcde"));
-    test(S("abcde"), 4, 0, "1234567890", 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, "1234567890", 5, S("abcd12345e"));
-    test(S("abcde"), 4, 0, "1234567890", 9, S("abcd123456789e"));
-    test(S("abcde"), 4, 0, "1234567890", 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, "12345678901234567890", 0, S("abcde"));
-    test(S("abcde"), 4, 0, "12345678901234567890", 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, "12345678901234567890", 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, "12345678901234567890", 19, S("abcd1234567890123456789e"));
-    test(S("abcde"), 4, 0, "12345678901234567890", 20, S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 1, "", 0, S("abcd"));
-    test(S("abcde"), 4, 1, "12345", 0, S("abcd"));
-    test(S("abcde"), 4, 1, "12345", 1, S("abcd1"));
-    test(S("abcde"), 4, 1, "12345", 2, S("abcd12"));
-    test(S("abcde"), 4, 1, "12345", 4, S("abcd1234"));
-    test(S("abcde"), 4, 1, "12345", 5, S("abcd12345"));
-    test(S("abcde"), 4, 1, "1234567890", 0, S("abcd"));
-    test(S("abcde"), 4, 1, "1234567890", 1, S("abcd1"));
-    test(S("abcde"), 4, 1, "1234567890", 5, S("abcd12345"));
-    test(S("abcde"), 4, 1, "1234567890", 9, S("abcd123456789"));
-    test(S("abcde"), 4, 1, "1234567890", 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, "12345678901234567890", 0, S("abcd"));
-    test(S("abcde"), 4, 1, "12345678901234567890", 1, S("abcd1"));
-    test(S("abcde"), 4, 1, "12345678901234567890", 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, "12345678901234567890", 19, S("abcd1234567890123456789"));
-    test(S("abcde"), 4, 1, "12345678901234567890", 20, S("abcd12345678901234567890"));
-    test(S("abcde"), 5, 0, "", 0, S("abcde"));
-    test(S("abcde"), 5, 0, "12345", 0, S("abcde"));
-    test(S("abcde"), 5, 0, "12345", 1, S("abcde1"));
-    test(S("abcde"), 5, 0, "12345", 2, S("abcde12"));
-    test(S("abcde"), 5, 0, "12345", 4, S("abcde1234"));
-    test(S("abcde"), 5, 0, "12345", 5, S("abcde12345"));
-    test(S("abcde"), 5, 0, "1234567890", 0, S("abcde"));
-    test(S("abcde"), 5, 0, "1234567890", 1, S("abcde1"));
-    test(S("abcde"), 5, 0, "1234567890", 5, S("abcde12345"));
-    test(S("abcde"), 5, 0, "1234567890", 9, S("abcde123456789"));
-    test(S("abcde"), 5, 0, "1234567890", 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, "12345678901234567890", 0, S("abcde"));
-    test(S("abcde"), 5, 0, "12345678901234567890", 1, S("abcde1"));
-    test(S("abcde"), 5, 0, "12345678901234567890", 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, "12345678901234567890", 19, S("abcde1234567890123456789"));
-    test(S("abcde"), 5, 0, "12345678901234567890", 20, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 0, 0, "", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345", 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345", 2, S("12abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345", 4, S("1234abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345", 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "1234567890", 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "1234567890", 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "1234567890", 9, S("123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "1234567890", 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345678901234567890", 0, S("abcdefghij"));
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S("abcde"), 2, 1, "1234567890", 5, S("ab12345de"));
+  test(S("abcde"), 2, 1, "1234567890", 9, S("ab123456789de"));
+  test(S("abcde"), 2, 1, "1234567890", 10, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, "12345678901234567890", 0, S("abde"));
+  test(S("abcde"), 2, 1, "12345678901234567890", 1, S("ab1de"));
+  test(S("abcde"), 2, 1, "12345678901234567890", 10, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, "12345678901234567890", 19, S("ab1234567890123456789de"));
+  test(S("abcde"), 2, 1, "12345678901234567890", 20, S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 2, "", 0, S("abe"));
+  test(S("abcde"), 2, 2, "12345", 0, S("abe"));
+  test(S("abcde"), 2, 2, "12345", 1, S("ab1e"));
+  test(S("abcde"), 2, 2, "12345", 2, S("ab12e"));
+  test(S("abcde"), 2, 2, "12345", 4, S("ab1234e"));
+  test(S("abcde"), 2, 2, "12345", 5, S("ab12345e"));
+  test(S("abcde"), 2, 2, "1234567890", 0, S("abe"));
+  test(S("abcde"), 2, 2, "1234567890", 1, S("ab1e"));
+  test(S("abcde"), 2, 2, "1234567890", 5, S("ab12345e"));
+  test(S("abcde"), 2, 2, "1234567890", 9, S("ab123456789e"));
+  test(S("abcde"), 2, 2, "1234567890", 10, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, "12345678901234567890", 0, S("abe"));
+  test(S("abcde"), 2, 2, "12345678901234567890", 1, S("ab1e"));
+  test(S("abcde"), 2, 2, "12345678901234567890", 10, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, "12345678901234567890", 19, S("ab1234567890123456789e"));
+  test(S("abcde"), 2, 2, "12345678901234567890", 20, S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 3, "", 0, S("ab"));
+  test(S("abcde"), 2, 3, "12345", 0, S("ab"));
+  test(S("abcde"), 2, 3, "12345", 1, S("ab1"));
+  test(S("abcde"), 2, 3, "12345", 2, S("ab12"));
+  test(S("abcde"), 2, 3, "12345", 4, S("ab1234"));
+  test(S("abcde"), 2, 3, "12345", 5, S("ab12345"));
+  test(S("abcde"), 2, 3, "1234567890", 0, S("ab"));
+  test(S("abcde"), 2, 3, "1234567890", 1, S("ab1"));
+  test(S("abcde"), 2, 3, "1234567890", 5, S("ab12345"));
+  test(S("abcde"), 2, 3, "1234567890", 9, S("ab123456789"));
+  test(S("abcde"), 2, 3, "1234567890", 10, S("ab1234567890"));
+  test(S("abcde"), 2, 3, "12345678901234567890", 0, S("ab"));
+  test(S("abcde"), 2, 3, "12345678901234567890", 1, S("ab1"));
+  test(S("abcde"), 2, 3, "12345678901234567890", 10, S("ab1234567890"));
+  test(S("abcde"), 2, 3, "12345678901234567890", 19, S("ab1234567890123456789"));
+  test(S("abcde"), 2, 3, "12345678901234567890", 20, S("ab12345678901234567890"));
+  test(S("abcde"), 4, 0, "", 0, S("abcde"));
+  test(S("abcde"), 4, 0, "12345", 0, S("abcde"));
+  test(S("abcde"), 4, 0, "12345", 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, "12345", 2, S("abcd12e"));
+  test(S("abcde"), 4, 0, "12345", 4, S("abcd1234e"));
+  test(S("abcde"), 4, 0, "12345", 5, S("abcd12345e"));
+  test(S("abcde"), 4, 0, "1234567890", 0, S("abcde"));
+  test(S("abcde"), 4, 0, "1234567890", 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, "1234567890", 5, S("abcd12345e"));
+  test(S("abcde"), 4, 0, "1234567890", 9, S("abcd123456789e"));
+  test(S("abcde"), 4, 0, "1234567890", 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, "12345678901234567890", 0, S("abcde"));
+  test(S("abcde"), 4, 0, "12345678901234567890", 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, "12345678901234567890", 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, "12345678901234567890", 19, S("abcd1234567890123456789e"));
+  test(S("abcde"), 4, 0, "12345678901234567890", 20, S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 1, "", 0, S("abcd"));
+  test(S("abcde"), 4, 1, "12345", 0, S("abcd"));
+  test(S("abcde"), 4, 1, "12345", 1, S("abcd1"));
+  test(S("abcde"), 4, 1, "12345", 2, S("abcd12"));
+  test(S("abcde"), 4, 1, "12345", 4, S("abcd1234"));
+  test(S("abcde"), 4, 1, "12345", 5, S("abcd12345"));
+  test(S("abcde"), 4, 1, "1234567890", 0, S("abcd"));
+  test(S("abcde"), 4, 1, "1234567890", 1, S("abcd1"));
+  test(S("abcde"), 4, 1, "1234567890", 5, S("abcd12345"));
+  test(S("abcde"), 4, 1, "1234567890", 9, S("abcd123456789"));
+  test(S("abcde"), 4, 1, "1234567890", 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, "12345678901234567890", 0, S("abcd"));
+  test(S("abcde"), 4, 1, "12345678901234567890", 1, S("abcd1"));
+  test(S("abcde"), 4, 1, "12345678901234567890", 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, "12345678901234567890", 19, S("abcd1234567890123456789"));
+  test(S("abcde"), 4, 1, "12345678901234567890", 20, S("abcd12345678901234567890"));
+  test(S("abcde"), 5, 0, "", 0, S("abcde"));
+  test(S("abcde"), 5, 0, "12345", 0, S("abcde"));
+  test(S("abcde"), 5, 0, "12345", 1, S("abcde1"));
+  test(S("abcde"), 5, 0, "12345", 2, S("abcde12"));
+  test(S("abcde"), 5, 0, "12345", 4, S("abcde1234"));
+  test(S("abcde"), 5, 0, "12345", 5, S("abcde12345"));
+  test(S("abcde"), 5, 0, "1234567890", 0, S("abcde"));
+  test(S("abcde"), 5, 0, "1234567890", 1, S("abcde1"));
+  test(S("abcde"), 5, 0, "1234567890", 5, S("abcde12345"));
+  test(S("abcde"), 5, 0, "1234567890", 9, S("abcde123456789"));
+  test(S("abcde"), 5, 0, "1234567890", 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, "12345678901234567890", 0, S("abcde"));
+  test(S("abcde"), 5, 0, "12345678901234567890", 1, S("abcde1"));
+  test(S("abcde"), 5, 0, "12345678901234567890", 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, "12345678901234567890", 19, S("abcde1234567890123456789"));
+  test(S("abcde"), 5, 0, "12345678901234567890", 20, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 0, 0, "", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345", 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345", 2, S("12abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345", 4, S("1234abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345", 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "1234567890", 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "1234567890", 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "1234567890", 9, S("123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "1234567890", 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345678901234567890", 0, S("abcdefghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test3()
-{
-    test(S("abcdefghij"), 0, 0, "12345678901234567890", 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345678901234567890", 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 1, "", 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345", 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345", 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345", 2, S("12bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345", 4, S("1234bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345", 5, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "1234567890", 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "1234567890", 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "1234567890", 5, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "1234567890", 9, S("123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "1234567890", 10, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345678901234567890", 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345678901234567890", 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345678901234567890", 10, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 5, "", 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, "12345", 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, "12345", 1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, "12345", 2, S("12fghij"));
-    test(S("abcdefghij"), 0, 5, "12345", 4, S("1234fghij"));
-    test(S("abcdefghij"), 0, 5, "12345", 5, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, "1234567890", 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, "1234567890", 1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, "1234567890", 5, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, "1234567890", 9, S("123456789fghij"));
-    test(S("abcdefghij"), 0, 5, "1234567890", 10, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, "12345678901234567890", 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, "12345678901234567890", 1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, "12345678901234567890", 10, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, "12345678901234567890", 19, S("1234567890123456789fghij"));
-    test(S("abcdefghij"), 0, 5, "12345678901234567890", 20, S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 9, "", 0, S("j"));
-    test(S("abcdefghij"), 0, 9, "12345", 0, S("j"));
-    test(S("abcdefghij"), 0, 9, "12345", 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, "12345", 2, S("12j"));
-    test(S("abcdefghij"), 0, 9, "12345", 4, S("1234j"));
-    test(S("abcdefghij"), 0, 9, "12345", 5, S("12345j"));
-    test(S("abcdefghij"), 0, 9, "1234567890", 0, S("j"));
-    test(S("abcdefghij"), 0, 9, "1234567890", 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, "1234567890", 5, S("12345j"));
-    test(S("abcdefghij"), 0, 9, "1234567890", 9, S("123456789j"));
-    test(S("abcdefghij"), 0, 9, "1234567890", 10, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, "12345678901234567890", 0, S("j"));
-    test(S("abcdefghij"), 0, 9, "12345678901234567890", 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, "12345678901234567890", 10, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, "12345678901234567890", 19, S("1234567890123456789j"));
-    test(S("abcdefghij"), 0, 9, "12345678901234567890", 20, S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 10, "", 0, S(""));
-    test(S("abcdefghij"), 0, 10, "12345", 0, S(""));
-    test(S("abcdefghij"), 0, 10, "12345", 1, S("1"));
-    test(S("abcdefghij"), 0, 10, "12345", 2, S("12"));
-    test(S("abcdefghij"), 0, 10, "12345", 4, S("1234"));
-    test(S("abcdefghij"), 0, 10, "12345", 5, S("12345"));
-    test(S("abcdefghij"), 0, 10, "1234567890", 0, S(""));
-    test(S("abcdefghij"), 0, 10, "1234567890", 1, S("1"));
-    test(S("abcdefghij"), 0, 10, "1234567890", 5, S("12345"));
-    test(S("abcdefghij"), 0, 10, "1234567890", 9, S("123456789"));
-    test(S("abcdefghij"), 0, 10, "1234567890", 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, "12345678901234567890", 0, S(""));
-    test(S("abcdefghij"), 0, 10, "12345678901234567890", 1, S("1"));
-    test(S("abcdefghij"), 0, 10, "12345678901234567890", 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, "12345678901234567890", 19, S("1234567890123456789"));
-    test(S("abcdefghij"), 0, 10, "12345678901234567890", 20, S("12345678901234567890"));
-    test(S("abcdefghij"), 1, 0, "", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345", 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345", 2, S("a12bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345", 4, S("a1234bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345", 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, "1234567890", 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "1234567890", 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "1234567890", 9, S("a123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "1234567890", 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345678901234567890", 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345678901234567890", 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 1, "", 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345", 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345", 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345", 2, S("a12cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345", 4, S("a1234cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345", 5, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, "1234567890", 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, "1234567890", 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, "1234567890", 5, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, "1234567890", 9, S("a123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, "1234567890", 10, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345678901234567890", 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345678901234567890", 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345678901234567890", 10, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cdefghij"));
+TEST_CONSTEXPR_CXX20 bool test3() {
+  test(S("abcdefghij"), 0, 0, "12345678901234567890", 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345678901234567890", 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 1, "", 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345", 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345", 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345", 2, S("12bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345", 4, S("1234bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345", 5, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "1234567890", 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "1234567890", 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "1234567890", 5, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "1234567890", 9, S("123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "1234567890", 10, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345678901234567890", 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345678901234567890", 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345678901234567890", 10, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 5, "", 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, "12345", 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, "12345", 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, "12345", 2, S("12fghij"));
+  test(S("abcdefghij"), 0, 5, "12345", 4, S("1234fghij"));
+  test(S("abcdefghij"), 0, 5, "12345", 5, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, "1234567890", 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, "1234567890", 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, "1234567890", 5, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, "1234567890", 9, S("123456789fghij"));
+  test(S("abcdefghij"), 0, 5, "1234567890", 10, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, "12345678901234567890", 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, "12345678901234567890", 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, "12345678901234567890", 10, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, "12345678901234567890", 19, S("1234567890123456789fghij"));
+  test(S("abcdefghij"), 0, 5, "12345678901234567890", 20, S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 9, "", 0, S("j"));
+  test(S("abcdefghij"), 0, 9, "12345", 0, S("j"));
+  test(S("abcdefghij"), 0, 9, "12345", 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, "12345", 2, S("12j"));
+  test(S("abcdefghij"), 0, 9, "12345", 4, S("1234j"));
+  test(S("abcdefghij"), 0, 9, "12345", 5, S("12345j"));
+  test(S("abcdefghij"), 0, 9, "1234567890", 0, S("j"));
+  test(S("abcdefghij"), 0, 9, "1234567890", 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, "1234567890", 5, S("12345j"));
+  test(S("abcdefghij"), 0, 9, "1234567890", 9, S("123456789j"));
+  test(S("abcdefghij"), 0, 9, "1234567890", 10, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, "12345678901234567890", 0, S("j"));
+  test(S("abcdefghij"), 0, 9, "12345678901234567890", 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, "12345678901234567890", 10, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, "12345678901234567890", 19, S("1234567890123456789j"));
+  test(S("abcdefghij"), 0, 9, "12345678901234567890", 20, S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 10, "", 0, S(""));
+  test(S("abcdefghij"), 0, 10, "12345", 0, S(""));
+  test(S("abcdefghij"), 0, 10, "12345", 1, S("1"));
+  test(S("abcdefghij"), 0, 10, "12345", 2, S("12"));
+  test(S("abcdefghij"), 0, 10, "12345", 4, S("1234"));
+  test(S("abcdefghij"), 0, 10, "12345", 5, S("12345"));
+  test(S("abcdefghij"), 0, 10, "1234567890", 0, S(""));
+  test(S("abcdefghij"), 0, 10, "1234567890", 1, S("1"));
+  test(S("abcdefghij"), 0, 10, "1234567890", 5, S("12345"));
+  test(S("abcdefghij"), 0, 10, "1234567890", 9, S("123456789"));
+  test(S("abcdefghij"), 0, 10, "1234567890", 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, "12345678901234567890", 0, S(""));
+  test(S("abcdefghij"), 0, 10, "12345678901234567890", 1, S("1"));
+  test(S("abcdefghij"), 0, 10, "12345678901234567890", 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, "12345678901234567890", 19, S("1234567890123456789"));
+  test(S("abcdefghij"), 0, 10, "12345678901234567890", 20, S("12345678901234567890"));
+  test(S("abcdefghij"), 1, 0, "", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345", 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345", 2, S("a12bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345", 4, S("a1234bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345", 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, "1234567890", 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "1234567890", 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "1234567890", 9, S("a123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "1234567890", 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345678901234567890", 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345678901234567890", 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 1, "", 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345", 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345", 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345", 2, S("a12cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345", 4, S("a1234cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345", 5, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, "1234567890", 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, "1234567890", 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, "1234567890", 5, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, "1234567890", 9, S("a123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, "1234567890", 10, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345678901234567890", 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345678901234567890", 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345678901234567890", 10, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cdefghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test4()
-{
-    test(S("abcdefghij"), 1, 4, "", 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, "12345", 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, "12345", 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, "12345", 2, S("a12fghij"));
-    test(S("abcdefghij"), 1, 4, "12345", 4, S("a1234fghij"));
-    test(S("abcdefghij"), 1, 4, "12345", 5, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, "1234567890", 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, "1234567890", 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, "1234567890", 5, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, "1234567890", 9, S("a123456789fghij"));
-    test(S("abcdefghij"), 1, 4, "1234567890", 10, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, "12345678901234567890", 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, "12345678901234567890", 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, "12345678901234567890", 10, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, "12345678901234567890", 19, S("a1234567890123456789fghij"));
-    test(S("abcdefghij"), 1, 4, "12345678901234567890", 20, S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 8, "", 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, "12345", 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, "12345", 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, "12345", 2, S("a12j"));
-    test(S("abcdefghij"), 1, 8, "12345", 4, S("a1234j"));
-    test(S("abcdefghij"), 1, 8, "12345", 5, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, "1234567890", 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, "1234567890", 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, "1234567890", 5, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, "1234567890", 9, S("a123456789j"));
-    test(S("abcdefghij"), 1, 8, "1234567890", 10, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, "12345678901234567890", 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, "12345678901234567890", 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, "12345678901234567890", 10, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, "12345678901234567890", 19, S("a1234567890123456789j"));
-    test(S("abcdefghij"), 1, 8, "12345678901234567890", 20, S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 9, "", 0, S("a"));
-    test(S("abcdefghij"), 1, 9, "12345", 0, S("a"));
-    test(S("abcdefghij"), 1, 9, "12345", 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, "12345", 2, S("a12"));
-    test(S("abcdefghij"), 1, 9, "12345", 4, S("a1234"));
-    test(S("abcdefghij"), 1, 9, "12345", 5, S("a12345"));
-    test(S("abcdefghij"), 1, 9, "1234567890", 0, S("a"));
-    test(S("abcdefghij"), 1, 9, "1234567890", 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, "1234567890", 5, S("a12345"));
-    test(S("abcdefghij"), 1, 9, "1234567890", 9, S("a123456789"));
-    test(S("abcdefghij"), 1, 9, "1234567890", 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, "12345678901234567890", 0, S("a"));
-    test(S("abcdefghij"), 1, 9, "12345678901234567890", 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, "12345678901234567890", 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, "12345678901234567890", 19, S("a1234567890123456789"));
-    test(S("abcdefghij"), 1, 9, "12345678901234567890", 20, S("a12345678901234567890"));
-    test(S("abcdefghij"), 5, 0, "", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, "12345", 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, "12345", 2, S("abcde12fghij"));
-    test(S("abcdefghij"), 5, 0, "12345", 4, S("abcde1234fghij"));
-    test(S("abcdefghij"), 5, 0, "12345", 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, "1234567890", 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, "1234567890", 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, "1234567890", 9, S("abcde123456789fghij"));
-    test(S("abcdefghij"), 5, 0, "1234567890", 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, "12345678901234567890", 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, "12345678901234567890", 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, "12345678901234567890", 19, S("abcde1234567890123456789fghij"));
-    test(S("abcdefghij"), 5, 0, "12345678901234567890", 20, S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 1, "", 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, "12345", 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, "12345", 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, "12345", 2, S("abcde12ghij"));
-    test(S("abcdefghij"), 5, 1, "12345", 4, S("abcde1234ghij"));
-    test(S("abcdefghij"), 5, 1, "12345", 5, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, "1234567890", 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, "1234567890", 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, "1234567890", 5, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, "1234567890", 9, S("abcde123456789ghij"));
-    test(S("abcdefghij"), 5, 1, "1234567890", 10, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, "12345678901234567890", 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, "12345678901234567890", 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, "12345678901234567890", 10, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, "12345678901234567890", 19, S("abcde1234567890123456789ghij"));
-    test(S("abcdefghij"), 5, 1, "12345678901234567890", 20, S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 2, "", 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, "12345", 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, "12345", 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, "12345", 2, S("abcde12hij"));
-    test(S("abcdefghij"), 5, 2, "12345", 4, S("abcde1234hij"));
-    test(S("abcdefghij"), 5, 2, "12345", 5, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, "1234567890", 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, "1234567890", 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, "1234567890", 5, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, "1234567890", 9, S("abcde123456789hij"));
-    test(S("abcdefghij"), 5, 2, "1234567890", 10, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, "12345678901234567890", 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, "12345678901234567890", 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, "12345678901234567890", 10, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, "12345678901234567890", 19, S("abcde1234567890123456789hij"));
-    test(S("abcdefghij"), 5, 2, "12345678901234567890", 20, S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 4, "", 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, "12345", 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, "12345", 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, "12345", 2, S("abcde12j"));
+TEST_CONSTEXPR_CXX20 bool test4() {
+  test(S("abcdefghij"), 1, 4, "", 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, "12345", 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, "12345", 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, "12345", 2, S("a12fghij"));
+  test(S("abcdefghij"), 1, 4, "12345", 4, S("a1234fghij"));
+  test(S("abcdefghij"), 1, 4, "12345", 5, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, "1234567890", 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, "1234567890", 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, "1234567890", 5, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, "1234567890", 9, S("a123456789fghij"));
+  test(S("abcdefghij"), 1, 4, "1234567890", 10, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, "12345678901234567890", 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, "12345678901234567890", 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, "12345678901234567890", 10, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, "12345678901234567890", 19, S("a1234567890123456789fghij"));
+  test(S("abcdefghij"), 1, 4, "12345678901234567890", 20, S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 8, "", 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, "12345", 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, "12345", 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, "12345", 2, S("a12j"));
+  test(S("abcdefghij"), 1, 8, "12345", 4, S("a1234j"));
+  test(S("abcdefghij"), 1, 8, "12345", 5, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, "1234567890", 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, "1234567890", 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, "1234567890", 5, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, "1234567890", 9, S("a123456789j"));
+  test(S("abcdefghij"), 1, 8, "1234567890", 10, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, "12345678901234567890", 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, "12345678901234567890", 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, "12345678901234567890", 10, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, "12345678901234567890", 19, S("a1234567890123456789j"));
+  test(S("abcdefghij"), 1, 8, "12345678901234567890", 20, S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 9, "", 0, S("a"));
+  test(S("abcdefghij"), 1, 9, "12345", 0, S("a"));
+  test(S("abcdefghij"), 1, 9, "12345", 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, "12345", 2, S("a12"));
+  test(S("abcdefghij"), 1, 9, "12345", 4, S("a1234"));
+  test(S("abcdefghij"), 1, 9, "12345", 5, S("a12345"));
+  test(S("abcdefghij"), 1, 9, "1234567890", 0, S("a"));
+  test(S("abcdefghij"), 1, 9, "1234567890", 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, "1234567890", 5, S("a12345"));
+  test(S("abcdefghij"), 1, 9, "1234567890", 9, S("a123456789"));
+  test(S("abcdefghij"), 1, 9, "1234567890", 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, "12345678901234567890", 0, S("a"));
+  test(S("abcdefghij"), 1, 9, "12345678901234567890", 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, "12345678901234567890", 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, "12345678901234567890", 19, S("a1234567890123456789"));
+  test(S("abcdefghij"), 1, 9, "12345678901234567890", 20, S("a12345678901234567890"));
+  test(S("abcdefghij"), 5, 0, "", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, "12345", 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, "12345", 2, S("abcde12fghij"));
+  test(S("abcdefghij"), 5, 0, "12345", 4, S("abcde1234fghij"));
+  test(S("abcdefghij"), 5, 0, "12345", 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, "1234567890", 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, "1234567890", 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, "1234567890", 9, S("abcde123456789fghij"));
+  test(S("abcdefghij"), 5, 0, "1234567890", 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, "12345678901234567890", 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, "12345678901234567890", 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, "12345678901234567890", 19, S("abcde1234567890123456789fghij"));
+  test(S("abcdefghij"), 5, 0, "12345678901234567890", 20, S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 1, "", 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, "12345", 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, "12345", 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, "12345", 2, S("abcde12ghij"));
+  test(S("abcdefghij"), 5, 1, "12345", 4, S("abcde1234ghij"));
+  test(S("abcdefghij"), 5, 1, "12345", 5, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, "1234567890", 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, "1234567890", 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, "1234567890", 5, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, "1234567890", 9, S("abcde123456789ghij"));
+  test(S("abcdefghij"), 5, 1, "1234567890", 10, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, "12345678901234567890", 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, "12345678901234567890", 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, "12345678901234567890", 10, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, "12345678901234567890", 19, S("abcde1234567890123456789ghij"));
+  test(S("abcdefghij"), 5, 1, "12345678901234567890", 20, S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 2, "", 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, "12345", 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, "12345", 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, "12345", 2, S("abcde12hij"));
+  test(S("abcdefghij"), 5, 2, "12345", 4, S("abcde1234hij"));
+  test(S("abcdefghij"), 5, 2, "12345", 5, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, "1234567890", 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, "1234567890", 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, "1234567890", 5, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, "1234567890", 9, S("abcde123456789hij"));
+  test(S("abcdefghij"), 5, 2, "1234567890", 10, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, "12345678901234567890", 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, "12345678901234567890", 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, "12345678901234567890", 10, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, "12345678901234567890", 19, S("abcde1234567890123456789hij"));
+  test(S("abcdefghij"), 5, 2, "12345678901234567890", 20, S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 4, "", 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, "12345", 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, "12345", 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, "12345", 2, S("abcde12j"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test5()
-{
-    test(S("abcdefghij"), 5, 4, "12345", 4, S("abcde1234j"));
-    test(S("abcdefghij"), 5, 4, "12345", 5, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, "1234567890", 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, "1234567890", 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, "1234567890", 5, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, "1234567890", 9, S("abcde123456789j"));
-    test(S("abcdefghij"), 5, 4, "1234567890", 10, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, "12345678901234567890", 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, "12345678901234567890", 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, "12345678901234567890", 10, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, "12345678901234567890", 19, S("abcde1234567890123456789j"));
-    test(S("abcdefghij"), 5, 4, "12345678901234567890", 20, S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 5, "", 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, "12345", 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, "12345", 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, "12345", 2, S("abcde12"));
-    test(S("abcdefghij"), 5, 5, "12345", 4, S("abcde1234"));
-    test(S("abcdefghij"), 5, 5, "12345", 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, "1234567890", 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, "1234567890", 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, "1234567890", 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, "1234567890", 9, S("abcde123456789"));
-    test(S("abcdefghij"), 5, 5, "1234567890", 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, "12345678901234567890", 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, "12345678901234567890", 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, "12345678901234567890", 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, "12345678901234567890", 19, S("abcde1234567890123456789"));
-    test(S("abcdefghij"), 5, 5, "12345678901234567890", 20, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 9, 0, "", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, "12345", 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, "12345", 2, S("abcdefghi12j"));
-    test(S("abcdefghij"), 9, 0, "12345", 4, S("abcdefghi1234j"));
-    test(S("abcdefghij"), 9, 0, "12345", 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, "1234567890", 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, "1234567890", 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, "1234567890", 9, S("abcdefghi123456789j"));
-    test(S("abcdefghij"), 9, 0, "1234567890", 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, "12345678901234567890", 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, "12345678901234567890", 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, "12345678901234567890", 19, S("abcdefghi1234567890123456789j"));
-    test(S("abcdefghij"), 9, 0, "12345678901234567890", 20, S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 1, "", 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, "12345", 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, "12345", 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, "12345", 2, S("abcdefghi12"));
-    test(S("abcdefghij"), 9, 1, "12345", 4, S("abcdefghi1234"));
-    test(S("abcdefghij"), 9, 1, "12345", 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, "1234567890", 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, "1234567890", 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, "1234567890", 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, "1234567890", 9, S("abcdefghi123456789"));
-    test(S("abcdefghij"), 9, 1, "1234567890", 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, "12345678901234567890", 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, "12345678901234567890", 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, "12345678901234567890", 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, "12345678901234567890", 19, S("abcdefghi1234567890123456789"));
-    test(S("abcdefghij"), 9, 1, "12345678901234567890", 20, S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, "", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, "12345", 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, "12345", 2, S("abcdefghij12"));
-    test(S("abcdefghij"), 10, 0, "12345", 4, S("abcdefghij1234"));
-    test(S("abcdefghij"), 10, 0, "12345", 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, "1234567890", 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, "1234567890", 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, "1234567890", 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, 0, "1234567890", 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, "12345678901234567890", 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, "12345678901234567890", 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghij"), 10, 0, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 2, S("12abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 4, S("1234abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "", 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 2, S("12bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 4, S("1234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 5, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 1, S("1bcdefghijklmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test5() {
+  test(S("abcdefghij"), 5, 4, "12345", 4, S("abcde1234j"));
+  test(S("abcdefghij"), 5, 4, "12345", 5, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, "1234567890", 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, "1234567890", 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, "1234567890", 5, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, "1234567890", 9, S("abcde123456789j"));
+  test(S("abcdefghij"), 5, 4, "1234567890", 10, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, "12345678901234567890", 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, "12345678901234567890", 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, "12345678901234567890", 10, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, "12345678901234567890", 19, S("abcde1234567890123456789j"));
+  test(S("abcdefghij"), 5, 4, "12345678901234567890", 20, S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 5, "", 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, "12345", 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, "12345", 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, "12345", 2, S("abcde12"));
+  test(S("abcdefghij"), 5, 5, "12345", 4, S("abcde1234"));
+  test(S("abcdefghij"), 5, 5, "12345", 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, "1234567890", 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, "1234567890", 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, "1234567890", 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, "1234567890", 9, S("abcde123456789"));
+  test(S("abcdefghij"), 5, 5, "1234567890", 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, "12345678901234567890", 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, "12345678901234567890", 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, "12345678901234567890", 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, "12345678901234567890", 19, S("abcde1234567890123456789"));
+  test(S("abcdefghij"), 5, 5, "12345678901234567890", 20, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 9, 0, "", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, "12345", 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, "12345", 2, S("abcdefghi12j"));
+  test(S("abcdefghij"), 9, 0, "12345", 4, S("abcdefghi1234j"));
+  test(S("abcdefghij"), 9, 0, "12345", 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, "1234567890", 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, "1234567890", 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, "1234567890", 9, S("abcdefghi123456789j"));
+  test(S("abcdefghij"), 9, 0, "1234567890", 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, "12345678901234567890", 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, "12345678901234567890", 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, "12345678901234567890", 19, S("abcdefghi1234567890123456789j"));
+  test(S("abcdefghij"), 9, 0, "12345678901234567890", 20, S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 1, "", 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, "12345", 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, "12345", 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, "12345", 2, S("abcdefghi12"));
+  test(S("abcdefghij"), 9, 1, "12345", 4, S("abcdefghi1234"));
+  test(S("abcdefghij"), 9, 1, "12345", 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, "1234567890", 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, "1234567890", 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, "1234567890", 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, "1234567890", 9, S("abcdefghi123456789"));
+  test(S("abcdefghij"), 9, 1, "1234567890", 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, "12345678901234567890", 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, "12345678901234567890", 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, "12345678901234567890", 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, "12345678901234567890", 19, S("abcdefghi1234567890123456789"));
+  test(S("abcdefghij"), 9, 1, "12345678901234567890", 20, S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, "", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, "12345", 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, "12345", 2, S("abcdefghij12"));
+  test(S("abcdefghij"), 10, 0, "12345", 4, S("abcdefghij1234"));
+  test(S("abcdefghij"), 10, 0, "12345", 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, "1234567890", 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, "1234567890", 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, "1234567890", 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, 0, "1234567890", 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, "12345678901234567890", 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, "12345678901234567890", 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghij"), 10, 0, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 2, S("12abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 4, S("1234abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "", 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 2, S("12bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 4, S("1234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 5, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 1, S("1bcdefghijklmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test6()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 5, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 9, S("123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 10, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 10, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "", 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 2, S("12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 4, S("1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 5, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 5, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 9, S("123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 10, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 10, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 19, S("1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 20, S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "", 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 2, S("12t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 4, S("1234t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 5, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 5, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 9, S("123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 10, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 10, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 19, S("1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 20, S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "", 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 2, S("12"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 4, S("1234"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 9, S("123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 19, S("1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 20, S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 2, S("a12bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 4, S("a1234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 9, S("a123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "", 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 2, S("a12cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 4, S("a1234cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 5, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 5, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 9, S("a123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 10, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 10, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "", 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 2, S("a12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 4, S("a1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 5, S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 5, S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 9, S("a123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 10, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 0, S("aklmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test6() {
+  test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 5, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 9, S("123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 10, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 10, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "", 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 2, S("12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 4, S("1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 5, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 5, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 9, S("123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 10, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 10, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 19, S("1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 20, S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "", 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 2, S("12t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 4, S("1234t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 5, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 5, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 9, S("123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 10, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 10, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 19, S("1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 20, S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "", 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 2, S("12"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 4, S("1234"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 9, S("123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 19, S("1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 20, S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 2, S("a12bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 4, S("a1234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 9, S("a123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "", 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 2, S("a12cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 4, S("a1234cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 5, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 5, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 9, S("a123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 10, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 10, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "", 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 2, S("a12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 4, S("a1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 5, S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 5, S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 9, S("a123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 10, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 0, S("aklmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test7()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 10, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 19, S("a1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 20, S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "", 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 2, S("a12t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 4, S("a1234t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 5, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 5, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 9, S("a123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 10, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 10, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 19, S("a1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 20, S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "", 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 2, S("a12"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 4, S("a1234"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 9, S("a123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 19, S("a1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 20, S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 2, S("abcdefghij12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 4, S("abcdefghij1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 9, S("abcdefghij123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "", 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 2, S("abcdefghij12lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 4, S("abcdefghij1234lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 5, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 5, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 9, S("abcdefghij123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 10, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 10, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 19, S("abcdefghij1234567890123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 20, S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "", 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 2, S("abcdefghij12pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 4, S("abcdefghij1234pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 5, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 5, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 9, S("abcdefghij123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 10, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 10, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 19, S("abcdefghij1234567890123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 20, S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "", 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 2, S("abcdefghij12t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 4, S("abcdefghij1234t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 5, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 5, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 9, S("abcdefghij123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 10, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 10, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 19, S("abcdefghij1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 20, S("abcdefghij12345678901234567890t"));
+TEST_CONSTEXPR_CXX20 bool test7() {
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 10, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 19, S("a1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 20, S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "", 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 2, S("a12t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 4, S("a1234t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 5, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 5, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 9, S("a123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 10, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 10, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 19, S("a1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 20, S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "", 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 2, S("a12"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 4, S("a1234"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 9, S("a123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 19, S("a1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 20, S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 2, S("abcdefghij12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 4, S("abcdefghij1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 9, S("abcdefghij123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "", 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 2, S("abcdefghij12lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 4, S("abcdefghij1234lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 5, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 5, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 9, S("abcdefghij123456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 10, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 10, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 19, S("abcdefghij1234567890123456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 20, S("abcdefghij12345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "", 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 2, S("abcdefghij12pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 4, S("abcdefghij1234pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 5, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 5, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 9, S("abcdefghij123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 10, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 10, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 19, S("abcdefghij1234567890123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 20, S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "", 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 2, S("abcdefghij12t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 4, S("abcdefghij1234t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 5, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 5, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 9, S("abcdefghij123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 10, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 10, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 19, S("abcdefghij1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 20, S("abcdefghij12345678901234567890t"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test8()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 10, "", 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 2, S("abcdefghij12"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 4, S("abcdefghij1234"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 9, S("abcdefghij123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 2, S("abcdefghijklmnopqrs12t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 4, S("abcdefghijklmnopqrs1234t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 9, S("abcdefghijklmnopqrs123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "", 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 2, S("abcdefghijklmnopqrs12"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 4, S("abcdefghijklmnopqrs1234"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 9, S("abcdefghijklmnopqrs123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 2, S("abcdefghijklmnopqrst12"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 4, S("abcdefghijklmnopqrst1234"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890"));
+TEST_CONSTEXPR_CXX20 bool test8() {
+  test(S("abcdefghijklmnopqrst"), 10, 10, "", 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 2, S("abcdefghij12"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 4, S("abcdefghij1234"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 9, S("abcdefghij123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 2, S("abcdefghijklmnopqrs12t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 4, S("abcdefghijklmnopqrs1234t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 9, S("abcdefghijklmnopqrs123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "", 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 2, S("abcdefghijklmnopqrs12"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 4, S("abcdefghijklmnopqrs1234"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 9, S("abcdefghijklmnopqrs123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 2, S("abcdefghijklmnopqrst12"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 4, S("abcdefghijklmnopqrst1234"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890"));
 
-    return true;
+  return true;
 }
 
 template <class S>
@@ -1006,8 +1000,7 @@ void test() {
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp
index 580ea289e347f15..1bade1f7025bc39 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp
@@ -20,249 +20,249 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos1, typename S::size_type n1, typename S::size_type n2,
-     typename S::value_type c, 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, n2, c);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
-    typename S::size_type rlen = n2;
-    assert(s.size() == old_size - xlen + rlen);
+test(S s,
+     typename S::size_type pos1,
+     typename S::size_type n1,
+     typename S::size_type n2,
+     typename S::value_type c,
+     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, n2, c);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
+  typename S::size_type rlen = n2;
+  assert(s.size() == old_size - xlen + rlen);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), 0, 0, 0, '3', S(""));
-    test(S(""), 0, 0, 5, '3', S("33333"));
-    test(S(""), 0, 0, 10, '3', S("3333333333"));
-    test(S(""), 0, 0, 20, '3', S("33333333333333333333"));
-    test(S("abcde"), 0, 0, 0, '3', S("abcde"));
-    test(S("abcde"), 0, 0, 5, '3', S("33333abcde"));
-    test(S("abcde"), 0, 0, 10, '3', S("3333333333abcde"));
-    test(S("abcde"), 0, 0, 20, '3', S("33333333333333333333abcde"));
-    test(S("abcde"), 0, 1, 0, '3', S("bcde"));
-    test(S("abcde"), 0, 1, 5, '3', S("33333bcde"));
-    test(S("abcde"), 0, 1, 10, '3', S("3333333333bcde"));
-    test(S("abcde"), 0, 1, 20, '3', S("33333333333333333333bcde"));
-    test(S("abcde"), 0, 2, 0, '3', S("cde"));
-    test(S("abcde"), 0, 2, 5, '3', S("33333cde"));
-    test(S("abcde"), 0, 2, 10, '3', S("3333333333cde"));
-    test(S("abcde"), 0, 2, 20, '3', S("33333333333333333333cde"));
-    test(S("abcde"), 0, 4, 0, '3', S("e"));
-    test(S("abcde"), 0, 4, 5, '3', S("33333e"));
-    test(S("abcde"), 0, 4, 10, '3', S("3333333333e"));
-    test(S("abcde"), 0, 4, 20, '3', S("33333333333333333333e"));
-    test(S("abcde"), 0, 5, 0, '3', S(""));
-    test(S("abcde"), 0, 5, 5, '3', S("33333"));
-    test(S("abcde"), 0, 5, 10, '3', S("3333333333"));
-    test(S("abcde"), 0, 5, 20, '3', S("33333333333333333333"));
-    test(S("abcde"), 1, 0, 0, '3', S("abcde"));
-    test(S("abcde"), 1, 0, 5, '3', S("a33333bcde"));
-    test(S("abcde"), 1, 0, 10, '3', S("a3333333333bcde"));
-    test(S("abcde"), 1, 0, 20, '3', S("a33333333333333333333bcde"));
-    test(S("abcde"), 1, 1, 0, '3', S("acde"));
-    test(S("abcde"), 1, 1, 5, '3', S("a33333cde"));
-    test(S("abcde"), 1, 1, 10, '3', S("a3333333333cde"));
-    test(S("abcde"), 1, 1, 20, '3', S("a33333333333333333333cde"));
-    test(S("abcde"), 1, 2, 0, '3', S("ade"));
-    test(S("abcde"), 1, 2, 5, '3', S("a33333de"));
-    test(S("abcde"), 1, 2, 10, '3', S("a3333333333de"));
-    test(S("abcde"), 1, 2, 20, '3', S("a33333333333333333333de"));
-    test(S("abcde"), 1, 3, 0, '3', S("ae"));
-    test(S("abcde"), 1, 3, 5, '3', S("a33333e"));
-    test(S("abcde"), 1, 3, 10, '3', S("a3333333333e"));
-    test(S("abcde"), 1, 3, 20, '3', S("a33333333333333333333e"));
-    test(S("abcde"), 1, 4, 0, '3', S("a"));
-    test(S("abcde"), 1, 4, 5, '3', S("a33333"));
-    test(S("abcde"), 1, 4, 10, '3', S("a3333333333"));
-    test(S("abcde"), 1, 4, 20, '3', S("a33333333333333333333"));
-    test(S("abcde"), 2, 0, 0, '3', S("abcde"));
-    test(S("abcde"), 2, 0, 5, '3', S("ab33333cde"));
-    test(S("abcde"), 2, 0, 10, '3', S("ab3333333333cde"));
-    test(S("abcde"), 2, 0, 20, '3', S("ab33333333333333333333cde"));
-    test(S("abcde"), 2, 1, 0, '3', S("abde"));
-    test(S("abcde"), 2, 1, 5, '3', S("ab33333de"));
-    test(S("abcde"), 2, 1, 10, '3', S("ab3333333333de"));
-    test(S("abcde"), 2, 1, 20, '3', S("ab33333333333333333333de"));
-    test(S("abcde"), 2, 2, 0, '3', S("abe"));
-    test(S("abcde"), 2, 2, 5, '3', S("ab33333e"));
-    test(S("abcde"), 2, 2, 10, '3', S("ab3333333333e"));
-    test(S("abcde"), 2, 2, 20, '3', S("ab33333333333333333333e"));
-    test(S("abcde"), 2, 3, 0, '3', S("ab"));
-    test(S("abcde"), 2, 3, 5, '3', S("ab33333"));
-    test(S("abcde"), 2, 3, 10, '3', S("ab3333333333"));
-    test(S("abcde"), 2, 3, 20, '3', S("ab33333333333333333333"));
-    test(S("abcde"), 4, 0, 0, '3', S("abcde"));
-    test(S("abcde"), 4, 0, 5, '3', S("abcd33333e"));
-    test(S("abcde"), 4, 0, 10, '3', S("abcd3333333333e"));
-    test(S("abcde"), 4, 0, 20, '3', S("abcd33333333333333333333e"));
-    test(S("abcde"), 4, 1, 0, '3', S("abcd"));
-    test(S("abcde"), 4, 1, 5, '3', S("abcd33333"));
-    test(S("abcde"), 4, 1, 10, '3', S("abcd3333333333"));
-    test(S("abcde"), 4, 1, 20, '3', S("abcd33333333333333333333"));
-    test(S("abcde"), 5, 0, 0, '3', S("abcde"));
-    test(S("abcde"), 5, 0, 5, '3', S("abcde33333"));
-    test(S("abcde"), 5, 0, 10, '3', S("abcde3333333333"));
-    test(S("abcde"), 5, 0, 20, '3', S("abcde33333333333333333333"));
-    test(S("abcdefghij"), 0, 0, 0, '3', S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, 5, '3', S("33333abcdefghij"));
-    test(S("abcdefghij"), 0, 0, 10, '3', S("3333333333abcdefghij"));
-    test(S("abcdefghij"), 0, 0, 20, '3', S("33333333333333333333abcdefghij"));
-    test(S("abcdefghij"), 0, 1, 0, '3', S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, 5, '3', S("33333bcdefghij"));
-    test(S("abcdefghij"), 0, 1, 10, '3', S("3333333333bcdefghij"));
-    test(S("abcdefghij"), 0, 1, 20, '3', S("33333333333333333333bcdefghij"));
-    test(S("abcdefghij"), 0, 5, 0, '3', S("fghij"));
-    test(S("abcdefghij"), 0, 5, 5, '3', S("33333fghij"));
-    test(S("abcdefghij"), 0, 5, 10, '3', S("3333333333fghij"));
-    test(S("abcdefghij"), 0, 5, 20, '3', S("33333333333333333333fghij"));
-    test(S("abcdefghij"), 0, 9, 0, '3', S("j"));
-    test(S("abcdefghij"), 0, 9, 5, '3', S("33333j"));
-    test(S("abcdefghij"), 0, 9, 10, '3', S("3333333333j"));
-    test(S("abcdefghij"), 0, 9, 20, '3', S("33333333333333333333j"));
-    test(S("abcdefghij"), 0, 10, 0, '3', S(""));
-    test(S("abcdefghij"), 0, 10, 5, '3', S("33333"));
-    test(S("abcdefghij"), 0, 10, 10, '3', S("3333333333"));
-    test(S("abcdefghij"), 0, 10, 20, '3', S("33333333333333333333"));
-    test(S("abcdefghij"), 1, 0, 0, '3', S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, 5, '3', S("a33333bcdefghij"));
-    test(S("abcdefghij"), 1, 0, 10, '3', S("a3333333333bcdefghij"));
-    test(S("abcdefghij"), 1, 0, 20, '3', S("a33333333333333333333bcdefghij"));
-    test(S("abcdefghij"), 1, 1, 0, '3', S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, 5, '3', S("a33333cdefghij"));
-    test(S("abcdefghij"), 1, 1, 10, '3', S("a3333333333cdefghij"));
-    test(S("abcdefghij"), 1, 1, 20, '3', S("a33333333333333333333cdefghij"));
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), 0, 0, 0, '3', S(""));
+  test(S(""), 0, 0, 5, '3', S("33333"));
+  test(S(""), 0, 0, 10, '3', S("3333333333"));
+  test(S(""), 0, 0, 20, '3', S("33333333333333333333"));
+  test(S("abcde"), 0, 0, 0, '3', S("abcde"));
+  test(S("abcde"), 0, 0, 5, '3', S("33333abcde"));
+  test(S("abcde"), 0, 0, 10, '3', S("3333333333abcde"));
+  test(S("abcde"), 0, 0, 20, '3', S("33333333333333333333abcde"));
+  test(S("abcde"), 0, 1, 0, '3', S("bcde"));
+  test(S("abcde"), 0, 1, 5, '3', S("33333bcde"));
+  test(S("abcde"), 0, 1, 10, '3', S("3333333333bcde"));
+  test(S("abcde"), 0, 1, 20, '3', S("33333333333333333333bcde"));
+  test(S("abcde"), 0, 2, 0, '3', S("cde"));
+  test(S("abcde"), 0, 2, 5, '3', S("33333cde"));
+  test(S("abcde"), 0, 2, 10, '3', S("3333333333cde"));
+  test(S("abcde"), 0, 2, 20, '3', S("33333333333333333333cde"));
+  test(S("abcde"), 0, 4, 0, '3', S("e"));
+  test(S("abcde"), 0, 4, 5, '3', S("33333e"));
+  test(S("abcde"), 0, 4, 10, '3', S("3333333333e"));
+  test(S("abcde"), 0, 4, 20, '3', S("33333333333333333333e"));
+  test(S("abcde"), 0, 5, 0, '3', S(""));
+  test(S("abcde"), 0, 5, 5, '3', S("33333"));
+  test(S("abcde"), 0, 5, 10, '3', S("3333333333"));
+  test(S("abcde"), 0, 5, 20, '3', S("33333333333333333333"));
+  test(S("abcde"), 1, 0, 0, '3', S("abcde"));
+  test(S("abcde"), 1, 0, 5, '3', S("a33333bcde"));
+  test(S("abcde"), 1, 0, 10, '3', S("a3333333333bcde"));
+  test(S("abcde"), 1, 0, 20, '3', S("a33333333333333333333bcde"));
+  test(S("abcde"), 1, 1, 0, '3', S("acde"));
+  test(S("abcde"), 1, 1, 5, '3', S("a33333cde"));
+  test(S("abcde"), 1, 1, 10, '3', S("a3333333333cde"));
+  test(S("abcde"), 1, 1, 20, '3', S("a33333333333333333333cde"));
+  test(S("abcde"), 1, 2, 0, '3', S("ade"));
+  test(S("abcde"), 1, 2, 5, '3', S("a33333de"));
+  test(S("abcde"), 1, 2, 10, '3', S("a3333333333de"));
+  test(S("abcde"), 1, 2, 20, '3', S("a33333333333333333333de"));
+  test(S("abcde"), 1, 3, 0, '3', S("ae"));
+  test(S("abcde"), 1, 3, 5, '3', S("a33333e"));
+  test(S("abcde"), 1, 3, 10, '3', S("a3333333333e"));
+  test(S("abcde"), 1, 3, 20, '3', S("a33333333333333333333e"));
+  test(S("abcde"), 1, 4, 0, '3', S("a"));
+  test(S("abcde"), 1, 4, 5, '3', S("a33333"));
+  test(S("abcde"), 1, 4, 10, '3', S("a3333333333"));
+  test(S("abcde"), 1, 4, 20, '3', S("a33333333333333333333"));
+  test(S("abcde"), 2, 0, 0, '3', S("abcde"));
+  test(S("abcde"), 2, 0, 5, '3', S("ab33333cde"));
+  test(S("abcde"), 2, 0, 10, '3', S("ab3333333333cde"));
+  test(S("abcde"), 2, 0, 20, '3', S("ab33333333333333333333cde"));
+  test(S("abcde"), 2, 1, 0, '3', S("abde"));
+  test(S("abcde"), 2, 1, 5, '3', S("ab33333de"));
+  test(S("abcde"), 2, 1, 10, '3', S("ab3333333333de"));
+  test(S("abcde"), 2, 1, 20, '3', S("ab33333333333333333333de"));
+  test(S("abcde"), 2, 2, 0, '3', S("abe"));
+  test(S("abcde"), 2, 2, 5, '3', S("ab33333e"));
+  test(S("abcde"), 2, 2, 10, '3', S("ab3333333333e"));
+  test(S("abcde"), 2, 2, 20, '3', S("ab33333333333333333333e"));
+  test(S("abcde"), 2, 3, 0, '3', S("ab"));
+  test(S("abcde"), 2, 3, 5, '3', S("ab33333"));
+  test(S("abcde"), 2, 3, 10, '3', S("ab3333333333"));
+  test(S("abcde"), 2, 3, 20, '3', S("ab33333333333333333333"));
+  test(S("abcde"), 4, 0, 0, '3', S("abcde"));
+  test(S("abcde"), 4, 0, 5, '3', S("abcd33333e"));
+  test(S("abcde"), 4, 0, 10, '3', S("abcd3333333333e"));
+  test(S("abcde"), 4, 0, 20, '3', S("abcd33333333333333333333e"));
+  test(S("abcde"), 4, 1, 0, '3', S("abcd"));
+  test(S("abcde"), 4, 1, 5, '3', S("abcd33333"));
+  test(S("abcde"), 4, 1, 10, '3', S("abcd3333333333"));
+  test(S("abcde"), 4, 1, 20, '3', S("abcd33333333333333333333"));
+  test(S("abcde"), 5, 0, 0, '3', S("abcde"));
+  test(S("abcde"), 5, 0, 5, '3', S("abcde33333"));
+  test(S("abcde"), 5, 0, 10, '3', S("abcde3333333333"));
+  test(S("abcde"), 5, 0, 20, '3', S("abcde33333333333333333333"));
+  test(S("abcdefghij"), 0, 0, 0, '3', S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, 5, '3', S("33333abcdefghij"));
+  test(S("abcdefghij"), 0, 0, 10, '3', S("3333333333abcdefghij"));
+  test(S("abcdefghij"), 0, 0, 20, '3', S("33333333333333333333abcdefghij"));
+  test(S("abcdefghij"), 0, 1, 0, '3', S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, 5, '3', S("33333bcdefghij"));
+  test(S("abcdefghij"), 0, 1, 10, '3', S("3333333333bcdefghij"));
+  test(S("abcdefghij"), 0, 1, 20, '3', S("33333333333333333333bcdefghij"));
+  test(S("abcdefghij"), 0, 5, 0, '3', S("fghij"));
+  test(S("abcdefghij"), 0, 5, 5, '3', S("33333fghij"));
+  test(S("abcdefghij"), 0, 5, 10, '3', S("3333333333fghij"));
+  test(S("abcdefghij"), 0, 5, 20, '3', S("33333333333333333333fghij"));
+  test(S("abcdefghij"), 0, 9, 0, '3', S("j"));
+  test(S("abcdefghij"), 0, 9, 5, '3', S("33333j"));
+  test(S("abcdefghij"), 0, 9, 10, '3', S("3333333333j"));
+  test(S("abcdefghij"), 0, 9, 20, '3', S("33333333333333333333j"));
+  test(S("abcdefghij"), 0, 10, 0, '3', S(""));
+  test(S("abcdefghij"), 0, 10, 5, '3', S("33333"));
+  test(S("abcdefghij"), 0, 10, 10, '3', S("3333333333"));
+  test(S("abcdefghij"), 0, 10, 20, '3', S("33333333333333333333"));
+  test(S("abcdefghij"), 1, 0, 0, '3', S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, 5, '3', S("a33333bcdefghij"));
+  test(S("abcdefghij"), 1, 0, 10, '3', S("a3333333333bcdefghij"));
+  test(S("abcdefghij"), 1, 0, 20, '3', S("a33333333333333333333bcdefghij"));
+  test(S("abcdefghij"), 1, 1, 0, '3', S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, 5, '3', S("a33333cdefghij"));
+  test(S("abcdefghij"), 1, 1, 10, '3', S("a3333333333cdefghij"));
+  test(S("abcdefghij"), 1, 1, 20, '3', S("a33333333333333333333cdefghij"));
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S("abcdefghij"), 1, 4, 0, '3', S("afghij"));
-    test(S("abcdefghij"), 1, 4, 5, '3', S("a33333fghij"));
-    test(S("abcdefghij"), 1, 4, 10, '3', S("a3333333333fghij"));
-    test(S("abcdefghij"), 1, 4, 20, '3', S("a33333333333333333333fghij"));
-    test(S("abcdefghij"), 1, 8, 0, '3', S("aj"));
-    test(S("abcdefghij"), 1, 8, 5, '3', S("a33333j"));
-    test(S("abcdefghij"), 1, 8, 10, '3', S("a3333333333j"));
-    test(S("abcdefghij"), 1, 8, 20, '3', S("a33333333333333333333j"));
-    test(S("abcdefghij"), 1, 9, 0, '3', S("a"));
-    test(S("abcdefghij"), 1, 9, 5, '3', S("a33333"));
-    test(S("abcdefghij"), 1, 9, 10, '3', S("a3333333333"));
-    test(S("abcdefghij"), 1, 9, 20, '3', S("a33333333333333333333"));
-    test(S("abcdefghij"), 5, 0, 0, '3', S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, 5, '3', S("abcde33333fghij"));
-    test(S("abcdefghij"), 5, 0, 10, '3', S("abcde3333333333fghij"));
-    test(S("abcdefghij"), 5, 0, 20, '3', S("abcde33333333333333333333fghij"));
-    test(S("abcdefghij"), 5, 1, 0, '3', S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, 5, '3', S("abcde33333ghij"));
-    test(S("abcdefghij"), 5, 1, 10, '3', S("abcde3333333333ghij"));
-    test(S("abcdefghij"), 5, 1, 20, '3', S("abcde33333333333333333333ghij"));
-    test(S("abcdefghij"), 5, 2, 0, '3', S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, 5, '3', S("abcde33333hij"));
-    test(S("abcdefghij"), 5, 2, 10, '3', S("abcde3333333333hij"));
-    test(S("abcdefghij"), 5, 2, 20, '3', S("abcde33333333333333333333hij"));
-    test(S("abcdefghij"), 5, 4, 0, '3', S("abcdej"));
-    test(S("abcdefghij"), 5, 4, 5, '3', S("abcde33333j"));
-    test(S("abcdefghij"), 5, 4, 10, '3', S("abcde3333333333j"));
-    test(S("abcdefghij"), 5, 4, 20, '3', S("abcde33333333333333333333j"));
-    test(S("abcdefghij"), 5, 5, 0, '3', S("abcde"));
-    test(S("abcdefghij"), 5, 5, 5, '3', S("abcde33333"));
-    test(S("abcdefghij"), 5, 5, 10, '3', S("abcde3333333333"));
-    test(S("abcdefghij"), 5, 5, 20, '3', S("abcde33333333333333333333"));
-    test(S("abcdefghij"), 9, 0, 0, '3', S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, 5, '3', S("abcdefghi33333j"));
-    test(S("abcdefghij"), 9, 0, 10, '3', S("abcdefghi3333333333j"));
-    test(S("abcdefghij"), 9, 0, 20, '3', S("abcdefghi33333333333333333333j"));
-    test(S("abcdefghij"), 9, 1, 0, '3', S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, 5, '3', S("abcdefghi33333"));
-    test(S("abcdefghij"), 9, 1, 10, '3', S("abcdefghi3333333333"));
-    test(S("abcdefghij"), 9, 1, 20, '3', S("abcdefghi33333333333333333333"));
-    test(S("abcdefghij"), 10, 0, 0, '3', S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, 5, '3', S("abcdefghij33333"));
-    test(S("abcdefghij"), 10, 0, 10, '3', S("abcdefghij3333333333"));
-    test(S("abcdefghij"), 10, 0, 20, '3', S("abcdefghij33333333333333333333"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, 0, '3', S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, 5, '3', S("33333abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, 10, '3', S("3333333333abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, 20, '3', S("33333333333333333333abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, 0, '3', S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, 5, '3', S("33333bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, 10, '3', S("3333333333bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, 20, '3', S("33333333333333333333bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, 0, '3', S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, 5, '3', S("33333klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, 10, '3', S("3333333333klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, 20, '3', S("33333333333333333333klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, 0, '3', S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, 5, '3', S("33333t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, 10, '3', S("3333333333t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, 20, '3', S("33333333333333333333t"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, 0, '3', S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, 5, '3', S("33333"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, 10, '3', S("3333333333"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, 20, '3', S("33333333333333333333"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, 0, '3', S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, 5, '3', S("a33333bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, 10, '3', S("a3333333333bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, 20, '3', S("a33333333333333333333bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, 0, '3', S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, 5, '3', S("a33333cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, 10, '3', S("a3333333333cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, 20, '3', S("a33333333333333333333cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, 0, '3', S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, 5, '3', S("a33333klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, 10, '3', S("a3333333333klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, 20, '3', S("a33333333333333333333klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, 0, '3', S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, 5, '3', S("a33333t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, 10, '3', S("a3333333333t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, 20, '3', S("a33333333333333333333t"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, 0, '3', S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, 5, '3', S("a33333"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, 10, '3', S("a3333333333"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, 20, '3', S("a33333333333333333333"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, 0, '3', S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, 5, '3', S("abcdefghij33333klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, 10, '3', S("abcdefghij3333333333klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, 20, '3', S("abcdefghij33333333333333333333klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, 0, '3', S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, 5, '3', S("abcdefghij33333lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, 10, '3', S("abcdefghij3333333333lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, 20, '3', S("abcdefghij33333333333333333333lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, 0, '3', S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, 5, '3', S("abcdefghij33333pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, 10, '3', S("abcdefghij3333333333pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, 20, '3', S("abcdefghij33333333333333333333pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, 0, '3', S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, 5, '3', S("abcdefghij33333t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, 10, '3', S("abcdefghij3333333333t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, 20, '3', S("abcdefghij33333333333333333333t"));
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S("abcdefghij"), 1, 4, 0, '3', S("afghij"));
+  test(S("abcdefghij"), 1, 4, 5, '3', S("a33333fghij"));
+  test(S("abcdefghij"), 1, 4, 10, '3', S("a3333333333fghij"));
+  test(S("abcdefghij"), 1, 4, 20, '3', S("a33333333333333333333fghij"));
+  test(S("abcdefghij"), 1, 8, 0, '3', S("aj"));
+  test(S("abcdefghij"), 1, 8, 5, '3', S("a33333j"));
+  test(S("abcdefghij"), 1, 8, 10, '3', S("a3333333333j"));
+  test(S("abcdefghij"), 1, 8, 20, '3', S("a33333333333333333333j"));
+  test(S("abcdefghij"), 1, 9, 0, '3', S("a"));
+  test(S("abcdefghij"), 1, 9, 5, '3', S("a33333"));
+  test(S("abcdefghij"), 1, 9, 10, '3', S("a3333333333"));
+  test(S("abcdefghij"), 1, 9, 20, '3', S("a33333333333333333333"));
+  test(S("abcdefghij"), 5, 0, 0, '3', S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, 5, '3', S("abcde33333fghij"));
+  test(S("abcdefghij"), 5, 0, 10, '3', S("abcde3333333333fghij"));
+  test(S("abcdefghij"), 5, 0, 20, '3', S("abcde33333333333333333333fghij"));
+  test(S("abcdefghij"), 5, 1, 0, '3', S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, 5, '3', S("abcde33333ghij"));
+  test(S("abcdefghij"), 5, 1, 10, '3', S("abcde3333333333ghij"));
+  test(S("abcdefghij"), 5, 1, 20, '3', S("abcde33333333333333333333ghij"));
+  test(S("abcdefghij"), 5, 2, 0, '3', S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, 5, '3', S("abcde33333hij"));
+  test(S("abcdefghij"), 5, 2, 10, '3', S("abcde3333333333hij"));
+  test(S("abcdefghij"), 5, 2, 20, '3', S("abcde33333333333333333333hij"));
+  test(S("abcdefghij"), 5, 4, 0, '3', S("abcdej"));
+  test(S("abcdefghij"), 5, 4, 5, '3', S("abcde33333j"));
+  test(S("abcdefghij"), 5, 4, 10, '3', S("abcde3333333333j"));
+  test(S("abcdefghij"), 5, 4, 20, '3', S("abcde33333333333333333333j"));
+  test(S("abcdefghij"), 5, 5, 0, '3', S("abcde"));
+  test(S("abcdefghij"), 5, 5, 5, '3', S("abcde33333"));
+  test(S("abcdefghij"), 5, 5, 10, '3', S("abcde3333333333"));
+  test(S("abcdefghij"), 5, 5, 20, '3', S("abcde33333333333333333333"));
+  test(S("abcdefghij"), 9, 0, 0, '3', S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, 5, '3', S("abcdefghi33333j"));
+  test(S("abcdefghij"), 9, 0, 10, '3', S("abcdefghi3333333333j"));
+  test(S("abcdefghij"), 9, 0, 20, '3', S("abcdefghi33333333333333333333j"));
+  test(S("abcdefghij"), 9, 1, 0, '3', S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, 5, '3', S("abcdefghi33333"));
+  test(S("abcdefghij"), 9, 1, 10, '3', S("abcdefghi3333333333"));
+  test(S("abcdefghij"), 9, 1, 20, '3', S("abcdefghi33333333333333333333"));
+  test(S("abcdefghij"), 10, 0, 0, '3', S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, 5, '3', S("abcdefghij33333"));
+  test(S("abcdefghij"), 10, 0, 10, '3', S("abcdefghij3333333333"));
+  test(S("abcdefghij"), 10, 0, 20, '3', S("abcdefghij33333333333333333333"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, 0, '3', S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, 5, '3', S("33333abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, 10, '3', S("3333333333abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, 20, '3', S("33333333333333333333abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, 0, '3', S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, 5, '3', S("33333bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, 10, '3', S("3333333333bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, 20, '3', S("33333333333333333333bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, 0, '3', S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, 5, '3', S("33333klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, 10, '3', S("3333333333klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, 20, '3', S("33333333333333333333klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, 0, '3', S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, 5, '3', S("33333t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, 10, '3', S("3333333333t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, 20, '3', S("33333333333333333333t"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, 0, '3', S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, 5, '3', S("33333"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, 10, '3', S("3333333333"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, 20, '3', S("33333333333333333333"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, 0, '3', S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, 5, '3', S("a33333bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, 10, '3', S("a3333333333bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, 20, '3', S("a33333333333333333333bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, 0, '3', S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, 5, '3', S("a33333cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, 10, '3', S("a3333333333cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, 20, '3', S("a33333333333333333333cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, 0, '3', S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, 5, '3', S("a33333klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, 10, '3', S("a3333333333klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, 20, '3', S("a33333333333333333333klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, 0, '3', S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, 5, '3', S("a33333t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, 10, '3', S("a3333333333t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, 20, '3', S("a33333333333333333333t"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, 0, '3', S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, 5, '3', S("a33333"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, 10, '3', S("a3333333333"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, 20, '3', S("a33333333333333333333"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, 0, '3', S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, 5, '3', S("abcdefghij33333klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, 10, '3', S("abcdefghij3333333333klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, 20, '3', S("abcdefghij33333333333333333333klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, 0, '3', S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, 5, '3', S("abcdefghij33333lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, 10, '3', S("abcdefghij3333333333lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, 20, '3', S("abcdefghij33333333333333333333lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, 0, '3', S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, 5, '3', S("abcdefghij33333pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, 10, '3', S("abcdefghij3333333333pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, 20, '3', S("abcdefghij33333333333333333333pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, 0, '3', S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, 5, '3', S("abcdefghij33333t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, 10, '3', S("abcdefghij3333333333t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, 20, '3', S("abcdefghij33333333333333333333t"));
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test2()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 10, 0, '3', S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, 5, '3', S("abcdefghij33333"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, 10, '3', S("abcdefghij3333333333"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, 20, '3', S("abcdefghij33333333333333333333"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, 0, '3', S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, 5, '3', S("abcdefghijklmnopqrs33333t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, 10, '3', S("abcdefghijklmnopqrs3333333333t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, 20, '3', S("abcdefghijklmnopqrs33333333333333333333t"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, 0, '3', S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, 5, '3', S("abcdefghijklmnopqrs33333"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, 10, '3', S("abcdefghijklmnopqrs3333333333"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, 20, '3', S("abcdefghijklmnopqrs33333333333333333333"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, 0, '3', S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, 5, '3', S("abcdefghijklmnopqrst33333"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, 10, '3', S("abcdefghijklmnopqrst3333333333"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, 20, '3', S("abcdefghijklmnopqrst33333333333333333333"));
+TEST_CONSTEXPR_CXX20 void test2() {
+  test(S("abcdefghijklmnopqrst"), 10, 10, 0, '3', S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, 5, '3', S("abcdefghij33333"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, 10, '3', S("abcdefghij3333333333"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, 20, '3', S("abcdefghij33333333333333333333"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, 0, '3', S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, 5, '3', S("abcdefghijklmnopqrs33333t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, 10, '3', S("abcdefghijklmnopqrs3333333333t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, 20, '3', S("abcdefghijklmnopqrs33333333333333333333t"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, 0, '3', S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, 5, '3', S("abcdefghijklmnopqrs33333"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, 10, '3', S("abcdefghijklmnopqrs3333333333"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, 20, '3', S("abcdefghijklmnopqrs33333333333333333333"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, 0, '3', S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, 5, '3', S("abcdefghijklmnopqrst33333"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, 10, '3', S("abcdefghijklmnopqrst3333333333"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, 20, '3', S("abcdefghijklmnopqrst33333333333333333333"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -284,8 +284,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp
index 3cf5dbcc5d51f89..35db1d636819169 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp
@@ -19,255 +19,250 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos1, typename S::size_type n1, S 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);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
-    typename S::size_type rlen = str.size();
-    assert(s.size() == old_size - xlen + rlen);
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos1, typename S::size_type n1, S 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);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
+  typename S::size_type rlen = str.size();
+  assert(s.size() == old_size - xlen + rlen);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, S(""), S(""));
-    test(S(""), 0, 0, S("12345"), S("12345"));
-    test(S(""), 0, 0, S("1234567890"), S("1234567890"));
-    test(S(""), 0, 0, S("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcde"), 0, 0, S(""), S("abcde"));
-    test(S("abcde"), 0, 0, S("12345"), S("12345abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), S("1234567890abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 1, S(""), S("bcde"));
-    test(S("abcde"), 0, 1, S("12345"), S("12345bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), S("1234567890bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 2, S(""), S("cde"));
-    test(S("abcde"), 0, 2, S("12345"), S("12345cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), S("1234567890cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), S("12345678901234567890cde"));
-    test(S("abcde"), 0, 4, S(""), S("e"));
-    test(S("abcde"), 0, 4, S("12345"), S("12345e"));
-    test(S("abcde"), 0, 4, S("1234567890"), S("1234567890e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), S("12345678901234567890e"));
-    test(S("abcde"), 0, 5, S(""), S(""));
-    test(S("abcde"), 0, 5, S("12345"), S("12345"));
-    test(S("abcde"), 0, 5, S("1234567890"), S("1234567890"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcde"), 1, 0, S(""), S("abcde"));
-    test(S("abcde"), 1, 0, S("12345"), S("a12345bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 1, S(""), S("acde"));
-    test(S("abcde"), 1, 1, S("12345"), S("a12345cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), S("a1234567890cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 2, S(""), S("ade"));
-    test(S("abcde"), 1, 2, S("12345"), S("a12345de"));
-    test(S("abcde"), 1, 2, S("1234567890"), S("a1234567890de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), S("a12345678901234567890de"));
-    test(S("abcde"), 1, 3, S(""), S("ae"));
-    test(S("abcde"), 1, 3, S("12345"), S("a12345e"));
-    test(S("abcde"), 1, 3, S("1234567890"), S("a1234567890e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), S("a12345678901234567890e"));
-    test(S("abcde"), 1, 4, S(""), S("a"));
-    test(S("abcde"), 1, 4, S("12345"), S("a12345"));
-    test(S("abcde"), 1, 4, S("1234567890"), S("a1234567890"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcde"), 2, 0, S(""), S("abcde"));
-    test(S("abcde"), 2, 0, S("12345"), S("ab12345cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 1, S(""), S("abde"));
-    test(S("abcde"), 2, 1, S("12345"), S("ab12345de"));
-    test(S("abcde"), 2, 1, S("1234567890"), S("ab1234567890de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 2, S(""), S("abe"));
-    test(S("abcde"), 2, 2, S("12345"), S("ab12345e"));
-    test(S("abcde"), 2, 2, S("1234567890"), S("ab1234567890e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 3, S(""), S("ab"));
-    test(S("abcde"), 2, 3, S("12345"), S("ab12345"));
-    test(S("abcde"), 2, 3, S("1234567890"), S("ab1234567890"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), S("ab12345678901234567890"));
-    test(S("abcde"), 4, 0, S(""), S("abcde"));
-    test(S("abcde"), 4, 0, S("12345"), S("abcd12345e"));
-    test(S("abcde"), 4, 0, S("1234567890"), S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 1, S(""), S("abcd"));
-    test(S("abcde"), 4, 1, S("12345"), S("abcd12345"));
-    test(S("abcde"), 4, 1, S("1234567890"), S("abcd1234567890"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), S("abcd12345678901234567890"));
-    test(S("abcde"), 5, 0, S(""), S("abcde"));
-    test(S("abcde"), 5, 0, S("12345"), S("abcde12345"));
-    test(S("abcde"), 5, 0, S("1234567890"), S("abcde1234567890"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 0, 0, S(""), S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 1, S(""), S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 5, S(""), S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 9, S(""), S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), S("12345j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 10, S(""), S(""));
-    test(S("abcdefghij"), 0, 10, S("12345"), S("12345"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), S("1234567890"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcdefghij"), 1, 0, S(""), S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 1, S(""), S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), S("a12345678901234567890cdefghij"));
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, S(""), S(""));
+  test(S(""), 0, 0, S("12345"), S("12345"));
+  test(S(""), 0, 0, S("1234567890"), S("1234567890"));
+  test(S(""), 0, 0, S("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcde"), 0, 0, S(""), S("abcde"));
+  test(S("abcde"), 0, 0, S("12345"), S("12345abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), S("1234567890abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 1, S(""), S("bcde"));
+  test(S("abcde"), 0, 1, S("12345"), S("12345bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), S("1234567890bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 2, S(""), S("cde"));
+  test(S("abcde"), 0, 2, S("12345"), S("12345cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), S("1234567890cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), S("12345678901234567890cde"));
+  test(S("abcde"), 0, 4, S(""), S("e"));
+  test(S("abcde"), 0, 4, S("12345"), S("12345e"));
+  test(S("abcde"), 0, 4, S("1234567890"), S("1234567890e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), S("12345678901234567890e"));
+  test(S("abcde"), 0, 5, S(""), S(""));
+  test(S("abcde"), 0, 5, S("12345"), S("12345"));
+  test(S("abcde"), 0, 5, S("1234567890"), S("1234567890"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcde"), 1, 0, S(""), S("abcde"));
+  test(S("abcde"), 1, 0, S("12345"), S("a12345bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 1, S(""), S("acde"));
+  test(S("abcde"), 1, 1, S("12345"), S("a12345cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), S("a1234567890cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 2, S(""), S("ade"));
+  test(S("abcde"), 1, 2, S("12345"), S("a12345de"));
+  test(S("abcde"), 1, 2, S("1234567890"), S("a1234567890de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), S("a12345678901234567890de"));
+  test(S("abcde"), 1, 3, S(""), S("ae"));
+  test(S("abcde"), 1, 3, S("12345"), S("a12345e"));
+  test(S("abcde"), 1, 3, S("1234567890"), S("a1234567890e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), S("a12345678901234567890e"));
+  test(S("abcde"), 1, 4, S(""), S("a"));
+  test(S("abcde"), 1, 4, S("12345"), S("a12345"));
+  test(S("abcde"), 1, 4, S("1234567890"), S("a1234567890"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcde"), 2, 0, S(""), S("abcde"));
+  test(S("abcde"), 2, 0, S("12345"), S("ab12345cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 1, S(""), S("abde"));
+  test(S("abcde"), 2, 1, S("12345"), S("ab12345de"));
+  test(S("abcde"), 2, 1, S("1234567890"), S("ab1234567890de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 2, S(""), S("abe"));
+  test(S("abcde"), 2, 2, S("12345"), S("ab12345e"));
+  test(S("abcde"), 2, 2, S("1234567890"), S("ab1234567890e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 3, S(""), S("ab"));
+  test(S("abcde"), 2, 3, S("12345"), S("ab12345"));
+  test(S("abcde"), 2, 3, S("1234567890"), S("ab1234567890"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), S("ab12345678901234567890"));
+  test(S("abcde"), 4, 0, S(""), S("abcde"));
+  test(S("abcde"), 4, 0, S("12345"), S("abcd12345e"));
+  test(S("abcde"), 4, 0, S("1234567890"), S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 1, S(""), S("abcd"));
+  test(S("abcde"), 4, 1, S("12345"), S("abcd12345"));
+  test(S("abcde"), 4, 1, S("1234567890"), S("abcd1234567890"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), S("abcd12345678901234567890"));
+  test(S("abcde"), 5, 0, S(""), S("abcde"));
+  test(S("abcde"), 5, 0, S("12345"), S("abcde12345"));
+  test(S("abcde"), 5, 0, S("1234567890"), S("abcde1234567890"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 0, 0, S(""), S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 1, S(""), S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 5, S(""), S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 9, S(""), S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), S("12345j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 10, S(""), S(""));
+  test(S("abcdefghij"), 0, 10, S("12345"), S("12345"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), S("1234567890"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcdefghij"), 1, 0, S(""), S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 1, S(""), S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), S("a12345678901234567890cdefghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S("abcdefghij"), 1, 4, S(""), S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 8, S(""), S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345"), S("a12345j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 9, S(""), S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345"), S("a12345"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcdefghij"), 5, 0, S(""), S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 1, S(""), S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 2, S(""), S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 4, S(""), S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345"), S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 5, S(""), S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345"), S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 9, 0, S(""), S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345"), S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 1, S(""), S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345"), S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, S(""), S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345"), S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S(""), S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S(""), S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S(""), S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S(""), S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S(""), S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S(""), S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S(""), S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S(""), S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S(""), S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S(""), S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S(""), S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), S("abcdefghij12345678901234567890t"));
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S("abcdefghij"), 1, 4, S(""), S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 8, S(""), S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345"), S("a12345j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 9, S(""), S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345"), S("a12345"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcdefghij"), 5, 0, S(""), S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 1, S(""), S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 2, S(""), S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 4, S(""), S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345"), S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 5, S(""), S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345"), S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 9, 0, S(""), S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345"), S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 1, S(""), S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345"), S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, S(""), S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345"), S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S(""), S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), S("12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S(""), S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S(""), S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S(""), S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S(""), S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), S("a12345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S(""), S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S(""), S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S(""), S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S(""), S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), S("abcdefghij12345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S(""), S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S(""), S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), S("abcdefghij12345678901234567890t"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 10, S(""), S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S(""), S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S("abcdefghijklmnopqrst"), 10, 10, S(""), S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S(""), S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
 
-    return true;
+  return true;
 }
 
 template <class S>
@@ -293,8 +288,7 @@ void test() {
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string_view.pass.cpp
index 2bbfc1cc4b1423f..bd97872707f3f2b 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/iter_iter_string_view.pass.cpp
@@ -19,255 +19,250 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos1, typename S::size_type n1, SV sv, 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, sv);
-    LIBCPP_ASSERT(s.__invariants());
-    assert(s == expected);
-    typename S::size_type rlen = sv.size();
-    assert(s.size() == old_size - xlen + rlen);
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos1, typename S::size_type n1, SV sv, 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, sv);
+  LIBCPP_ASSERT(s.__invariants());
+  assert(s == expected);
+  typename S::size_type rlen = sv.size();
+  assert(s.size() == old_size - xlen + rlen);
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, SV(""), S(""));
-    test(S(""), 0, 0, SV("12345"), S("12345"));
-    test(S(""), 0, 0, SV("1234567890"), S("1234567890"));
-    test(S(""), 0, 0, SV("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcde"), 0, 0, SV(""), S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), S("12345abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), S("1234567890abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 1, SV(""), S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), S("12345bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), S("1234567890bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 2, SV(""), S("cde"));
-    test(S("abcde"), 0, 2, SV("12345"), S("12345cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), S("1234567890cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), S("12345678901234567890cde"));
-    test(S("abcde"), 0, 4, SV(""), S("e"));
-    test(S("abcde"), 0, 4, SV("12345"), S("12345e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), S("1234567890e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), S("12345678901234567890e"));
-    test(S("abcde"), 0, 5, SV(""), S(""));
-    test(S("abcde"), 0, 5, SV("12345"), S("12345"));
-    test(S("abcde"), 0, 5, SV("1234567890"), S("1234567890"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcde"), 1, 0, SV(""), S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345"), S("a12345bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 1, SV(""), S("acde"));
-    test(S("abcde"), 1, 1, SV("12345"), S("a12345cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), S("a1234567890cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 2, SV(""), S("ade"));
-    test(S("abcde"), 1, 2, SV("12345"), S("a12345de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), S("a1234567890de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), S("a12345678901234567890de"));
-    test(S("abcde"), 1, 3, SV(""), S("ae"));
-    test(S("abcde"), 1, 3, SV("12345"), S("a12345e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), S("a1234567890e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), S("a12345678901234567890e"));
-    test(S("abcde"), 1, 4, SV(""), S("a"));
-    test(S("abcde"), 1, 4, SV("12345"), S("a12345"));
-    test(S("abcde"), 1, 4, SV("1234567890"), S("a1234567890"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcde"), 2, 0, SV(""), S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345"), S("ab12345cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 1, SV(""), S("abde"));
-    test(S("abcde"), 2, 1, SV("12345"), S("ab12345de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), S("ab1234567890de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 2, SV(""), S("abe"));
-    test(S("abcde"), 2, 2, SV("12345"), S("ab12345e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), S("ab1234567890e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 3, SV(""), S("ab"));
-    test(S("abcde"), 2, 3, SV("12345"), S("ab12345"));
-    test(S("abcde"), 2, 3, SV("1234567890"), S("ab1234567890"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), S("ab12345678901234567890"));
-    test(S("abcde"), 4, 0, SV(""), S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345"), S("abcd12345e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 1, SV(""), S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345"), S("abcd12345"));
-    test(S("abcde"), 4, 1, SV("1234567890"), S("abcd1234567890"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), S("abcd12345678901234567890"));
-    test(S("abcde"), 5, 0, SV(""), S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345"), S("abcde12345"));
-    test(S("abcde"), 5, 0, SV("1234567890"), S("abcde1234567890"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 0, 0, SV(""), S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV(""), S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 5, SV(""), S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 9, SV(""), S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), S("12345j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 10, SV(""), S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345"), S("12345"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), S("1234567890"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcdefghij"), 1, 0, SV(""), S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 1, SV(""), S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), S("a12345678901234567890cdefghij"));
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, SV(""), S(""));
+  test(S(""), 0, 0, SV("12345"), S("12345"));
+  test(S(""), 0, 0, SV("1234567890"), S("1234567890"));
+  test(S(""), 0, 0, SV("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcde"), 0, 0, SV(""), S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), S("12345abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), S("1234567890abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 1, SV(""), S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), S("12345bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), S("1234567890bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 2, SV(""), S("cde"));
+  test(S("abcde"), 0, 2, SV("12345"), S("12345cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), S("1234567890cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), S("12345678901234567890cde"));
+  test(S("abcde"), 0, 4, SV(""), S("e"));
+  test(S("abcde"), 0, 4, SV("12345"), S("12345e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), S("1234567890e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), S("12345678901234567890e"));
+  test(S("abcde"), 0, 5, SV(""), S(""));
+  test(S("abcde"), 0, 5, SV("12345"), S("12345"));
+  test(S("abcde"), 0, 5, SV("1234567890"), S("1234567890"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcde"), 1, 0, SV(""), S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345"), S("a12345bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 1, SV(""), S("acde"));
+  test(S("abcde"), 1, 1, SV("12345"), S("a12345cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), S("a1234567890cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 2, SV(""), S("ade"));
+  test(S("abcde"), 1, 2, SV("12345"), S("a12345de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), S("a1234567890de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), S("a12345678901234567890de"));
+  test(S("abcde"), 1, 3, SV(""), S("ae"));
+  test(S("abcde"), 1, 3, SV("12345"), S("a12345e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), S("a1234567890e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), S("a12345678901234567890e"));
+  test(S("abcde"), 1, 4, SV(""), S("a"));
+  test(S("abcde"), 1, 4, SV("12345"), S("a12345"));
+  test(S("abcde"), 1, 4, SV("1234567890"), S("a1234567890"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcde"), 2, 0, SV(""), S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345"), S("ab12345cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 1, SV(""), S("abde"));
+  test(S("abcde"), 2, 1, SV("12345"), S("ab12345de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), S("ab1234567890de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 2, SV(""), S("abe"));
+  test(S("abcde"), 2, 2, SV("12345"), S("ab12345e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), S("ab1234567890e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 3, SV(""), S("ab"));
+  test(S("abcde"), 2, 3, SV("12345"), S("ab12345"));
+  test(S("abcde"), 2, 3, SV("1234567890"), S("ab1234567890"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), S("ab12345678901234567890"));
+  test(S("abcde"), 4, 0, SV(""), S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345"), S("abcd12345e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 1, SV(""), S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345"), S("abcd12345"));
+  test(S("abcde"), 4, 1, SV("1234567890"), S("abcd1234567890"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), S("abcd12345678901234567890"));
+  test(S("abcde"), 5, 0, SV(""), S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345"), S("abcde12345"));
+  test(S("abcde"), 5, 0, SV("1234567890"), S("abcde1234567890"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 0, 0, SV(""), S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV(""), S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 5, SV(""), S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 9, SV(""), S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), S("12345j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 10, SV(""), S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345"), S("12345"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), S("1234567890"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcdefghij"), 1, 0, SV(""), S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 1, SV(""), S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), S("a12345678901234567890cdefghij"));
 
-    return true;
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S("abcdefghij"), 1, 4, SV(""), S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 8, SV(""), S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), S("a12345j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 9, SV(""), S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), S("a12345"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcdefghij"), 5, 0, SV(""), S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 1, SV(""), S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 2, SV(""), S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 4, SV(""), S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 5, SV(""), S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 9, 0, SV(""), S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 1, SV(""), S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, SV(""), S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), S("abcdefghij12345678901234567890t"));
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S("abcdefghij"), 1, 4, SV(""), S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 8, SV(""), S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), S("a12345j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 9, SV(""), S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), S("a12345"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcdefghij"), 5, 0, SV(""), S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 1, SV(""), S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 2, SV(""), S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 4, SV(""), S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 5, SV(""), S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 9, 0, SV(""), S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 1, SV(""), S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, SV(""), S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), S("12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), S("a12345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), S("abcdefghij12345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), S("abcdefghij12345678901234567890t"));
 
-    return true;
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
 
-    return true;
+  return true;
 }
 
 TEST_CONSTEXPR_CXX20 void test() {
@@ -290,17 +285,16 @@ TEST_CONSTEXPR_CXX20 void test() {
     test0<S, SV>();
     test1<S, SV>();
     test2<S, SV>();
-#if TEST_STD_VER > 17
+#  if TEST_STD_VER > 17
     static_assert(test0<S, SV>());
     static_assert(test1<S, SV>());
     static_assert(test2<S, SV>());
-#endif
+#  endif
   }
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 
   return 0;

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/replace_with_range.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/replace_with_range.pass.cpp
index e9bfe41f60f5f6e..03e82590ed4ef6c 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/replace_with_range.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/replace_with_range.pass.cpp
@@ -20,9 +20,8 @@
 #include "test_macros.h"
 
 template <class Range>
-concept HasReplaceWithRange = requires (std::string& c, Range&& range) {
-  c.replace_with_range(c.end(), c.end(), std::forward<Range>(range));
-};
+concept HasReplaceWithRange =
+    requires(std::string& c, Range&& range) { c.replace_with_range(c.end(), c.end(), std::forward<Range>(range)); };
 
 constexpr bool test_constraints_replace_with_range() {
   // Input range with the same value type.
@@ -44,7 +43,7 @@ using StrBuffer = Buffer<char, 256>;
 struct TestCaseReplacement {
   StrBuffer initial;
   std::size_t from = 0;
-  std::size_t to = 0;
+  std::size_t to   = 0;
   StrBuffer input;
   StrBuffer expected;
 };
@@ -57,549 +56,586 @@ struct TestCaseReplacement {
 
 // Empty string.
 
-constexpr TestCaseReplacement EmptyString_End_EmptyCut_EmptyRange {
-  .initial = "", .from = 0, .to = 0, .input = "", .expected = ""
-};
+constexpr TestCaseReplacement EmptyString_End_EmptyCut_EmptyRange{
+    .initial = "", .from = 0, .to = 0, .input = "", .expected = ""};
 
-constexpr TestCaseReplacement EmptyString_End_EmptyCut_OneElementRange {
-  .initial = "", .from = 0, .to = 0, .input = "a", .expected = "a"
-};
+constexpr TestCaseReplacement EmptyString_End_EmptyCut_OneElementRange{
+    .initial = "", .from = 0, .to = 0, .input = "a", .expected = "a"};
 
-constexpr TestCaseReplacement EmptyString_End_EmptyCut_MidRange {
-  .initial = "", .from = 0, .to = 0, .input = "aeiou", .expected = "aeiou"
-};
+constexpr TestCaseReplacement EmptyString_End_EmptyCut_MidRange{
+    .initial = "", .from = 0, .to = 0, .input = "aeiou", .expected = "aeiou"};
 
-constexpr TestCaseReplacement EmptyString_End_EmptyCut_LongRange {
-  .initial = "", .from = 0, .to = 0,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789"
-};
+constexpr TestCaseReplacement EmptyString_End_EmptyCut_LongRange{
+    .initial  = "",
+    .from     = 0,
+    .to       = 0,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789"};
 
 // One-element string.
 
-constexpr TestCaseReplacement OneElementString_Begin_EmptyCut_EmptyRange {
-  .initial = "B", .from = 0, .to = 0, .input = "", .expected = "B"
-};
+constexpr TestCaseReplacement OneElementString_Begin_EmptyCut_EmptyRange{
+    .initial = "B", .from = 0, .to = 0, .input = "", .expected = "B"};
 
-constexpr TestCaseReplacement OneElementString_Begin_EmptyCut_OneElementRange {
-  .initial = "B", .from = 0, .to = 0, .input = "a", .expected = "aB"
-};
+constexpr TestCaseReplacement OneElementString_Begin_EmptyCut_OneElementRange{
+    .initial = "B", .from = 0, .to = 0, .input = "a", .expected = "aB"};
 
-constexpr TestCaseReplacement OneElementString_Begin_EmptyCut_MidRange {
-  .initial = "B", .from = 0, .to = 0, .input = "aeiou", .expected = "aeiouB"
-};
+constexpr TestCaseReplacement OneElementString_Begin_EmptyCut_MidRange{
+    .initial = "B", .from = 0, .to = 0, .input = "aeiou", .expected = "aeiouB"};
 
-constexpr TestCaseReplacement OneElementString_Begin_EmptyCut_LongRange {
-  .initial = "B", .from = 0, .to = 0,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789B"
-};
+constexpr TestCaseReplacement OneElementString_Begin_EmptyCut_LongRange{
+    .initial  = "B",
+    .from     = 0,
+    .to       = 0,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789B"};
 
-constexpr TestCaseReplacement OneElementString_Begin_OneElementCut_EmptyRange {
-  .initial = "B", .from = 0, .to = 1, .input = "", .expected = ""
-};
+constexpr TestCaseReplacement OneElementString_Begin_OneElementCut_EmptyRange{
+    .initial = "B", .from = 0, .to = 1, .input = "", .expected = ""};
 
-constexpr TestCaseReplacement OneElementString_Begin_OneElementCut_OneElementRange {
-  .initial = "B", .from = 0, .to = 1, .input = "a", .expected = "a"
-};
+constexpr TestCaseReplacement OneElementString_Begin_OneElementCut_OneElementRange{
+    .initial = "B", .from = 0, .to = 1, .input = "a", .expected = "a"};
 
-constexpr TestCaseReplacement OneElementString_Begin_OneElementCut_MidRange {
-  .initial = "B", .from = 0, .to = 1, .input = "aeiou", .expected = "aeiou"
-};
+constexpr TestCaseReplacement OneElementString_Begin_OneElementCut_MidRange{
+    .initial = "B", .from = 0, .to = 1, .input = "aeiou", .expected = "aeiou"};
 
-constexpr TestCaseReplacement OneElementString_Begin_OneElementCut_LongRange {
-  .initial = "B", .from = 0, .to = 1,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789"
-};
+constexpr TestCaseReplacement OneElementString_Begin_OneElementCut_LongRange{
+    .initial  = "B",
+    .from     = 0,
+    .to       = 1,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789"};
 
-constexpr TestCaseReplacement OneElementString_End_EmptyCut_EmptyRange {
-  .initial = "B", .from = 1, .to = 1, .input = "", .expected = "B"
-};
+constexpr TestCaseReplacement OneElementString_End_EmptyCut_EmptyRange{
+    .initial = "B", .from = 1, .to = 1, .input = "", .expected = "B"};
 
-constexpr TestCaseReplacement OneElementString_End_EmptyCut_OneElementRange {
-  .initial = "B", .from = 1, .to = 1, .input = "a", .expected = "Ba"
-};
+constexpr TestCaseReplacement OneElementString_End_EmptyCut_OneElementRange{
+    .initial = "B", .from = 1, .to = 1, .input = "a", .expected = "Ba"};
 
-constexpr TestCaseReplacement OneElementString_End_EmptyCut_MidRange {
-  .initial = "B", .from = 1, .to = 1, .input = "aeiou", .expected = "Baeiou"
-};
+constexpr TestCaseReplacement OneElementString_End_EmptyCut_MidRange{
+    .initial = "B", .from = 1, .to = 1, .input = "aeiou", .expected = "Baeiou"};
 
-constexpr TestCaseReplacement OneElementString_End_EmptyCut_LongRange {
-  .initial = "B", .from = 1, .to = 1,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "Babcdefghijklmnopqrstuvwxyz0123456789"
-};
+constexpr TestCaseReplacement OneElementString_End_EmptyCut_LongRange{
+    .initial  = "B",
+    .from     = 1,
+    .to       = 1,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "Babcdefghijklmnopqrstuvwxyz0123456789"};
 
 // Short string (using SSO).
 
 // Replace at the beginning.
 
-constexpr TestCaseReplacement ShortString_Begin_EmptyCut_EmptyRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 0, .input = "", .expected = "_BCDFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Begin_EmptyCut_EmptyRange{
+    .initial = "_BCDFGHJ_", .from = 0, .to = 0, .input = "", .expected = "_BCDFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Begin_EmptyCut_OneElementRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 0, .input = "a", .expected = "a_BCDFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Begin_EmptyCut_OneElementRange{
+    .initial = "_BCDFGHJ_", .from = 0, .to = 0, .input = "a", .expected = "a_BCDFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Begin_EmptyCut_MidRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 0, .input = "aeiou", .expected = "aeiou_BCDFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Begin_EmptyCut_MidRange{
+    .initial = "_BCDFGHJ_", .from = 0, .to = 0, .input = "aeiou", .expected = "aeiou_BCDFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Begin_EmptyCut_LongRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 0,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789_BCDFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Begin_EmptyCut_LongRange{
+    .initial  = "_BCDFGHJ_",
+    .from     = 0,
+    .to       = 0,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789_BCDFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Begin_OneElementCut_EmptyRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 1, .input = "", .expected = "BCDFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Begin_OneElementCut_EmptyRange{
+    .initial = "_BCDFGHJ_", .from = 0, .to = 1, .input = "", .expected = "BCDFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Begin_OneElementCut_OneElementRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 1, .input = "a", .expected = "aBCDFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Begin_OneElementCut_OneElementRange{
+    .initial = "_BCDFGHJ_", .from = 0, .to = 1, .input = "a", .expected = "aBCDFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Begin_OneElementCut_MidRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 1, .input = "aeiou", .expected = "aeiouBCDFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Begin_OneElementCut_MidRange{
+    .initial = "_BCDFGHJ_", .from = 0, .to = 1, .input = "aeiou", .expected = "aeiouBCDFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Begin_OneElementCut_LongRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 1,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789BCDFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Begin_OneElementCut_LongRange{
+    .initial  = "_BCDFGHJ_",
+    .from     = 0,
+    .to       = 1,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789BCDFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Begin_MidSizedCut_EmptyRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 3, .input = "", .expected = "DFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Begin_MidSizedCut_EmptyRange{
+    .initial = "_BCDFGHJ_", .from = 0, .to = 3, .input = "", .expected = "DFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Begin_MidSizedCut_OneElementRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 3, .input = "a", .expected = "aDFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Begin_MidSizedCut_OneElementRange{
+    .initial = "_BCDFGHJ_", .from = 0, .to = 3, .input = "a", .expected = "aDFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Begin_MidSizedCut_MidRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 3, .input = "aeiou", .expected = "aeiouDFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Begin_MidSizedCut_MidRange{
+    .initial = "_BCDFGHJ_", .from = 0, .to = 3, .input = "aeiou", .expected = "aeiouDFGHJ_"};
 
 // Note: this test case switches from SSO to non-SSO.
-constexpr TestCaseReplacement ShortString_Begin_MidSizedCut_LongRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 3,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789DFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Begin_MidSizedCut_LongRange{
+    .initial  = "_BCDFGHJ_",
+    .from     = 0,
+    .to       = 3,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789DFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Begin_CutToEnd_EmptyRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 9, .input = "", .expected = ""
-};
+constexpr TestCaseReplacement ShortString_Begin_CutToEnd_EmptyRange{
+    .initial = "_BCDFGHJ_", .from = 0, .to = 9, .input = "", .expected = ""};
 
-constexpr TestCaseReplacement ShortString_Begin_CutToEnd_OneElementRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 9, .input = "a", .expected = "a"
-};
+constexpr TestCaseReplacement ShortString_Begin_CutToEnd_OneElementRange{
+    .initial = "_BCDFGHJ_", .from = 0, .to = 9, .input = "a", .expected = "a"};
 
-constexpr TestCaseReplacement ShortString_Begin_CutToEnd_MidRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 9, .input = "aeiou", .expected = "aeiou"
-};
+constexpr TestCaseReplacement ShortString_Begin_CutToEnd_MidRange{
+    .initial = "_BCDFGHJ_", .from = 0, .to = 9, .input = "aeiou", .expected = "aeiou"};
 
 // Note: this test case switches from SSO to non-SSO.
-constexpr TestCaseReplacement ShortString_Begin_CutToEnd_LongRange {
-  .initial = "_BCDFGHJ_", .from = 0, .to = 9,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789"
-};
+constexpr TestCaseReplacement ShortString_Begin_CutToEnd_LongRange{
+    .initial  = "_BCDFGHJ_",
+    .from     = 0,
+    .to       = 9,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789"};
 
 // Replace in the middle.
 
-constexpr TestCaseReplacement ShortString_Mid_EmptyCut_EmptyRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 4, .input = "", .expected = "_BCDFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Mid_EmptyCut_EmptyRange{
+    .initial = "_BCDFGHJ_", .from = 4, .to = 4, .input = "", .expected = "_BCDFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Mid_EmptyCut_OneElementRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 4, .input = "a", .expected = "_BCDaFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Mid_EmptyCut_OneElementRange{
+    .initial = "_BCDFGHJ_", .from = 4, .to = 4, .input = "a", .expected = "_BCDaFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Mid_EmptyCut_MidRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 4, .input = "aeiou", .expected = "_BCDaeiouFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Mid_EmptyCut_MidRange{
+    .initial = "_BCDFGHJ_", .from = 4, .to = 4, .input = "aeiou", .expected = "_BCDaeiouFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Mid_EmptyCut_LongRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 4,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_BCDabcdefghijklmnopqrstuvwxyz0123456789FGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Mid_EmptyCut_LongRange{
+    .initial  = "_BCDFGHJ_",
+    .from     = 4,
+    .to       = 4,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "_BCDabcdefghijklmnopqrstuvwxyz0123456789FGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Mid_OneElementCut_EmptyRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 5, .input = "", .expected = "_BCDGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Mid_OneElementCut_EmptyRange{
+    .initial = "_BCDFGHJ_", .from = 4, .to = 5, .input = "", .expected = "_BCDGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Mid_OneElementCut_OneElementRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 5, .input = "a", .expected = "_BCDaGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Mid_OneElementCut_OneElementRange{
+    .initial = "_BCDFGHJ_", .from = 4, .to = 5, .input = "a", .expected = "_BCDaGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Mid_OneElementCut_MidRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 5, .input = "aeiou", .expected = "_BCDaeiouGHJ_"
-};
+constexpr TestCaseReplacement ShortString_Mid_OneElementCut_MidRange{
+    .initial = "_BCDFGHJ_", .from = 4, .to = 5, .input = "aeiou", .expected = "_BCDaeiouGHJ_"};
 
-constexpr TestCaseReplacement ShortString_Mid_OneElementCut_LongRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 5,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_BCDabcdefghijklmnopqrstuvwxyz0123456789GHJ_"
-};
+constexpr TestCaseReplacement ShortString_Mid_OneElementCut_LongRange{
+    .initial  = "_BCDFGHJ_",
+    .from     = 4,
+    .to       = 5,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "_BCDabcdefghijklmnopqrstuvwxyz0123456789GHJ_"};
 
-constexpr TestCaseReplacement ShortString_Mid_MidSizedCut_EmptyRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 7, .input = "", .expected = "_BCDJ_"
-};
+constexpr TestCaseReplacement ShortString_Mid_MidSizedCut_EmptyRange{
+    .initial = "_BCDFGHJ_", .from = 4, .to = 7, .input = "", .expected = "_BCDJ_"};
 
-constexpr TestCaseReplacement ShortString_Mid_MidSizedCut_OneElementRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 7, .input = "a", .expected = "_BCDaJ_"
-};
+constexpr TestCaseReplacement ShortString_Mid_MidSizedCut_OneElementRange{
+    .initial = "_BCDFGHJ_", .from = 4, .to = 7, .input = "a", .expected = "_BCDaJ_"};
 
-constexpr TestCaseReplacement ShortString_Mid_MidSizedCut_MidRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 7, .input = "aeiou", .expected = "_BCDaeiouJ_"
-};
+constexpr TestCaseReplacement ShortString_Mid_MidSizedCut_MidRange{
+    .initial = "_BCDFGHJ_", .from = 4, .to = 7, .input = "aeiou", .expected = "_BCDaeiouJ_"};
 
-constexpr TestCaseReplacement ShortString_Mid_MidSizedCut_LongRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 7,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_BCDabcdefghijklmnopqrstuvwxyz0123456789J_"
-};
+constexpr TestCaseReplacement ShortString_Mid_MidSizedCut_LongRange{
+    .initial  = "_BCDFGHJ_",
+    .from     = 4,
+    .to       = 7,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "_BCDabcdefghijklmnopqrstuvwxyz0123456789J_"};
 
-constexpr TestCaseReplacement ShortString_Mid_CutToEnd_EmptyRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 9, .input = "", .expected = "_BCD"
-};
+constexpr TestCaseReplacement ShortString_Mid_CutToEnd_EmptyRange{
+    .initial = "_BCDFGHJ_", .from = 4, .to = 9, .input = "", .expected = "_BCD"};
 
-constexpr TestCaseReplacement ShortString_Mid_CutToEnd_OneElementRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 9, .input = "a", .expected = "_BCDa"
-};
+constexpr TestCaseReplacement ShortString_Mid_CutToEnd_OneElementRange{
+    .initial = "_BCDFGHJ_", .from = 4, .to = 9, .input = "a", .expected = "_BCDa"};
 
-constexpr TestCaseReplacement ShortString_Mid_CutToEnd_MidRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 9, .input = "aeiou", .expected = "_BCDaeiou"
-};
+constexpr TestCaseReplacement ShortString_Mid_CutToEnd_MidRange{
+    .initial = "_BCDFGHJ_", .from = 4, .to = 9, .input = "aeiou", .expected = "_BCDaeiou"};
 
-constexpr TestCaseReplacement ShortString_Mid_CutToEnd_LongRange {
-  .initial = "_BCDFGHJ_", .from = 4, .to = 9,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_BCDabcdefghijklmnopqrstuvwxyz0123456789"
-};
+constexpr TestCaseReplacement ShortString_Mid_CutToEnd_LongRange{
+    .initial  = "_BCDFGHJ_",
+    .from     = 4,
+    .to       = 9,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "_BCDabcdefghijklmnopqrstuvwxyz0123456789"};
 
 // Replace at the end.
 
-constexpr TestCaseReplacement ShortString_End_EmptyCut_EmptyRange {
-  .initial = "_BCDFGHJ_", .from = 9, .to = 9, .input = "", .expected = "_BCDFGHJ_"
-};
+constexpr TestCaseReplacement ShortString_End_EmptyCut_EmptyRange{
+    .initial = "_BCDFGHJ_", .from = 9, .to = 9, .input = "", .expected = "_BCDFGHJ_"};
 
-constexpr TestCaseReplacement ShortString_End_EmptyCut_OneElementRange {
-  .initial = "_BCDFGHJ_", .from = 9, .to = 9, .input = "a", .expected = "_BCDFGHJ_a"
-};
+constexpr TestCaseReplacement ShortString_End_EmptyCut_OneElementRange{
+    .initial = "_BCDFGHJ_", .from = 9, .to = 9, .input = "a", .expected = "_BCDFGHJ_a"};
 
-constexpr TestCaseReplacement ShortString_End_EmptyCut_MidRange {
-  .initial = "_BCDFGHJ_", .from = 9, .to = 9, .input = "aeiou", .expected = "_BCDFGHJ_aeiou"
-};
+constexpr TestCaseReplacement ShortString_End_EmptyCut_MidRange{
+    .initial = "_BCDFGHJ_", .from = 9, .to = 9, .input = "aeiou", .expected = "_BCDFGHJ_aeiou"};
 
-constexpr TestCaseReplacement ShortString_End_EmptyCut_LongRange {
-  .initial = "_BCDFGHJ_", .from = 9, .to = 9,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_BCDFGHJ_abcdefghijklmnopqrstuvwxyz0123456789"
-};
+constexpr TestCaseReplacement ShortString_End_EmptyCut_LongRange{
+    .initial  = "_BCDFGHJ_",
+    .from     = 9,
+    .to       = 9,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "_BCDFGHJ_abcdefghijklmnopqrstuvwxyz0123456789"};
 
 // Long string (no SSO).
 
 // Replace at the beginning.
 
-constexpr TestCaseReplacement LongString_Begin_EmptyCut_EmptyRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 0, .input = "",
-  .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_EmptyCut_OneElementRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 0, .input = "a",
-  .expected = "a_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_EmptyCut_MidRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 0, .input = "aeiou",
-  .expected = "aeiou_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_EmptyCut_LongRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 0,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_EmptyCut_LongerThanCapacityRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 0,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789"
-              "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_OneElementCut_EmptyRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 1, .input = "",
-  .expected = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_OneElementCut_OneElementRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 1, .input = "a",
-  .expected = "aABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_OneElementCut_MidRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 1, .input = "aeiou",
-  .expected = "aeiouABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_OneElementCut_LongRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 1,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_OneElementCut_LongerThanCapacityRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 1,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789"
-              "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_MidSizedCut_EmptyRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 3, .input = "",
-  .expected = "CDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_MidSizedCut_OneElementRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 3, .input = "a",
-  .expected = "aCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_MidSizedCut_MidRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 3, .input = "aeiou",
-  .expected = "aeiouCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_MidSizedCut_LongRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 3,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789CDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_MidSizedCut_LongerThanCapacityRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 3,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789"
-              "CDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Begin_CutToEnd_EmptyRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 38, .input = "",
-  .expected = ""
-};
-
-constexpr TestCaseReplacement LongString_Begin_CutToEnd_OneElementRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 38, .input = "a",
-  .expected = "a"
-};
-
-constexpr TestCaseReplacement LongString_Begin_CutToEnd_MidRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 38, .input = "aeiou",
-  .expected = "aeiou"
-};
-
-constexpr TestCaseReplacement LongString_Begin_CutToEnd_LongRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 38,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789"
-};
-
-constexpr TestCaseReplacement LongString_Begin_CutToEnd_LongerThanCapacityRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 38,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789"
-};
+constexpr TestCaseReplacement LongString_Begin_EmptyCut_EmptyRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 0,
+    .input    = "",
+    .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_EmptyCut_OneElementRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 0,
+    .input    = "a",
+    .expected = "a_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_EmptyCut_MidRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 0,
+    .input    = "aeiou",
+    .expected = "aeiou_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_EmptyCut_LongRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 0,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_EmptyCut_LongerThanCapacityRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 0,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789"
+                "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_OneElementCut_EmptyRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 1,
+    .input    = "",
+    .expected = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_OneElementCut_OneElementRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 1,
+    .input    = "a",
+    .expected = "aABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_OneElementCut_MidRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 1,
+    .input    = "aeiou",
+    .expected = "aeiouABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_OneElementCut_LongRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 1,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_OneElementCut_LongerThanCapacityRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 1,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789"
+                "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_MidSizedCut_EmptyRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 3,
+    .input    = "",
+    .expected = "CDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_MidSizedCut_OneElementRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 3,
+    .input    = "a",
+    .expected = "aCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_MidSizedCut_MidRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 3,
+    .input    = "aeiou",
+    .expected = "aeiouCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_MidSizedCut_LongRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 3,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789CDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_MidSizedCut_LongerThanCapacityRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 3,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789"
+                "CDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Begin_CutToEnd_EmptyRange{
+    .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 38, .input = "", .expected = ""};
+
+constexpr TestCaseReplacement LongString_Begin_CutToEnd_OneElementRange{
+    .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 38, .input = "a", .expected = "a"};
+
+constexpr TestCaseReplacement LongString_Begin_CutToEnd_MidRange{
+    .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 0, .to = 38, .input = "aeiou", .expected = "aeiou"};
+
+constexpr TestCaseReplacement LongString_Begin_CutToEnd_LongRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 38,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789"};
+
+constexpr TestCaseReplacement LongString_Begin_CutToEnd_LongerThanCapacityRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 0,
+    .to       = 38,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789"};
 
 // Replace in the middle.
 
-constexpr TestCaseReplacement LongString_Mid_EmptyCut_EmptyRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 18, .input = "",
-  .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_EmptyCut_OneElementRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 18, .input = "a",
-  .expected = "_ABCDEFGHIJKLMNOPQaRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_EmptyCut_MidRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 18, .input = "aeiou",
-  .expected = "_ABCDEFGHIJKLMNOPQaeiouRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_EmptyCut_LongRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 18,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_ABCDEFGHIJKLMNOPQabcdefghijklmnopqrstuvwxyz0123456789RSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_EmptyCut_LongerThanCapacityRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 18,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_ABCDEFGHIJKLMNOPQ"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789"
-              "RSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_OneElementCut_EmptyRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 19, .input = "",
-  .expected = "_ABCDEFGHIJKLMNOPQSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_OneElementCut_OneElementRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 19, .input = "a",
-  .expected = "_ABCDEFGHIJKLMNOPQaSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_OneElementCut_MidRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 19, .input = "aeiou",
-  .expected = "_ABCDEFGHIJKLMNOPQaeiouSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_OneElementCut_LongRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 19,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_ABCDEFGHIJKLMNOPQabcdefghijklmnopqrstuvwxyz0123456789STUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_OneElementCut_LongerThanCapacityRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 19,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_ABCDEFGHIJKLMNOPQ"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789"
-              "STUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_MidSizedCut_EmptyRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 21, .input = "",
-  .expected = "_ABCDEFGHIJKLMNOPQUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_MidSizedCut_OneElementRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 21, .input = "a",
-  .expected = "_ABCDEFGHIJKLMNOPQaUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_MidSizedCut_MidRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 21, .input = "aeiou",
-  .expected = "_ABCDEFGHIJKLMNOPQaeiouUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_MidSizedCut_LongRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 21,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_ABCDEFGHIJKLMNOPQabcdefghijklmnopqrstuvwxyz0123456789UVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_MidSizedCut_LongerThanCapacityRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 21,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_ABCDEFGHIJKLMNOPQ"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789"
-              "UVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_Mid_CutToEnd_EmptyRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 38, .input = "",
-  .expected = "_ABCDEFGHIJKLMNOPQ"
-};
-
-constexpr TestCaseReplacement LongString_Mid_CutToEnd_OneElementRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 38, .input = "a",
-  .expected = "_ABCDEFGHIJKLMNOPQa"
-};
-
-constexpr TestCaseReplacement LongString_Mid_CutToEnd_MidRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 38, .input = "aeiou",
-  .expected = "_ABCDEFGHIJKLMNOPQaeiou"
-};
-
-constexpr TestCaseReplacement LongString_Mid_CutToEnd_LongRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 38,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_ABCDEFGHIJKLMNOPQabcdefghijklmnopqrstuvwxyz0123456789"
-};
-
-constexpr TestCaseReplacement LongString_Mid_CutToEnd_LongerThanCapacityRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 18, .to = 38,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_ABCDEFGHIJKLMNOPQ"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789"
-};
+constexpr TestCaseReplacement LongString_Mid_EmptyCut_EmptyRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 18,
+    .input    = "",
+    .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_EmptyCut_OneElementRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 18,
+    .input    = "a",
+    .expected = "_ABCDEFGHIJKLMNOPQaRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_EmptyCut_MidRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 18,
+    .input    = "aeiou",
+    .expected = "_ABCDEFGHIJKLMNOPQaeiouRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_EmptyCut_LongRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 18,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "_ABCDEFGHIJKLMNOPQabcdefghijklmnopqrstuvwxyz0123456789RSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_EmptyCut_LongerThanCapacityRange{
+    .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from    = 18,
+    .to      = 18,
+    .input   = "abcdefghijklmnopqrstuvwxyz0123456789_"
+               "abcdefghijklmnopqrstuvwxyz0123456789_"
+               "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected =
+        "_ABCDEFGHIJKLMNOPQ"
+        "abcdefghijklmnopqrstuvwxyz0123456789_"
+        "abcdefghijklmnopqrstuvwxyz0123456789_"
+        "abcdefghijklmnopqrstuvwxyz0123456789"
+        "RSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_OneElementCut_EmptyRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 19,
+    .input    = "",
+    .expected = "_ABCDEFGHIJKLMNOPQSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_OneElementCut_OneElementRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 19,
+    .input    = "a",
+    .expected = "_ABCDEFGHIJKLMNOPQaSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_OneElementCut_MidRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 19,
+    .input    = "aeiou",
+    .expected = "_ABCDEFGHIJKLMNOPQaeiouSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_OneElementCut_LongRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 19,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "_ABCDEFGHIJKLMNOPQabcdefghijklmnopqrstuvwxyz0123456789STUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_OneElementCut_LongerThanCapacityRange{
+    .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from    = 18,
+    .to      = 19,
+    .input   = "abcdefghijklmnopqrstuvwxyz0123456789_"
+               "abcdefghijklmnopqrstuvwxyz0123456789_"
+               "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected =
+        "_ABCDEFGHIJKLMNOPQ"
+        "abcdefghijklmnopqrstuvwxyz0123456789_"
+        "abcdefghijklmnopqrstuvwxyz0123456789_"
+        "abcdefghijklmnopqrstuvwxyz0123456789"
+        "STUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_MidSizedCut_EmptyRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 21,
+    .input    = "",
+    .expected = "_ABCDEFGHIJKLMNOPQUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_MidSizedCut_OneElementRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 21,
+    .input    = "a",
+    .expected = "_ABCDEFGHIJKLMNOPQaUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_MidSizedCut_MidRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 21,
+    .input    = "aeiou",
+    .expected = "_ABCDEFGHIJKLMNOPQaeiouUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_MidSizedCut_LongRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 21,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "_ABCDEFGHIJKLMNOPQabcdefghijklmnopqrstuvwxyz0123456789UVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_MidSizedCut_LongerThanCapacityRange{
+    .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from    = 18,
+    .to      = 21,
+    .input   = "abcdefghijklmnopqrstuvwxyz0123456789_"
+               "abcdefghijklmnopqrstuvwxyz0123456789_"
+               "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected =
+        "_ABCDEFGHIJKLMNOPQ"
+        "abcdefghijklmnopqrstuvwxyz0123456789_"
+        "abcdefghijklmnopqrstuvwxyz0123456789_"
+        "abcdefghijklmnopqrstuvwxyz0123456789"
+        "UVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_Mid_CutToEnd_EmptyRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 38,
+    .input    = "",
+    .expected = "_ABCDEFGHIJKLMNOPQ"};
+
+constexpr TestCaseReplacement LongString_Mid_CutToEnd_OneElementRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 38,
+    .input    = "a",
+    .expected = "_ABCDEFGHIJKLMNOPQa"};
+
+constexpr TestCaseReplacement LongString_Mid_CutToEnd_MidRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 38,
+    .input    = "aeiou",
+    .expected = "_ABCDEFGHIJKLMNOPQaeiou"};
+
+constexpr TestCaseReplacement LongString_Mid_CutToEnd_LongRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 38,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "_ABCDEFGHIJKLMNOPQabcdefghijklmnopqrstuvwxyz0123456789"};
+
+constexpr TestCaseReplacement LongString_Mid_CutToEnd_LongerThanCapacityRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 18,
+    .to       = 38,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "_ABCDEFGHIJKLMNOPQ"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789"};
 
 // Replace at the end.
 
-constexpr TestCaseReplacement LongString_End_EmptyCut_EmptyRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 38, .to = 38, .input = "",
-  .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-};
-
-constexpr TestCaseReplacement LongString_End_EmptyCut_OneElementRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 38, .to = 38, .input = "a",
-  .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_a"
-};
-
-constexpr TestCaseReplacement LongString_End_EmptyCut_MidRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 38, .to = 38, .input = "aeiou",
-  .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_aeiou"
-};
-
-constexpr TestCaseReplacement LongString_End_EmptyCut_LongRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 38, .to = 38,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_abcdefghijklmnopqrstuvwxyz0123456789"
-};
-
-constexpr TestCaseReplacement LongString_End_EmptyCut_LongerThanCapacityRange {
-  .initial = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", .from = 38, .to = 38,
-  .input = "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789_"
-           "abcdefghijklmnopqrstuvwxyz0123456789",
-  .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789_"
-              "abcdefghijklmnopqrstuvwxyz0123456789"
-};
+constexpr TestCaseReplacement LongString_End_EmptyCut_EmptyRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 38,
+    .to       = 38,
+    .input    = "",
+    .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"};
+
+constexpr TestCaseReplacement LongString_End_EmptyCut_OneElementRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 38,
+    .to       = 38,
+    .input    = "a",
+    .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_a"};
+
+constexpr TestCaseReplacement LongString_End_EmptyCut_MidRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 38,
+    .to       = 38,
+    .input    = "aeiou",
+    .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_aeiou"};
+
+constexpr TestCaseReplacement LongString_End_EmptyCut_LongRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 38,
+    .to       = 38,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_abcdefghijklmnopqrstuvwxyz0123456789"};
+
+constexpr TestCaseReplacement LongString_End_EmptyCut_LongerThanCapacityRange{
+    .initial  = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
+    .from     = 38,
+    .to       = 38,
+    .input    = "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789",
+    .expected = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789_"
+                "abcdefghijklmnopqrstuvwxyz0123456789"};
 
 template <class Iter, class Sent, class Alloc>
 constexpr void test_string_replace_with_range() {
@@ -608,9 +644,9 @@ constexpr void test_string_replace_with_range() {
 
     auto get_pos = [](auto& c, auto index) { return std::ranges::next(c.begin(), index); };
     Container c(test_case.initial.begin(), test_case.initial.end());
-    auto in = wrap_input<Iter, Sent>(test_case.input);
+    auto in   = wrap_input<Iter, Sent>(test_case.input);
     auto from = get_pos(c, test_case.from);
-    auto to = get_pos(c, test_case.to);
+    auto to   = get_pos(c, test_case.to);
 
     Container& result = c.replace_with_range(from, to, in);
     assert(&result == &c);
@@ -846,25 +882,25 @@ constexpr void test_string_replace_with_range_rvalue_range() {
 
   { // Lvalue.
     std::string in = "abc";
-    std::string c = "123";
+    std::string c  = "123";
     c.replace_with_range(c.begin(), c.end(), in);
   }
 
   { // Const lvalue.
     const std::string in = "abc";
-    std::string c = "123";
+    std::string c        = "123";
     c.replace_with_range(c.begin(), c.end(), in);
   }
 
   { // Rvalue.
     std::string in = "abc";
-    std::string c = "123";
+    std::string c  = "123";
     c.replace_with_range(c.begin(), c.end(), std::move(in));
   }
 
   { // Const rvalue.
     const std::string in = "abc";
-    std::string c = "123";
+    std::string c        = "123";
     c.replace_with_range(c.begin(), c.end(), std::move(in));
   }
 }

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp
index 74e25c624e3b9f3..6ecefa0187553bd 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_T_size_size.pass.cpp
@@ -26,5996 +26,6132 @@
 
 template <class S, class SV>
 TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos1, typename S::size_type n1,
-     SV sv, typename S::size_type pos2, typename S::size_type n2,
-     S expected)
-{
-    typedef typename S::size_type SizeT;
-    static_assert((!std::is_same<S, SV>::value), "");
-
-    // String and string_view may not always share the same size type,
-    // but both types should have the same size (ex. int vs long)
-    static_assert(sizeof(SizeT) == sizeof(typename SV::size_type), "");
-
-    const SizeT old_size = s.size();
-    S s0 = s;
-    if (pos1 <= old_size && pos2 <= sv.size())
-    {
-        s.replace(pos1, n1, sv, pos2, n2);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-        SizeT xlen = std::min<SizeT>(n1, old_size - pos1);
-        SizeT rlen = std::min<SizeT>(n2, sv.size() - pos2);
-        assert(s.size() == old_size - xlen + rlen);
-    }
+test(S s,
+     typename S::size_type pos1,
+     typename S::size_type n1,
+     SV sv,
+     typename S::size_type pos2,
+     typename S::size_type n2,
+     S expected) {
+  typedef typename S::size_type SizeT;
+  static_assert((!std::is_same<S, SV>::value), "");
+
+  // String and string_view may not always share the same size type,
+  // but both types should have the same size (ex. int vs long)
+  static_assert(sizeof(SizeT) == sizeof(typename SV::size_type), "");
+
+  const SizeT old_size = s.size();
+  S s0                 = s;
+  if (pos1 <= old_size && pos2 <= sv.size()) {
+    s.replace(pos1, n1, sv, pos2, n2);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+    SizeT xlen = std::min<SizeT>(n1, old_size - pos1);
+    SizeT rlen = std::min<SizeT>(n2, sv.size() - pos2);
+    assert(s.size() == old_size - xlen + rlen);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.replace(pos1, n1, sv, pos2, n2);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > old_size || pos2 > sv.size());
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.replace(pos1, n1, sv, pos2, n2);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > old_size || pos2 > sv.size());
+      assert(s == s0);
     }
+  }
 #endif
 }
 
 template <class S, class SV>
 TEST_CONSTEXPR_CXX20 void
-test_npos(S s, typename S::size_type pos1, typename S::size_type n1,
-          SV sv, typename S::size_type pos2,
-          S expected)
-{
-    typedef typename S::size_type SizeT;
-    static_assert((!std::is_same<S, SV>::value), "");
-    const SizeT old_size = s.size();
-    S s0 = s;
-    if (pos1 <= old_size && pos2 <= sv.size())
-    {
-        s.replace(pos1, n1, sv, pos2);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-        SizeT xlen = std::min<SizeT>(n1, old_size - pos1);
-        SizeT rlen = std::min<SizeT>(S::npos, sv.size() - pos2);
-        assert(s.size() == old_size - xlen + rlen);
-    }
+test_npos(S s, typename S::size_type pos1, typename S::size_type n1, SV sv, typename S::size_type pos2, S expected) {
+  typedef typename S::size_type SizeT;
+  static_assert((!std::is_same<S, SV>::value), "");
+  const SizeT old_size = s.size();
+  S s0                 = s;
+  if (pos1 <= old_size && pos2 <= sv.size()) {
+    s.replace(pos1, n1, sv, pos2);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+    SizeT xlen = std::min<SizeT>(n1, old_size - pos1);
+    SizeT rlen = std::min<SizeT>(S::npos, sv.size() - pos2);
+    assert(s.size() == old_size - xlen + rlen);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.replace(pos1, n1, sv, pos2);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > old_size || pos2 > sv.size());
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.replace(pos1, n1, sv, pos2);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > old_size || pos2 > sv.size());
+      assert(s == s0);
     }
+  }
 #endif
 }
 
-
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, SV(""), 0, 0, S(""));
-    test(S(""), 0, 0, SV(""), 0, 1, S(""));
-    test(S(""), 0, 0, SV(""), 1, 0, S("can't happen"));
-    test(S(""), 0, 0, SV("12345"), 0, 0, S(""));
-    test(S(""), 0, 0, SV("12345"), 0, 1, S("1"));
-    test(S(""), 0, 0, SV("12345"), 0, 2, S("12"));
-    test(S(""), 0, 0, SV("12345"), 0, 4, S("1234"));
-    test(S(""), 0, 0, SV("12345"), 0, 5, S("12345"));
-    test(S(""), 0, 0, SV("12345"), 0, 6, S("12345"));
-    test(S(""), 0, 0, SV("12345"), 1, 0, S(""));
-    test(S(""), 0, 0, SV("12345"), 1, 1, S("2"));
-    test(S(""), 0, 0, SV("12345"), 1, 2, S("23"));
-    test(S(""), 0, 0, SV("12345"), 1, 3, S("234"));
-    test(S(""), 0, 0, SV("12345"), 1, 4, S("2345"));
-    test(S(""), 0, 0, SV("12345"), 1, 5, S("2345"));
-    test(S(""), 0, 0, SV("12345"), 2, 0, S(""));
-    test(S(""), 0, 0, SV("12345"), 2, 1, S("3"));
-    test(S(""), 0, 0, SV("12345"), 2, 2, S("34"));
-    test(S(""), 0, 0, SV("12345"), 2, 3, S("345"));
-    test(S(""), 0, 0, SV("12345"), 2, 4, S("345"));
-    test(S(""), 0, 0, SV("12345"), 4, 0, S(""));
-    test(S(""), 0, 0, SV("12345"), 4, 1, S("5"));
-    test(S(""), 0, 0, SV("12345"), 4, 2, S("5"));
-    test(S(""), 0, 0, SV("12345"), 5, 0, S(""));
-    test(S(""), 0, 0, SV("12345"), 5, 1, S(""));
-    test(S(""), 0, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S(""), 0, 0, SV("1234567890"), 0, 0, S(""));
-    test(S(""), 0, 0, SV("1234567890"), 0, 1, S("1"));
-    test(S(""), 0, 0, SV("1234567890"), 0, 5, S("12345"));
-    test(S(""), 0, 0, SV("1234567890"), 0, 9, S("123456789"));
-    test(S(""), 0, 0, SV("1234567890"), 0, 10, S("1234567890"));
-    test(S(""), 0, 0, SV("1234567890"), 0, 11, S("1234567890"));
-    test(S(""), 0, 0, SV("1234567890"), 1, 0, S(""));
-    test(S(""), 0, 0, SV("1234567890"), 1, 1, S("2"));
-    test(S(""), 0, 0, SV("1234567890"), 1, 4, S("2345"));
-    test(S(""), 0, 0, SV("1234567890"), 1, 8, S("23456789"));
-    test(S(""), 0, 0, SV("1234567890"), 1, 9, S("234567890"));
-    test(S(""), 0, 0, SV("1234567890"), 1, 10, S("234567890"));
-    test(S(""), 0, 0, SV("1234567890"), 5, 0, S(""));
-    test(S(""), 0, 0, SV("1234567890"), 5, 1, S("6"));
-    test(S(""), 0, 0, SV("1234567890"), 5, 2, S("67"));
-    test(S(""), 0, 0, SV("1234567890"), 5, 4, S("6789"));
-    test(S(""), 0, 0, SV("1234567890"), 5, 5, S("67890"));
-    test(S(""), 0, 0, SV("1234567890"), 5, 6, S("67890"));
-    test(S(""), 0, 0, SV("1234567890"), 9, 0, S(""));
-    test(S(""), 0, 0, SV("1234567890"), 9, 1, S("0"));
-    test(S(""), 0, 0, SV("1234567890"), 9, 2, S("0"));
-    test(S(""), 0, 0, SV("1234567890"), 10, 0, S(""));
-    test(S(""), 0, 0, SV("1234567890"), 10, 1, S(""));
-    test(S(""), 0, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 0, 0, S(""));
-    test(S(""), 0, 0, SV("12345678901234567890"), 0, 1, S("1"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 1, 0, S(""));
-    test(S(""), 0, 0, SV("12345678901234567890"), 1, 1, S("2"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 1, 9, S("234567890"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 10, 0, S(""));
-    test(S(""), 0, 0, SV("12345678901234567890"), 10, 1, S("1"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 10, 5, S("12345"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 10, 9, S("123456789"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 19, 0, S(""));
-    test(S(""), 0, 0, SV("12345678901234567890"), 19, 1, S("0"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 19, 2, S("0"));
-    test(S(""), 0, 0, SV("12345678901234567890"), 20, 0, S(""));
-    test(S(""), 0, 0, SV("12345678901234567890"), 20, 1, S(""));
-    test(S(""), 0, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S(""), 0, 1, SV(""), 0, 0, S(""));
-    test(S(""), 0, 1, SV(""), 0, 1, S(""));
-    test(S(""), 0, 1, SV(""), 1, 0, S("can't happen"));
-    test(S(""), 0, 1, SV("12345"), 0, 0, S(""));
-    test(S(""), 0, 1, SV("12345"), 0, 1, S("1"));
-    test(S(""), 0, 1, SV("12345"), 0, 2, S("12"));
-    test(S(""), 0, 1, SV("12345"), 0, 4, S("1234"));
-    test(S(""), 0, 1, SV("12345"), 0, 5, S("12345"));
-    test(S(""), 0, 1, SV("12345"), 0, 6, S("12345"));
-    test(S(""), 0, 1, SV("12345"), 1, 0, S(""));
-    test(S(""), 0, 1, SV("12345"), 1, 1, S("2"));
-    test(S(""), 0, 1, SV("12345"), 1, 2, S("23"));
-    test(S(""), 0, 1, SV("12345"), 1, 3, S("234"));
-    test(S(""), 0, 1, SV("12345"), 1, 4, S("2345"));
-    test(S(""), 0, 1, SV("12345"), 1, 5, S("2345"));
-    test(S(""), 0, 1, SV("12345"), 2, 0, S(""));
-    test(S(""), 0, 1, SV("12345"), 2, 1, S("3"));
-    test(S(""), 0, 1, SV("12345"), 2, 2, S("34"));
-    test(S(""), 0, 1, SV("12345"), 2, 3, S("345"));
-    test(S(""), 0, 1, SV("12345"), 2, 4, S("345"));
-    test(S(""), 0, 1, SV("12345"), 4, 0, S(""));
-    test(S(""), 0, 1, SV("12345"), 4, 1, S("5"));
-    test(S(""), 0, 1, SV("12345"), 4, 2, S("5"));
-    test(S(""), 0, 1, SV("12345"), 5, 0, S(""));
-    test(S(""), 0, 1, SV("12345"), 5, 1, S(""));
-    test(S(""), 0, 1, SV("12345"), 6, 0, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, SV(""), 0, 0, S(""));
+  test(S(""), 0, 0, SV(""), 0, 1, S(""));
+  test(S(""), 0, 0, SV(""), 1, 0, S("can't happen"));
+  test(S(""), 0, 0, SV("12345"), 0, 0, S(""));
+  test(S(""), 0, 0, SV("12345"), 0, 1, S("1"));
+  test(S(""), 0, 0, SV("12345"), 0, 2, S("12"));
+  test(S(""), 0, 0, SV("12345"), 0, 4, S("1234"));
+  test(S(""), 0, 0, SV("12345"), 0, 5, S("12345"));
+  test(S(""), 0, 0, SV("12345"), 0, 6, S("12345"));
+  test(S(""), 0, 0, SV("12345"), 1, 0, S(""));
+  test(S(""), 0, 0, SV("12345"), 1, 1, S("2"));
+  test(S(""), 0, 0, SV("12345"), 1, 2, S("23"));
+  test(S(""), 0, 0, SV("12345"), 1, 3, S("234"));
+  test(S(""), 0, 0, SV("12345"), 1, 4, S("2345"));
+  test(S(""), 0, 0, SV("12345"), 1, 5, S("2345"));
+  test(S(""), 0, 0, SV("12345"), 2, 0, S(""));
+  test(S(""), 0, 0, SV("12345"), 2, 1, S("3"));
+  test(S(""), 0, 0, SV("12345"), 2, 2, S("34"));
+  test(S(""), 0, 0, SV("12345"), 2, 3, S("345"));
+  test(S(""), 0, 0, SV("12345"), 2, 4, S("345"));
+  test(S(""), 0, 0, SV("12345"), 4, 0, S(""));
+  test(S(""), 0, 0, SV("12345"), 4, 1, S("5"));
+  test(S(""), 0, 0, SV("12345"), 4, 2, S("5"));
+  test(S(""), 0, 0, SV("12345"), 5, 0, S(""));
+  test(S(""), 0, 0, SV("12345"), 5, 1, S(""));
+  test(S(""), 0, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S(""), 0, 0, SV("1234567890"), 0, 0, S(""));
+  test(S(""), 0, 0, SV("1234567890"), 0, 1, S("1"));
+  test(S(""), 0, 0, SV("1234567890"), 0, 5, S("12345"));
+  test(S(""), 0, 0, SV("1234567890"), 0, 9, S("123456789"));
+  test(S(""), 0, 0, SV("1234567890"), 0, 10, S("1234567890"));
+  test(S(""), 0, 0, SV("1234567890"), 0, 11, S("1234567890"));
+  test(S(""), 0, 0, SV("1234567890"), 1, 0, S(""));
+  test(S(""), 0, 0, SV("1234567890"), 1, 1, S("2"));
+  test(S(""), 0, 0, SV("1234567890"), 1, 4, S("2345"));
+  test(S(""), 0, 0, SV("1234567890"), 1, 8, S("23456789"));
+  test(S(""), 0, 0, SV("1234567890"), 1, 9, S("234567890"));
+  test(S(""), 0, 0, SV("1234567890"), 1, 10, S("234567890"));
+  test(S(""), 0, 0, SV("1234567890"), 5, 0, S(""));
+  test(S(""), 0, 0, SV("1234567890"), 5, 1, S("6"));
+  test(S(""), 0, 0, SV("1234567890"), 5, 2, S("67"));
+  test(S(""), 0, 0, SV("1234567890"), 5, 4, S("6789"));
+  test(S(""), 0, 0, SV("1234567890"), 5, 5, S("67890"));
+  test(S(""), 0, 0, SV("1234567890"), 5, 6, S("67890"));
+  test(S(""), 0, 0, SV("1234567890"), 9, 0, S(""));
+  test(S(""), 0, 0, SV("1234567890"), 9, 1, S("0"));
+  test(S(""), 0, 0, SV("1234567890"), 9, 2, S("0"));
+  test(S(""), 0, 0, SV("1234567890"), 10, 0, S(""));
+  test(S(""), 0, 0, SV("1234567890"), 10, 1, S(""));
+  test(S(""), 0, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 0, 0, S(""));
+  test(S(""), 0, 0, SV("12345678901234567890"), 0, 1, S("1"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 1, 0, S(""));
+  test(S(""), 0, 0, SV("12345678901234567890"), 1, 1, S("2"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 1, 9, S("234567890"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 10, 0, S(""));
+  test(S(""), 0, 0, SV("12345678901234567890"), 10, 1, S("1"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 10, 5, S("12345"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 10, 9, S("123456789"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 19, 0, S(""));
+  test(S(""), 0, 0, SV("12345678901234567890"), 19, 1, S("0"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 19, 2, S("0"));
+  test(S(""), 0, 0, SV("12345678901234567890"), 20, 0, S(""));
+  test(S(""), 0, 0, SV("12345678901234567890"), 20, 1, S(""));
+  test(S(""), 0, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S(""), 0, 1, SV(""), 0, 0, S(""));
+  test(S(""), 0, 1, SV(""), 0, 1, S(""));
+  test(S(""), 0, 1, SV(""), 1, 0, S("can't happen"));
+  test(S(""), 0, 1, SV("12345"), 0, 0, S(""));
+  test(S(""), 0, 1, SV("12345"), 0, 1, S("1"));
+  test(S(""), 0, 1, SV("12345"), 0, 2, S("12"));
+  test(S(""), 0, 1, SV("12345"), 0, 4, S("1234"));
+  test(S(""), 0, 1, SV("12345"), 0, 5, S("12345"));
+  test(S(""), 0, 1, SV("12345"), 0, 6, S("12345"));
+  test(S(""), 0, 1, SV("12345"), 1, 0, S(""));
+  test(S(""), 0, 1, SV("12345"), 1, 1, S("2"));
+  test(S(""), 0, 1, SV("12345"), 1, 2, S("23"));
+  test(S(""), 0, 1, SV("12345"), 1, 3, S("234"));
+  test(S(""), 0, 1, SV("12345"), 1, 4, S("2345"));
+  test(S(""), 0, 1, SV("12345"), 1, 5, S("2345"));
+  test(S(""), 0, 1, SV("12345"), 2, 0, S(""));
+  test(S(""), 0, 1, SV("12345"), 2, 1, S("3"));
+  test(S(""), 0, 1, SV("12345"), 2, 2, S("34"));
+  test(S(""), 0, 1, SV("12345"), 2, 3, S("345"));
+  test(S(""), 0, 1, SV("12345"), 2, 4, S("345"));
+  test(S(""), 0, 1, SV("12345"), 4, 0, S(""));
+  test(S(""), 0, 1, SV("12345"), 4, 1, S("5"));
+  test(S(""), 0, 1, SV("12345"), 4, 2, S("5"));
+  test(S(""), 0, 1, SV("12345"), 5, 0, S(""));
+  test(S(""), 0, 1, SV("12345"), 5, 1, S(""));
+  test(S(""), 0, 1, SV("12345"), 6, 0, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S(""), 0, 1, SV("1234567890"), 0, 0, S(""));
-    test(S(""), 0, 1, SV("1234567890"), 0, 1, S("1"));
-    test(S(""), 0, 1, SV("1234567890"), 0, 5, S("12345"));
-    test(S(""), 0, 1, SV("1234567890"), 0, 9, S("123456789"));
-    test(S(""), 0, 1, SV("1234567890"), 0, 10, S("1234567890"));
-    test(S(""), 0, 1, SV("1234567890"), 0, 11, S("1234567890"));
-    test(S(""), 0, 1, SV("1234567890"), 1, 0, S(""));
-    test(S(""), 0, 1, SV("1234567890"), 1, 1, S("2"));
-    test(S(""), 0, 1, SV("1234567890"), 1, 4, S("2345"));
-    test(S(""), 0, 1, SV("1234567890"), 1, 8, S("23456789"));
-    test(S(""), 0, 1, SV("1234567890"), 1, 9, S("234567890"));
-    test(S(""), 0, 1, SV("1234567890"), 1, 10, S("234567890"));
-    test(S(""), 0, 1, SV("1234567890"), 5, 0, S(""));
-    test(S(""), 0, 1, SV("1234567890"), 5, 1, S("6"));
-    test(S(""), 0, 1, SV("1234567890"), 5, 2, S("67"));
-    test(S(""), 0, 1, SV("1234567890"), 5, 4, S("6789"));
-    test(S(""), 0, 1, SV("1234567890"), 5, 5, S("67890"));
-    test(S(""), 0, 1, SV("1234567890"), 5, 6, S("67890"));
-    test(S(""), 0, 1, SV("1234567890"), 9, 0, S(""));
-    test(S(""), 0, 1, SV("1234567890"), 9, 1, S("0"));
-    test(S(""), 0, 1, SV("1234567890"), 9, 2, S("0"));
-    test(S(""), 0, 1, SV("1234567890"), 10, 0, S(""));
-    test(S(""), 0, 1, SV("1234567890"), 10, 1, S(""));
-    test(S(""), 0, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 0, 0, S(""));
-    test(S(""), 0, 1, SV("12345678901234567890"), 0, 1, S("1"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 1, 0, S(""));
-    test(S(""), 0, 1, SV("12345678901234567890"), 1, 1, S("2"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 1, 9, S("234567890"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 10, 0, S(""));
-    test(S(""), 0, 1, SV("12345678901234567890"), 10, 1, S("1"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 10, 5, S("12345"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 10, 9, S("123456789"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 19, 0, S(""));
-    test(S(""), 0, 1, SV("12345678901234567890"), 19, 1, S("0"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 19, 2, S("0"));
-    test(S(""), 0, 1, SV("12345678901234567890"), 20, 0, S(""));
-    test(S(""), 0, 1, SV("12345678901234567890"), 20, 1, S(""));
-    test(S(""), 0, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S(""), 1, 0, SV(""), 0, 0, S("can't happen"));
-    test(S(""), 1, 0, SV(""), 0, 1, S("can't happen"));
-    test(S(""), 1, 0, SV(""), 1, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 0, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 0, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 0, 2, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 0, 4, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 0, 5, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 0, 6, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 1, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 1, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 1, 2, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 1, 3, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 1, 4, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 1, 5, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 2, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 2, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 2, 2, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 2, 3, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 2, 4, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 4, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 4, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 4, 2, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 5, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 5, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 0, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 0, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 0, 5, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 0, 9, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 0, 10, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 0, 11, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 1, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 1, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 1, 4, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 1, 8, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 1, 9, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 1, 10, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 5, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 5, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 5, 2, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 5, 4, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 5, 5, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 5, 6, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 9, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 9, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 9, 2, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 10, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 10, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 0, 1, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S(""), 0, 1, SV("1234567890"), 0, 0, S(""));
+  test(S(""), 0, 1, SV("1234567890"), 0, 1, S("1"));
+  test(S(""), 0, 1, SV("1234567890"), 0, 5, S("12345"));
+  test(S(""), 0, 1, SV("1234567890"), 0, 9, S("123456789"));
+  test(S(""), 0, 1, SV("1234567890"), 0, 10, S("1234567890"));
+  test(S(""), 0, 1, SV("1234567890"), 0, 11, S("1234567890"));
+  test(S(""), 0, 1, SV("1234567890"), 1, 0, S(""));
+  test(S(""), 0, 1, SV("1234567890"), 1, 1, S("2"));
+  test(S(""), 0, 1, SV("1234567890"), 1, 4, S("2345"));
+  test(S(""), 0, 1, SV("1234567890"), 1, 8, S("23456789"));
+  test(S(""), 0, 1, SV("1234567890"), 1, 9, S("234567890"));
+  test(S(""), 0, 1, SV("1234567890"), 1, 10, S("234567890"));
+  test(S(""), 0, 1, SV("1234567890"), 5, 0, S(""));
+  test(S(""), 0, 1, SV("1234567890"), 5, 1, S("6"));
+  test(S(""), 0, 1, SV("1234567890"), 5, 2, S("67"));
+  test(S(""), 0, 1, SV("1234567890"), 5, 4, S("6789"));
+  test(S(""), 0, 1, SV("1234567890"), 5, 5, S("67890"));
+  test(S(""), 0, 1, SV("1234567890"), 5, 6, S("67890"));
+  test(S(""), 0, 1, SV("1234567890"), 9, 0, S(""));
+  test(S(""), 0, 1, SV("1234567890"), 9, 1, S("0"));
+  test(S(""), 0, 1, SV("1234567890"), 9, 2, S("0"));
+  test(S(""), 0, 1, SV("1234567890"), 10, 0, S(""));
+  test(S(""), 0, 1, SV("1234567890"), 10, 1, S(""));
+  test(S(""), 0, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 0, 0, S(""));
+  test(S(""), 0, 1, SV("12345678901234567890"), 0, 1, S("1"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 1, 0, S(""));
+  test(S(""), 0, 1, SV("12345678901234567890"), 1, 1, S("2"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 1, 9, S("234567890"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 10, 0, S(""));
+  test(S(""), 0, 1, SV("12345678901234567890"), 10, 1, S("1"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 10, 5, S("12345"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 10, 9, S("123456789"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 19, 0, S(""));
+  test(S(""), 0, 1, SV("12345678901234567890"), 19, 1, S("0"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 19, 2, S("0"));
+  test(S(""), 0, 1, SV("12345678901234567890"), 20, 0, S(""));
+  test(S(""), 0, 1, SV("12345678901234567890"), 20, 1, S(""));
+  test(S(""), 0, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S(""), 1, 0, SV(""), 0, 0, S("can't happen"));
+  test(S(""), 1, 0, SV(""), 0, 1, S("can't happen"));
+  test(S(""), 1, 0, SV(""), 1, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 0, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 0, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 0, 2, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 0, 4, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 0, 5, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 0, 6, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 1, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 1, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 1, 2, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 1, 3, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 1, 4, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 1, 5, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 2, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 2, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 2, 2, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 2, 3, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 2, 4, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 4, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 4, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 4, 2, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 5, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 5, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 0, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 0, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 0, 5, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 0, 9, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 0, 10, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 0, 11, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 1, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 1, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 1, 4, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 1, 8, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 1, 9, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 1, 10, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 5, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 5, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 5, 2, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 5, 4, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 5, 5, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 5, 6, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 9, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 9, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 9, 2, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 10, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 10, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 0, 1, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S(""), 1, 0, SV("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, 0, SV(""), 0, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV(""), 0, 1, S("abcde"));
-    test(S("abcde"), 0, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, 0, SV("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 0, 1, S("1abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 0, 2, S("12abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 0, 4, S("1234abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 0, 5, S("12345abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 0, 6, S("12345abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 1, 1, S("2abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 1, 2, S("23abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 1, 3, S("234abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 1, 4, S("2345abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 1, 5, S("2345abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 2, 1, S("3abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 2, 2, S("34abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 2, 3, S("345abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 2, 4, S("345abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 4, 1, S("5abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 4, 2, S("5abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 0, 1, S("1abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 0, 5, S("12345abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 0, 9, S("123456789abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 0, 10, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 0, 11, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 1, 1, S("2abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 1, 4, S("2345abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 1, 8, S("23456789abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 1, 9, S("234567890abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 1, 10, S("234567890abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 5, 1, S("6abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 5, 2, S("67abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 5, 4, S("6789abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 5, 5, S("67890abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 5, 6, S("67890abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 9, 1, S("0abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 9, 2, S("0abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 0, 1, S("1abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 0, 10, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 1, 1, S("2abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 1, 9, S("234567890abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 1, 18, S("234567890123456789abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 10, 1, S("1abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 10, 5, S("12345abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 10, 9, S("123456789abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 10, 10, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 10, 11, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 19, 1, S("0abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 19, 2, S("0abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, 1, SV(""), 0, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV(""), 0, 1, S("bcde"));
-    test(S("abcde"), 0, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, 1, SV("12345"), 0, 0, S("bcde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S(""), 1, 0, SV("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, 0, SV(""), 0, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV(""), 0, 1, S("abcde"));
+  test(S("abcde"), 0, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, 0, SV("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 0, 1, S("1abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 0, 2, S("12abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 0, 4, S("1234abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 0, 5, S("12345abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 0, 6, S("12345abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 1, 1, S("2abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 1, 2, S("23abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 1, 3, S("234abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 1, 4, S("2345abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 1, 5, S("2345abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 2, 1, S("3abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 2, 2, S("34abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 2, 3, S("345abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 2, 4, S("345abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 4, 1, S("5abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 4, 2, S("5abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 0, 1, S("1abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 0, 5, S("12345abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 0, 9, S("123456789abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 0, 10, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 0, 11, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 1, 1, S("2abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 1, 4, S("2345abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 1, 8, S("23456789abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 1, 9, S("234567890abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 1, 10, S("234567890abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 5, 1, S("6abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 5, 2, S("67abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 5, 4, S("6789abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 5, 5, S("67890abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 5, 6, S("67890abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 9, 1, S("0abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 9, 2, S("0abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 0, 1, S("1abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 0, 10, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 1, 1, S("2abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 1, 9, S("234567890abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 1, 18, S("234567890123456789abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 10, 1, S("1abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 10, 5, S("12345abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 10, 9, S("123456789abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 10, 10, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 10, 11, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 19, 1, S("0abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 19, 2, S("0abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, 1, SV(""), 0, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV(""), 0, 1, S("bcde"));
+  test(S("abcde"), 0, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, 1, SV("12345"), 0, 0, S("bcde"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test3()
-{
-    test(S("abcde"), 0, 1, SV("12345"), 0, 1, S("1bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 0, 2, S("12bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 0, 4, S("1234bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 0, 5, S("12345bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 0, 6, S("12345bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 1, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 1, 1, S("2bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 1, 2, S("23bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 1, 3, S("234bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 1, 4, S("2345bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 1, 5, S("2345bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 2, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 2, 1, S("3bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 2, 2, S("34bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 2, 3, S("345bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 2, 4, S("345bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 4, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 4, 1, S("5bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 4, 2, S("5bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 5, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 5, 1, S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 0, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 0, 1, S("1bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 0, 5, S("12345bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 0, 9, S("123456789bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 0, 10, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 0, 11, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 1, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 1, 1, S("2bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 1, 4, S("2345bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 1, 8, S("23456789bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 1, 9, S("234567890bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 1, 10, S("234567890bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 5, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 5, 1, S("6bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 5, 2, S("67bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 5, 4, S("6789bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 5, 5, S("67890bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 5, 6, S("67890bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 9, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 9, 1, S("0bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 9, 2, S("0bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 10, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 10, 1, S("bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 0, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 0, 1, S("1bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 0, 10, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 0, 19, S("1234567890123456789bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 0, 20, S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 0, 21, S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 1, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 1, 1, S("2bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 1, 9, S("234567890bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 1, 18, S("234567890123456789bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 1, 19, S("2345678901234567890bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 1, 20, S("2345678901234567890bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 10, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 10, 1, S("1bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 10, 5, S("12345bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 10, 9, S("123456789bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 10, 10, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 10, 11, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 19, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 19, 1, S("0bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 19, 2, S("0bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 20, 0, S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 20, 1, S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, 2, SV(""), 0, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV(""), 0, 1, S("cde"));
-    test(S("abcde"), 0, 2, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, 2, SV("12345"), 0, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 0, 1, S("1cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 0, 2, S("12cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 0, 4, S("1234cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 0, 5, S("12345cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 0, 6, S("12345cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 1, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 1, 1, S("2cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 1, 2, S("23cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 1, 3, S("234cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 1, 4, S("2345cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 1, 5, S("2345cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 2, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 2, 1, S("3cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 2, 2, S("34cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 2, 3, S("345cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 2, 4, S("345cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 4, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 4, 1, S("5cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 4, 2, S("5cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 5, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 5, 1, S("cde"));
-    test(S("abcde"), 0, 2, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 0, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 0, 1, S("1cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 0, 5, S("12345cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 0, 9, S("123456789cde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test3() {
+  test(S("abcde"), 0, 1, SV("12345"), 0, 1, S("1bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 0, 2, S("12bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 0, 4, S("1234bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 0, 5, S("12345bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 0, 6, S("12345bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 1, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 1, 1, S("2bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 1, 2, S("23bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 1, 3, S("234bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 1, 4, S("2345bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 1, 5, S("2345bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 2, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 2, 1, S("3bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 2, 2, S("34bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 2, 3, S("345bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 2, 4, S("345bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 4, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 4, 1, S("5bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 4, 2, S("5bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 5, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 5, 1, S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 0, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 0, 1, S("1bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 0, 5, S("12345bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 0, 9, S("123456789bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 0, 10, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 0, 11, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 1, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 1, 1, S("2bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 1, 4, S("2345bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 1, 8, S("23456789bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 1, 9, S("234567890bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 1, 10, S("234567890bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 5, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 5, 1, S("6bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 5, 2, S("67bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 5, 4, S("6789bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 5, 5, S("67890bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 5, 6, S("67890bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 9, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 9, 1, S("0bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 9, 2, S("0bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 10, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 10, 1, S("bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 0, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 0, 1, S("1bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 0, 10, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 0, 19, S("1234567890123456789bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 0, 20, S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 0, 21, S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 1, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 1, 1, S("2bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 1, 9, S("234567890bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 1, 18, S("234567890123456789bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 1, 19, S("2345678901234567890bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 1, 20, S("2345678901234567890bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 10, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 10, 1, S("1bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 10, 5, S("12345bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 10, 9, S("123456789bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 10, 10, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 10, 11, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 19, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 19, 1, S("0bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 19, 2, S("0bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 20, 0, S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 20, 1, S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, 2, SV(""), 0, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV(""), 0, 1, S("cde"));
+  test(S("abcde"), 0, 2, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, 2, SV("12345"), 0, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 0, 1, S("1cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 0, 2, S("12cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 0, 4, S("1234cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 0, 5, S("12345cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 0, 6, S("12345cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 1, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 1, 1, S("2cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 1, 2, S("23cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 1, 3, S("234cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 1, 4, S("2345cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 1, 5, S("2345cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 2, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 2, 1, S("3cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 2, 2, S("34cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 2, 3, S("345cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 2, 4, S("345cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 4, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 4, 1, S("5cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 4, 2, S("5cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 5, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 5, 1, S("cde"));
+  test(S("abcde"), 0, 2, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 0, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 0, 1, S("1cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 0, 5, S("12345cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 0, 9, S("123456789cde"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test4()
-{
-    test(S("abcde"), 0, 2, SV("1234567890"), 0, 10, S("1234567890cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 0, 11, S("1234567890cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 1, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 1, 1, S("2cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 1, 4, S("2345cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 1, 8, S("23456789cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 1, 9, S("234567890cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 1, 10, S("234567890cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 5, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 5, 1, S("6cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 5, 2, S("67cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 5, 4, S("6789cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 5, 5, S("67890cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 5, 6, S("67890cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 9, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 9, 1, S("0cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 9, 2, S("0cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 10, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 10, 1, S("cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 0, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 0, 1, S("1cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 0, 10, S("1234567890cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 0, 19, S("1234567890123456789cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 0, 20, S("12345678901234567890cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 0, 21, S("12345678901234567890cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 1, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 1, 1, S("2cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 1, 9, S("234567890cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 1, 18, S("234567890123456789cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 1, 19, S("2345678901234567890cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 1, 20, S("2345678901234567890cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 10, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 10, 1, S("1cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 10, 5, S("12345cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 10, 9, S("123456789cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 10, 10, S("1234567890cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 10, 11, S("1234567890cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 19, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 19, 1, S("0cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 19, 2, S("0cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 20, 0, S("cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 20, 1, S("cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, 4, SV(""), 0, 0, S("e"));
-    test(S("abcde"), 0, 4, SV(""), 0, 1, S("e"));
-    test(S("abcde"), 0, 4, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, 4, SV("12345"), 0, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("12345"), 0, 1, S("1e"));
-    test(S("abcde"), 0, 4, SV("12345"), 0, 2, S("12e"));
-    test(S("abcde"), 0, 4, SV("12345"), 0, 4, S("1234e"));
-    test(S("abcde"), 0, 4, SV("12345"), 0, 5, S("12345e"));
-    test(S("abcde"), 0, 4, SV("12345"), 0, 6, S("12345e"));
-    test(S("abcde"), 0, 4, SV("12345"), 1, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("12345"), 1, 1, S("2e"));
-    test(S("abcde"), 0, 4, SV("12345"), 1, 2, S("23e"));
-    test(S("abcde"), 0, 4, SV("12345"), 1, 3, S("234e"));
-    test(S("abcde"), 0, 4, SV("12345"), 1, 4, S("2345e"));
-    test(S("abcde"), 0, 4, SV("12345"), 1, 5, S("2345e"));
-    test(S("abcde"), 0, 4, SV("12345"), 2, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("12345"), 2, 1, S("3e"));
-    test(S("abcde"), 0, 4, SV("12345"), 2, 2, S("34e"));
-    test(S("abcde"), 0, 4, SV("12345"), 2, 3, S("345e"));
-    test(S("abcde"), 0, 4, SV("12345"), 2, 4, S("345e"));
-    test(S("abcde"), 0, 4, SV("12345"), 4, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("12345"), 4, 1, S("5e"));
-    test(S("abcde"), 0, 4, SV("12345"), 4, 2, S("5e"));
-    test(S("abcde"), 0, 4, SV("12345"), 5, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("12345"), 5, 1, S("e"));
-    test(S("abcde"), 0, 4, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 0, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 0, 1, S("1e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 0, 5, S("12345e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 0, 9, S("123456789e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 0, 10, S("1234567890e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 0, 11, S("1234567890e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 1, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 1, 1, S("2e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 1, 4, S("2345e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 1, 8, S("23456789e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 1, 9, S("234567890e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 1, 10, S("234567890e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 5, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 5, 1, S("6e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 5, 2, S("67e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 5, 4, S("6789e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 5, 5, S("67890e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 5, 6, S("67890e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 9, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 9, 1, S("0e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 9, 2, S("0e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 10, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 10, 1, S("e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 0, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 0, 1, S("1e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 0, 10, S("1234567890e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 0, 19, S("1234567890123456789e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 0, 20, S("12345678901234567890e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 0, 21, S("12345678901234567890e"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test4() {
+  test(S("abcde"), 0, 2, SV("1234567890"), 0, 10, S("1234567890cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 0, 11, S("1234567890cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 1, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 1, 1, S("2cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 1, 4, S("2345cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 1, 8, S("23456789cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 1, 9, S("234567890cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 1, 10, S("234567890cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 5, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 5, 1, S("6cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 5, 2, S("67cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 5, 4, S("6789cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 5, 5, S("67890cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 5, 6, S("67890cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 9, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 9, 1, S("0cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 9, 2, S("0cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 10, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 10, 1, S("cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 0, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 0, 1, S("1cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 0, 10, S("1234567890cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 0, 19, S("1234567890123456789cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 0, 20, S("12345678901234567890cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 0, 21, S("12345678901234567890cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 1, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 1, 1, S("2cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 1, 9, S("234567890cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 1, 18, S("234567890123456789cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 1, 19, S("2345678901234567890cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 1, 20, S("2345678901234567890cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 10, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 10, 1, S("1cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 10, 5, S("12345cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 10, 9, S("123456789cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 10, 10, S("1234567890cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 10, 11, S("1234567890cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 19, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 19, 1, S("0cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 19, 2, S("0cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 20, 0, S("cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 20, 1, S("cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, 4, SV(""), 0, 0, S("e"));
+  test(S("abcde"), 0, 4, SV(""), 0, 1, S("e"));
+  test(S("abcde"), 0, 4, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, 4, SV("12345"), 0, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("12345"), 0, 1, S("1e"));
+  test(S("abcde"), 0, 4, SV("12345"), 0, 2, S("12e"));
+  test(S("abcde"), 0, 4, SV("12345"), 0, 4, S("1234e"));
+  test(S("abcde"), 0, 4, SV("12345"), 0, 5, S("12345e"));
+  test(S("abcde"), 0, 4, SV("12345"), 0, 6, S("12345e"));
+  test(S("abcde"), 0, 4, SV("12345"), 1, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("12345"), 1, 1, S("2e"));
+  test(S("abcde"), 0, 4, SV("12345"), 1, 2, S("23e"));
+  test(S("abcde"), 0, 4, SV("12345"), 1, 3, S("234e"));
+  test(S("abcde"), 0, 4, SV("12345"), 1, 4, S("2345e"));
+  test(S("abcde"), 0, 4, SV("12345"), 1, 5, S("2345e"));
+  test(S("abcde"), 0, 4, SV("12345"), 2, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("12345"), 2, 1, S("3e"));
+  test(S("abcde"), 0, 4, SV("12345"), 2, 2, S("34e"));
+  test(S("abcde"), 0, 4, SV("12345"), 2, 3, S("345e"));
+  test(S("abcde"), 0, 4, SV("12345"), 2, 4, S("345e"));
+  test(S("abcde"), 0, 4, SV("12345"), 4, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("12345"), 4, 1, S("5e"));
+  test(S("abcde"), 0, 4, SV("12345"), 4, 2, S("5e"));
+  test(S("abcde"), 0, 4, SV("12345"), 5, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("12345"), 5, 1, S("e"));
+  test(S("abcde"), 0, 4, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 0, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 0, 1, S("1e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 0, 5, S("12345e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 0, 9, S("123456789e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 0, 10, S("1234567890e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 0, 11, S("1234567890e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 1, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 1, 1, S("2e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 1, 4, S("2345e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 1, 8, S("23456789e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 1, 9, S("234567890e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 1, 10, S("234567890e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 5, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 5, 1, S("6e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 5, 2, S("67e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 5, 4, S("6789e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 5, 5, S("67890e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 5, 6, S("67890e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 9, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 9, 1, S("0e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 9, 2, S("0e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 10, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 10, 1, S("e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 0, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 0, 1, S("1e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 0, 10, S("1234567890e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 0, 19, S("1234567890123456789e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 0, 20, S("12345678901234567890e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 0, 21, S("12345678901234567890e"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test5()
-{
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 1, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 1, 1, S("2e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 1, 9, S("234567890e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 1, 18, S("234567890123456789e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 1, 19, S("2345678901234567890e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 1, 20, S("2345678901234567890e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 10, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 10, 1, S("1e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 10, 5, S("12345e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 10, 9, S("123456789e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 10, 10, S("1234567890e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 10, 11, S("1234567890e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 19, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 19, 1, S("0e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 19, 2, S("0e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 20, 0, S("e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 20, 1, S("e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, 5, SV(""), 0, 0, S(""));
-    test(S("abcde"), 0, 5, SV(""), 0, 1, S(""));
-    test(S("abcde"), 0, 5, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, 5, SV("12345"), 0, 0, S(""));
-    test(S("abcde"), 0, 5, SV("12345"), 0, 1, S("1"));
-    test(S("abcde"), 0, 5, SV("12345"), 0, 2, S("12"));
-    test(S("abcde"), 0, 5, SV("12345"), 0, 4, S("1234"));
-    test(S("abcde"), 0, 5, SV("12345"), 0, 5, S("12345"));
-    test(S("abcde"), 0, 5, SV("12345"), 0, 6, S("12345"));
-    test(S("abcde"), 0, 5, SV("12345"), 1, 0, S(""));
-    test(S("abcde"), 0, 5, SV("12345"), 1, 1, S("2"));
-    test(S("abcde"), 0, 5, SV("12345"), 1, 2, S("23"));
-    test(S("abcde"), 0, 5, SV("12345"), 1, 3, S("234"));
-    test(S("abcde"), 0, 5, SV("12345"), 1, 4, S("2345"));
-    test(S("abcde"), 0, 5, SV("12345"), 1, 5, S("2345"));
-    test(S("abcde"), 0, 5, SV("12345"), 2, 0, S(""));
-    test(S("abcde"), 0, 5, SV("12345"), 2, 1, S("3"));
-    test(S("abcde"), 0, 5, SV("12345"), 2, 2, S("34"));
-    test(S("abcde"), 0, 5, SV("12345"), 2, 3, S("345"));
-    test(S("abcde"), 0, 5, SV("12345"), 2, 4, S("345"));
-    test(S("abcde"), 0, 5, SV("12345"), 4, 0, S(""));
-    test(S("abcde"), 0, 5, SV("12345"), 4, 1, S("5"));
-    test(S("abcde"), 0, 5, SV("12345"), 4, 2, S("5"));
-    test(S("abcde"), 0, 5, SV("12345"), 5, 0, S(""));
-    test(S("abcde"), 0, 5, SV("12345"), 5, 1, S(""));
-    test(S("abcde"), 0, 5, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 0, 0, S(""));
-    test(S("abcde"), 0, 5, SV("1234567890"), 0, 1, S("1"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 0, 5, S("12345"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 0, 9, S("123456789"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 0, 10, S("1234567890"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 0, 11, S("1234567890"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 1, 0, S(""));
-    test(S("abcde"), 0, 5, SV("1234567890"), 1, 1, S("2"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 1, 4, S("2345"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 1, 8, S("23456789"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 1, 9, S("234567890"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 1, 10, S("234567890"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 5, 0, S(""));
-    test(S("abcde"), 0, 5, SV("1234567890"), 5, 1, S("6"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 5, 2, S("67"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 5, 4, S("6789"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 5, 5, S("67890"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 5, 6, S("67890"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 9, 0, S(""));
-    test(S("abcde"), 0, 5, SV("1234567890"), 9, 1, S("0"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 9, 2, S("0"));
-    test(S("abcde"), 0, 5, SV("1234567890"), 10, 0, S(""));
-    test(S("abcde"), 0, 5, SV("1234567890"), 10, 1, S(""));
-    test(S("abcde"), 0, 5, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 0, 0, S(""));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 0, 1, S("1"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 1, 0, S(""));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 1, 1, S("2"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 1, 9, S("234567890"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 10, 0, S(""));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 10, 1, S("1"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 10, 5, S("12345"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 10, 9, S("123456789"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 19, 0, S(""));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 19, 1, S("0"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 19, 2, S("0"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 20, 0, S(""));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 20, 1, S(""));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, 6, SV(""), 0, 0, S(""));
-    test(S("abcde"), 0, 6, SV(""), 0, 1, S(""));
-    test(S("abcde"), 0, 6, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, 6, SV("12345"), 0, 0, S(""));
-    test(S("abcde"), 0, 6, SV("12345"), 0, 1, S("1"));
-    test(S("abcde"), 0, 6, SV("12345"), 0, 2, S("12"));
-    test(S("abcde"), 0, 6, SV("12345"), 0, 4, S("1234"));
-    test(S("abcde"), 0, 6, SV("12345"), 0, 5, S("12345"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test5() {
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 1, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 1, 1, S("2e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 1, 9, S("234567890e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 1, 18, S("234567890123456789e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 1, 19, S("2345678901234567890e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 1, 20, S("2345678901234567890e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 10, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 10, 1, S("1e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 10, 5, S("12345e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 10, 9, S("123456789e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 10, 10, S("1234567890e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 10, 11, S("1234567890e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 19, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 19, 1, S("0e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 19, 2, S("0e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 20, 0, S("e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 20, 1, S("e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, 5, SV(""), 0, 0, S(""));
+  test(S("abcde"), 0, 5, SV(""), 0, 1, S(""));
+  test(S("abcde"), 0, 5, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, 5, SV("12345"), 0, 0, S(""));
+  test(S("abcde"), 0, 5, SV("12345"), 0, 1, S("1"));
+  test(S("abcde"), 0, 5, SV("12345"), 0, 2, S("12"));
+  test(S("abcde"), 0, 5, SV("12345"), 0, 4, S("1234"));
+  test(S("abcde"), 0, 5, SV("12345"), 0, 5, S("12345"));
+  test(S("abcde"), 0, 5, SV("12345"), 0, 6, S("12345"));
+  test(S("abcde"), 0, 5, SV("12345"), 1, 0, S(""));
+  test(S("abcde"), 0, 5, SV("12345"), 1, 1, S("2"));
+  test(S("abcde"), 0, 5, SV("12345"), 1, 2, S("23"));
+  test(S("abcde"), 0, 5, SV("12345"), 1, 3, S("234"));
+  test(S("abcde"), 0, 5, SV("12345"), 1, 4, S("2345"));
+  test(S("abcde"), 0, 5, SV("12345"), 1, 5, S("2345"));
+  test(S("abcde"), 0, 5, SV("12345"), 2, 0, S(""));
+  test(S("abcde"), 0, 5, SV("12345"), 2, 1, S("3"));
+  test(S("abcde"), 0, 5, SV("12345"), 2, 2, S("34"));
+  test(S("abcde"), 0, 5, SV("12345"), 2, 3, S("345"));
+  test(S("abcde"), 0, 5, SV("12345"), 2, 4, S("345"));
+  test(S("abcde"), 0, 5, SV("12345"), 4, 0, S(""));
+  test(S("abcde"), 0, 5, SV("12345"), 4, 1, S("5"));
+  test(S("abcde"), 0, 5, SV("12345"), 4, 2, S("5"));
+  test(S("abcde"), 0, 5, SV("12345"), 5, 0, S(""));
+  test(S("abcde"), 0, 5, SV("12345"), 5, 1, S(""));
+  test(S("abcde"), 0, 5, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 0, 0, S(""));
+  test(S("abcde"), 0, 5, SV("1234567890"), 0, 1, S("1"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 0, 5, S("12345"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 0, 9, S("123456789"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 0, 10, S("1234567890"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 0, 11, S("1234567890"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 1, 0, S(""));
+  test(S("abcde"), 0, 5, SV("1234567890"), 1, 1, S("2"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 1, 4, S("2345"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 1, 8, S("23456789"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 1, 9, S("234567890"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 1, 10, S("234567890"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 5, 0, S(""));
+  test(S("abcde"), 0, 5, SV("1234567890"), 5, 1, S("6"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 5, 2, S("67"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 5, 4, S("6789"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 5, 5, S("67890"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 5, 6, S("67890"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 9, 0, S(""));
+  test(S("abcde"), 0, 5, SV("1234567890"), 9, 1, S("0"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 9, 2, S("0"));
+  test(S("abcde"), 0, 5, SV("1234567890"), 10, 0, S(""));
+  test(S("abcde"), 0, 5, SV("1234567890"), 10, 1, S(""));
+  test(S("abcde"), 0, 5, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 0, 0, S(""));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 0, 1, S("1"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 1, 0, S(""));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 1, 1, S("2"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 1, 9, S("234567890"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 10, 0, S(""));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 10, 1, S("1"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 10, 5, S("12345"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 10, 9, S("123456789"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 19, 0, S(""));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 19, 1, S("0"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 19, 2, S("0"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 20, 0, S(""));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 20, 1, S(""));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, 6, SV(""), 0, 0, S(""));
+  test(S("abcde"), 0, 6, SV(""), 0, 1, S(""));
+  test(S("abcde"), 0, 6, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, 6, SV("12345"), 0, 0, S(""));
+  test(S("abcde"), 0, 6, SV("12345"), 0, 1, S("1"));
+  test(S("abcde"), 0, 6, SV("12345"), 0, 2, S("12"));
+  test(S("abcde"), 0, 6, SV("12345"), 0, 4, S("1234"));
+  test(S("abcde"), 0, 6, SV("12345"), 0, 5, S("12345"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test6()
-{
-    test(S("abcde"), 0, 6, SV("12345"), 0, 6, S("12345"));
-    test(S("abcde"), 0, 6, SV("12345"), 1, 0, S(""));
-    test(S("abcde"), 0, 6, SV("12345"), 1, 1, S("2"));
-    test(S("abcde"), 0, 6, SV("12345"), 1, 2, S("23"));
-    test(S("abcde"), 0, 6, SV("12345"), 1, 3, S("234"));
-    test(S("abcde"), 0, 6, SV("12345"), 1, 4, S("2345"));
-    test(S("abcde"), 0, 6, SV("12345"), 1, 5, S("2345"));
-    test(S("abcde"), 0, 6, SV("12345"), 2, 0, S(""));
-    test(S("abcde"), 0, 6, SV("12345"), 2, 1, S("3"));
-    test(S("abcde"), 0, 6, SV("12345"), 2, 2, S("34"));
-    test(S("abcde"), 0, 6, SV("12345"), 2, 3, S("345"));
-    test(S("abcde"), 0, 6, SV("12345"), 2, 4, S("345"));
-    test(S("abcde"), 0, 6, SV("12345"), 4, 0, S(""));
-    test(S("abcde"), 0, 6, SV("12345"), 4, 1, S("5"));
-    test(S("abcde"), 0, 6, SV("12345"), 4, 2, S("5"));
-    test(S("abcde"), 0, 6, SV("12345"), 5, 0, S(""));
-    test(S("abcde"), 0, 6, SV("12345"), 5, 1, S(""));
-    test(S("abcde"), 0, 6, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 0, 0, S(""));
-    test(S("abcde"), 0, 6, SV("1234567890"), 0, 1, S("1"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 0, 5, S("12345"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 0, 9, S("123456789"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 0, 10, S("1234567890"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 0, 11, S("1234567890"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 1, 0, S(""));
-    test(S("abcde"), 0, 6, SV("1234567890"), 1, 1, S("2"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 1, 4, S("2345"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 1, 8, S("23456789"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 1, 9, S("234567890"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 1, 10, S("234567890"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 5, 0, S(""));
-    test(S("abcde"), 0, 6, SV("1234567890"), 5, 1, S("6"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 5, 2, S("67"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 5, 4, S("6789"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 5, 5, S("67890"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 5, 6, S("67890"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 9, 0, S(""));
-    test(S("abcde"), 0, 6, SV("1234567890"), 9, 1, S("0"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 9, 2, S("0"));
-    test(S("abcde"), 0, 6, SV("1234567890"), 10, 0, S(""));
-    test(S("abcde"), 0, 6, SV("1234567890"), 10, 1, S(""));
-    test(S("abcde"), 0, 6, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 0, 0, S(""));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 0, 1, S("1"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 1, 0, S(""));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 1, 1, S("2"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 1, 9, S("234567890"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 10, 0, S(""));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 10, 1, S("1"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 10, 5, S("12345"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 10, 9, S("123456789"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 19, 0, S(""));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 19, 1, S("0"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 19, 2, S("0"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 20, 0, S(""));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 20, 1, S(""));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, 0, SV(""), 0, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV(""), 0, 1, S("abcde"));
-    test(S("abcde"), 1, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, 0, SV("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 0, 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 0, 2, S("a12bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 0, 4, S("a1234bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 0, 5, S("a12345bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 0, 6, S("a12345bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 1, 1, S("a2bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 1, 2, S("a23bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 1, 3, S("a234bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 1, 4, S("a2345bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 1, 5, S("a2345bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 2, 1, S("a3bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 2, 2, S("a34bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 2, 3, S("a345bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 2, 4, S("a345bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 4, 1, S("a5bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 4, 2, S("a5bcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 0, 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 0, 5, S("a12345bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 0, 9, S("a123456789bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 0, 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 0, 11, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 1, 1, S("a2bcde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test6() {
+  test(S("abcde"), 0, 6, SV("12345"), 0, 6, S("12345"));
+  test(S("abcde"), 0, 6, SV("12345"), 1, 0, S(""));
+  test(S("abcde"), 0, 6, SV("12345"), 1, 1, S("2"));
+  test(S("abcde"), 0, 6, SV("12345"), 1, 2, S("23"));
+  test(S("abcde"), 0, 6, SV("12345"), 1, 3, S("234"));
+  test(S("abcde"), 0, 6, SV("12345"), 1, 4, S("2345"));
+  test(S("abcde"), 0, 6, SV("12345"), 1, 5, S("2345"));
+  test(S("abcde"), 0, 6, SV("12345"), 2, 0, S(""));
+  test(S("abcde"), 0, 6, SV("12345"), 2, 1, S("3"));
+  test(S("abcde"), 0, 6, SV("12345"), 2, 2, S("34"));
+  test(S("abcde"), 0, 6, SV("12345"), 2, 3, S("345"));
+  test(S("abcde"), 0, 6, SV("12345"), 2, 4, S("345"));
+  test(S("abcde"), 0, 6, SV("12345"), 4, 0, S(""));
+  test(S("abcde"), 0, 6, SV("12345"), 4, 1, S("5"));
+  test(S("abcde"), 0, 6, SV("12345"), 4, 2, S("5"));
+  test(S("abcde"), 0, 6, SV("12345"), 5, 0, S(""));
+  test(S("abcde"), 0, 6, SV("12345"), 5, 1, S(""));
+  test(S("abcde"), 0, 6, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 0, 0, S(""));
+  test(S("abcde"), 0, 6, SV("1234567890"), 0, 1, S("1"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 0, 5, S("12345"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 0, 9, S("123456789"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 0, 10, S("1234567890"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 0, 11, S("1234567890"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 1, 0, S(""));
+  test(S("abcde"), 0, 6, SV("1234567890"), 1, 1, S("2"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 1, 4, S("2345"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 1, 8, S("23456789"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 1, 9, S("234567890"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 1, 10, S("234567890"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 5, 0, S(""));
+  test(S("abcde"), 0, 6, SV("1234567890"), 5, 1, S("6"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 5, 2, S("67"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 5, 4, S("6789"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 5, 5, S("67890"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 5, 6, S("67890"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 9, 0, S(""));
+  test(S("abcde"), 0, 6, SV("1234567890"), 9, 1, S("0"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 9, 2, S("0"));
+  test(S("abcde"), 0, 6, SV("1234567890"), 10, 0, S(""));
+  test(S("abcde"), 0, 6, SV("1234567890"), 10, 1, S(""));
+  test(S("abcde"), 0, 6, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 0, 0, S(""));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 0, 1, S("1"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 1, 0, S(""));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 1, 1, S("2"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 1, 9, S("234567890"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 10, 0, S(""));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 10, 1, S("1"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 10, 5, S("12345"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 10, 9, S("123456789"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 19, 0, S(""));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 19, 1, S("0"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 19, 2, S("0"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 20, 0, S(""));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 20, 1, S(""));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, 0, SV(""), 0, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV(""), 0, 1, S("abcde"));
+  test(S("abcde"), 1, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, 0, SV("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 0, 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 0, 2, S("a12bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 0, 4, S("a1234bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 0, 5, S("a12345bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 0, 6, S("a12345bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 1, 1, S("a2bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 1, 2, S("a23bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 1, 3, S("a234bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 1, 4, S("a2345bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 1, 5, S("a2345bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 2, 1, S("a3bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 2, 2, S("a34bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 2, 3, S("a345bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 2, 4, S("a345bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 4, 1, S("a5bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 4, 2, S("a5bcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 0, 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 0, 5, S("a12345bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 0, 9, S("a123456789bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 0, 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 0, 11, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 1, 1, S("a2bcde"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test7()
-{
-    test(S("abcde"), 1, 0, SV("1234567890"), 1, 4, S("a2345bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 1, 8, S("a23456789bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 1, 9, S("a234567890bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 1, 10, S("a234567890bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 5, 1, S("a6bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 5, 2, S("a67bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 5, 4, S("a6789bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 5, 5, S("a67890bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 5, 6, S("a67890bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 9, 1, S("a0bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 9, 2, S("a0bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 0, 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 0, 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 0, 19, S("a1234567890123456789bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 0, 20, S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 0, 21, S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 1, 1, S("a2bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 1, 9, S("a234567890bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 1, 18, S("a234567890123456789bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 1, 19, S("a2345678901234567890bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 1, 20, S("a2345678901234567890bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 10, 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 10, 5, S("a12345bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 10, 9, S("a123456789bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 10, 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 10, 11, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 19, 1, S("a0bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 19, 2, S("a0bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, 1, SV(""), 0, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV(""), 0, 1, S("acde"));
-    test(S("abcde"), 1, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, 1, SV("12345"), 0, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("12345"), 0, 1, S("a1cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 0, 2, S("a12cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 0, 4, S("a1234cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 0, 5, S("a12345cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 0, 6, S("a12345cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 1, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("12345"), 1, 1, S("a2cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 1, 2, S("a23cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 1, 3, S("a234cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 1, 4, S("a2345cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 1, 5, S("a2345cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 2, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("12345"), 2, 1, S("a3cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 2, 2, S("a34cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 2, 3, S("a345cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 2, 4, S("a345cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 4, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("12345"), 4, 1, S("a5cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 4, 2, S("a5cde"));
-    test(S("abcde"), 1, 1, SV("12345"), 5, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("12345"), 5, 1, S("acde"));
-    test(S("abcde"), 1, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 0, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 0, 1, S("a1cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 0, 5, S("a12345cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 0, 9, S("a123456789cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 0, 10, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 0, 11, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 1, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 1, 1, S("a2cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 1, 4, S("a2345cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 1, 8, S("a23456789cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 1, 9, S("a234567890cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 1, 10, S("a234567890cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 5, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 5, 1, S("a6cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 5, 2, S("a67cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 5, 4, S("a6789cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 5, 5, S("a67890cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 5, 6, S("a67890cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 9, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 9, 1, S("a0cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 9, 2, S("a0cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 10, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 10, 1, S("acde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 0, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 0, 1, S("a1cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 0, 10, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 0, 19, S("a1234567890123456789cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 0, 20, S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 0, 21, S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 1, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 1, 1, S("a2cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 1, 9, S("a234567890cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 1, 18, S("a234567890123456789cde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test7() {
+  test(S("abcde"), 1, 0, SV("1234567890"), 1, 4, S("a2345bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 1, 8, S("a23456789bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 1, 9, S("a234567890bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 1, 10, S("a234567890bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 5, 1, S("a6bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 5, 2, S("a67bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 5, 4, S("a6789bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 5, 5, S("a67890bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 5, 6, S("a67890bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 9, 1, S("a0bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 9, 2, S("a0bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 0, 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 0, 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 0, 19, S("a1234567890123456789bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 0, 20, S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 0, 21, S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 1, 1, S("a2bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 1, 9, S("a234567890bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 1, 18, S("a234567890123456789bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 1, 19, S("a2345678901234567890bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 1, 20, S("a2345678901234567890bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 10, 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 10, 5, S("a12345bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 10, 9, S("a123456789bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 10, 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 10, 11, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 19, 1, S("a0bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 19, 2, S("a0bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, 1, SV(""), 0, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV(""), 0, 1, S("acde"));
+  test(S("abcde"), 1, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, 1, SV("12345"), 0, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("12345"), 0, 1, S("a1cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 0, 2, S("a12cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 0, 4, S("a1234cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 0, 5, S("a12345cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 0, 6, S("a12345cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 1, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("12345"), 1, 1, S("a2cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 1, 2, S("a23cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 1, 3, S("a234cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 1, 4, S("a2345cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 1, 5, S("a2345cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 2, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("12345"), 2, 1, S("a3cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 2, 2, S("a34cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 2, 3, S("a345cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 2, 4, S("a345cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 4, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("12345"), 4, 1, S("a5cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 4, 2, S("a5cde"));
+  test(S("abcde"), 1, 1, SV("12345"), 5, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("12345"), 5, 1, S("acde"));
+  test(S("abcde"), 1, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 0, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 0, 1, S("a1cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 0, 5, S("a12345cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 0, 9, S("a123456789cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 0, 10, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 0, 11, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 1, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 1, 1, S("a2cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 1, 4, S("a2345cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 1, 8, S("a23456789cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 1, 9, S("a234567890cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 1, 10, S("a234567890cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 5, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 5, 1, S("a6cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 5, 2, S("a67cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 5, 4, S("a6789cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 5, 5, S("a67890cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 5, 6, S("a67890cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 9, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 9, 1, S("a0cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 9, 2, S("a0cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 10, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 10, 1, S("acde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 0, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 0, 1, S("a1cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 0, 10, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 0, 19, S("a1234567890123456789cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 0, 20, S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 0, 21, S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 1, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 1, 1, S("a2cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 1, 9, S("a234567890cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 1, 18, S("a234567890123456789cde"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test8()
-{
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 1, 19, S("a2345678901234567890cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 1, 20, S("a2345678901234567890cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 10, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 10, 1, S("a1cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 10, 5, S("a12345cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 10, 9, S("a123456789cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 10, 10, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 10, 11, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 19, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 19, 1, S("a0cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 19, 2, S("a0cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 20, 0, S("acde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 20, 1, S("acde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, 2, SV(""), 0, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV(""), 0, 1, S("ade"));
-    test(S("abcde"), 1, 2, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, 2, SV("12345"), 0, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("12345"), 0, 1, S("a1de"));
-    test(S("abcde"), 1, 2, SV("12345"), 0, 2, S("a12de"));
-    test(S("abcde"), 1, 2, SV("12345"), 0, 4, S("a1234de"));
-    test(S("abcde"), 1, 2, SV("12345"), 0, 5, S("a12345de"));
-    test(S("abcde"), 1, 2, SV("12345"), 0, 6, S("a12345de"));
-    test(S("abcde"), 1, 2, SV("12345"), 1, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("12345"), 1, 1, S("a2de"));
-    test(S("abcde"), 1, 2, SV("12345"), 1, 2, S("a23de"));
-    test(S("abcde"), 1, 2, SV("12345"), 1, 3, S("a234de"));
-    test(S("abcde"), 1, 2, SV("12345"), 1, 4, S("a2345de"));
-    test(S("abcde"), 1, 2, SV("12345"), 1, 5, S("a2345de"));
-    test(S("abcde"), 1, 2, SV("12345"), 2, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("12345"), 2, 1, S("a3de"));
-    test(S("abcde"), 1, 2, SV("12345"), 2, 2, S("a34de"));
-    test(S("abcde"), 1, 2, SV("12345"), 2, 3, S("a345de"));
-    test(S("abcde"), 1, 2, SV("12345"), 2, 4, S("a345de"));
-    test(S("abcde"), 1, 2, SV("12345"), 4, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("12345"), 4, 1, S("a5de"));
-    test(S("abcde"), 1, 2, SV("12345"), 4, 2, S("a5de"));
-    test(S("abcde"), 1, 2, SV("12345"), 5, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("12345"), 5, 1, S("ade"));
-    test(S("abcde"), 1, 2, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 0, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 0, 1, S("a1de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 0, 5, S("a12345de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 0, 9, S("a123456789de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 0, 10, S("a1234567890de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 0, 11, S("a1234567890de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 1, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 1, 1, S("a2de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 1, 4, S("a2345de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 1, 8, S("a23456789de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 1, 9, S("a234567890de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 1, 10, S("a234567890de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 5, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 5, 1, S("a6de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 5, 2, S("a67de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 5, 4, S("a6789de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 5, 5, S("a67890de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 5, 6, S("a67890de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 9, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 9, 1, S("a0de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 9, 2, S("a0de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 10, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 10, 1, S("ade"));
-    test(S("abcde"), 1, 2, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 0, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 0, 1, S("a1de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 0, 10, S("a1234567890de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 0, 19, S("a1234567890123456789de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 0, 20, S("a12345678901234567890de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 0, 21, S("a12345678901234567890de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 1, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 1, 1, S("a2de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 1, 9, S("a234567890de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 1, 18, S("a234567890123456789de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 1, 19, S("a2345678901234567890de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 1, 20, S("a2345678901234567890de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 10, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 10, 1, S("a1de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 10, 5, S("a12345de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 10, 9, S("a123456789de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 10, 10, S("a1234567890de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 10, 11, S("a1234567890de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 19, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 19, 1, S("a0de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 19, 2, S("a0de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 20, 0, S("ade"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 20, 1, S("ade"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, 3, SV(""), 0, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV(""), 0, 1, S("ae"));
-    test(S("abcde"), 1, 3, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, 3, SV("12345"), 0, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("12345"), 0, 1, S("a1e"));
-    test(S("abcde"), 1, 3, SV("12345"), 0, 2, S("a12e"));
-    test(S("abcde"), 1, 3, SV("12345"), 0, 4, S("a1234e"));
-    test(S("abcde"), 1, 3, SV("12345"), 0, 5, S("a12345e"));
-    test(S("abcde"), 1, 3, SV("12345"), 0, 6, S("a12345e"));
-    test(S("abcde"), 1, 3, SV("12345"), 1, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("12345"), 1, 1, S("a2e"));
-    test(S("abcde"), 1, 3, SV("12345"), 1, 2, S("a23e"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test8() {
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 1, 19, S("a2345678901234567890cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 1, 20, S("a2345678901234567890cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 10, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 10, 1, S("a1cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 10, 5, S("a12345cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 10, 9, S("a123456789cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 10, 10, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 10, 11, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 19, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 19, 1, S("a0cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 19, 2, S("a0cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 20, 0, S("acde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 20, 1, S("acde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, 2, SV(""), 0, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV(""), 0, 1, S("ade"));
+  test(S("abcde"), 1, 2, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, 2, SV("12345"), 0, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("12345"), 0, 1, S("a1de"));
+  test(S("abcde"), 1, 2, SV("12345"), 0, 2, S("a12de"));
+  test(S("abcde"), 1, 2, SV("12345"), 0, 4, S("a1234de"));
+  test(S("abcde"), 1, 2, SV("12345"), 0, 5, S("a12345de"));
+  test(S("abcde"), 1, 2, SV("12345"), 0, 6, S("a12345de"));
+  test(S("abcde"), 1, 2, SV("12345"), 1, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("12345"), 1, 1, S("a2de"));
+  test(S("abcde"), 1, 2, SV("12345"), 1, 2, S("a23de"));
+  test(S("abcde"), 1, 2, SV("12345"), 1, 3, S("a234de"));
+  test(S("abcde"), 1, 2, SV("12345"), 1, 4, S("a2345de"));
+  test(S("abcde"), 1, 2, SV("12345"), 1, 5, S("a2345de"));
+  test(S("abcde"), 1, 2, SV("12345"), 2, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("12345"), 2, 1, S("a3de"));
+  test(S("abcde"), 1, 2, SV("12345"), 2, 2, S("a34de"));
+  test(S("abcde"), 1, 2, SV("12345"), 2, 3, S("a345de"));
+  test(S("abcde"), 1, 2, SV("12345"), 2, 4, S("a345de"));
+  test(S("abcde"), 1, 2, SV("12345"), 4, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("12345"), 4, 1, S("a5de"));
+  test(S("abcde"), 1, 2, SV("12345"), 4, 2, S("a5de"));
+  test(S("abcde"), 1, 2, SV("12345"), 5, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("12345"), 5, 1, S("ade"));
+  test(S("abcde"), 1, 2, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 0, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 0, 1, S("a1de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 0, 5, S("a12345de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 0, 9, S("a123456789de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 0, 10, S("a1234567890de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 0, 11, S("a1234567890de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 1, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 1, 1, S("a2de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 1, 4, S("a2345de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 1, 8, S("a23456789de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 1, 9, S("a234567890de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 1, 10, S("a234567890de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 5, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 5, 1, S("a6de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 5, 2, S("a67de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 5, 4, S("a6789de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 5, 5, S("a67890de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 5, 6, S("a67890de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 9, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 9, 1, S("a0de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 9, 2, S("a0de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 10, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 10, 1, S("ade"));
+  test(S("abcde"), 1, 2, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 0, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 0, 1, S("a1de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 0, 10, S("a1234567890de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 0, 19, S("a1234567890123456789de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 0, 20, S("a12345678901234567890de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 0, 21, S("a12345678901234567890de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 1, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 1, 1, S("a2de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 1, 9, S("a234567890de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 1, 18, S("a234567890123456789de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 1, 19, S("a2345678901234567890de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 1, 20, S("a2345678901234567890de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 10, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 10, 1, S("a1de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 10, 5, S("a12345de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 10, 9, S("a123456789de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 10, 10, S("a1234567890de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 10, 11, S("a1234567890de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 19, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 19, 1, S("a0de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 19, 2, S("a0de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 20, 0, S("ade"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 20, 1, S("ade"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, 3, SV(""), 0, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV(""), 0, 1, S("ae"));
+  test(S("abcde"), 1, 3, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, 3, SV("12345"), 0, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("12345"), 0, 1, S("a1e"));
+  test(S("abcde"), 1, 3, SV("12345"), 0, 2, S("a12e"));
+  test(S("abcde"), 1, 3, SV("12345"), 0, 4, S("a1234e"));
+  test(S("abcde"), 1, 3, SV("12345"), 0, 5, S("a12345e"));
+  test(S("abcde"), 1, 3, SV("12345"), 0, 6, S("a12345e"));
+  test(S("abcde"), 1, 3, SV("12345"), 1, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("12345"), 1, 1, S("a2e"));
+  test(S("abcde"), 1, 3, SV("12345"), 1, 2, S("a23e"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test9()
-{
-    test(S("abcde"), 1, 3, SV("12345"), 1, 3, S("a234e"));
-    test(S("abcde"), 1, 3, SV("12345"), 1, 4, S("a2345e"));
-    test(S("abcde"), 1, 3, SV("12345"), 1, 5, S("a2345e"));
-    test(S("abcde"), 1, 3, SV("12345"), 2, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("12345"), 2, 1, S("a3e"));
-    test(S("abcde"), 1, 3, SV("12345"), 2, 2, S("a34e"));
-    test(S("abcde"), 1, 3, SV("12345"), 2, 3, S("a345e"));
-    test(S("abcde"), 1, 3, SV("12345"), 2, 4, S("a345e"));
-    test(S("abcde"), 1, 3, SV("12345"), 4, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("12345"), 4, 1, S("a5e"));
-    test(S("abcde"), 1, 3, SV("12345"), 4, 2, S("a5e"));
-    test(S("abcde"), 1, 3, SV("12345"), 5, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("12345"), 5, 1, S("ae"));
-    test(S("abcde"), 1, 3, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 0, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 0, 1, S("a1e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 0, 5, S("a12345e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 0, 9, S("a123456789e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 0, 10, S("a1234567890e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 0, 11, S("a1234567890e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 1, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 1, 1, S("a2e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 1, 4, S("a2345e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 1, 8, S("a23456789e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 1, 9, S("a234567890e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 1, 10, S("a234567890e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 5, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 5, 1, S("a6e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 5, 2, S("a67e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 5, 4, S("a6789e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 5, 5, S("a67890e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 5, 6, S("a67890e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 9, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 9, 1, S("a0e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 9, 2, S("a0e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 10, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 10, 1, S("ae"));
-    test(S("abcde"), 1, 3, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 0, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 0, 1, S("a1e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 0, 10, S("a1234567890e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 0, 19, S("a1234567890123456789e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 0, 20, S("a12345678901234567890e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 0, 21, S("a12345678901234567890e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 1, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 1, 1, S("a2e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 1, 9, S("a234567890e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 1, 18, S("a234567890123456789e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 1, 19, S("a2345678901234567890e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 1, 20, S("a2345678901234567890e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 10, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 10, 1, S("a1e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 10, 5, S("a12345e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 10, 9, S("a123456789e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 10, 10, S("a1234567890e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 10, 11, S("a1234567890e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 19, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 19, 1, S("a0e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 19, 2, S("a0e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 20, 0, S("ae"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 20, 1, S("ae"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, 4, SV(""), 0, 0, S("a"));
-    test(S("abcde"), 1, 4, SV(""), 0, 1, S("a"));
-    test(S("abcde"), 1, 4, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, 4, SV("12345"), 0, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("12345"), 0, 1, S("a1"));
-    test(S("abcde"), 1, 4, SV("12345"), 0, 2, S("a12"));
-    test(S("abcde"), 1, 4, SV("12345"), 0, 4, S("a1234"));
-    test(S("abcde"), 1, 4, SV("12345"), 0, 5, S("a12345"));
-    test(S("abcde"), 1, 4, SV("12345"), 0, 6, S("a12345"));
-    test(S("abcde"), 1, 4, SV("12345"), 1, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("12345"), 1, 1, S("a2"));
-    test(S("abcde"), 1, 4, SV("12345"), 1, 2, S("a23"));
-    test(S("abcde"), 1, 4, SV("12345"), 1, 3, S("a234"));
-    test(S("abcde"), 1, 4, SV("12345"), 1, 4, S("a2345"));
-    test(S("abcde"), 1, 4, SV("12345"), 1, 5, S("a2345"));
-    test(S("abcde"), 1, 4, SV("12345"), 2, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("12345"), 2, 1, S("a3"));
-    test(S("abcde"), 1, 4, SV("12345"), 2, 2, S("a34"));
-    test(S("abcde"), 1, 4, SV("12345"), 2, 3, S("a345"));
-    test(S("abcde"), 1, 4, SV("12345"), 2, 4, S("a345"));
-    test(S("abcde"), 1, 4, SV("12345"), 4, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("12345"), 4, 1, S("a5"));
-    test(S("abcde"), 1, 4, SV("12345"), 4, 2, S("a5"));
-    test(S("abcde"), 1, 4, SV("12345"), 5, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("12345"), 5, 1, S("a"));
-    test(S("abcde"), 1, 4, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 0, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 0, 1, S("a1"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 0, 5, S("a12345"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 0, 9, S("a123456789"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 0, 10, S("a1234567890"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 0, 11, S("a1234567890"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 1, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 1, 1, S("a2"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 1, 4, S("a2345"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 1, 8, S("a23456789"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 1, 9, S("a234567890"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 1, 10, S("a234567890"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test9() {
+  test(S("abcde"), 1, 3, SV("12345"), 1, 3, S("a234e"));
+  test(S("abcde"), 1, 3, SV("12345"), 1, 4, S("a2345e"));
+  test(S("abcde"), 1, 3, SV("12345"), 1, 5, S("a2345e"));
+  test(S("abcde"), 1, 3, SV("12345"), 2, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("12345"), 2, 1, S("a3e"));
+  test(S("abcde"), 1, 3, SV("12345"), 2, 2, S("a34e"));
+  test(S("abcde"), 1, 3, SV("12345"), 2, 3, S("a345e"));
+  test(S("abcde"), 1, 3, SV("12345"), 2, 4, S("a345e"));
+  test(S("abcde"), 1, 3, SV("12345"), 4, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("12345"), 4, 1, S("a5e"));
+  test(S("abcde"), 1, 3, SV("12345"), 4, 2, S("a5e"));
+  test(S("abcde"), 1, 3, SV("12345"), 5, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("12345"), 5, 1, S("ae"));
+  test(S("abcde"), 1, 3, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 0, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 0, 1, S("a1e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 0, 5, S("a12345e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 0, 9, S("a123456789e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 0, 10, S("a1234567890e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 0, 11, S("a1234567890e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 1, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 1, 1, S("a2e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 1, 4, S("a2345e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 1, 8, S("a23456789e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 1, 9, S("a234567890e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 1, 10, S("a234567890e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 5, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 5, 1, S("a6e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 5, 2, S("a67e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 5, 4, S("a6789e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 5, 5, S("a67890e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 5, 6, S("a67890e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 9, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 9, 1, S("a0e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 9, 2, S("a0e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 10, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 10, 1, S("ae"));
+  test(S("abcde"), 1, 3, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 0, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 0, 1, S("a1e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 0, 10, S("a1234567890e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 0, 19, S("a1234567890123456789e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 0, 20, S("a12345678901234567890e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 0, 21, S("a12345678901234567890e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 1, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 1, 1, S("a2e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 1, 9, S("a234567890e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 1, 18, S("a234567890123456789e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 1, 19, S("a2345678901234567890e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 1, 20, S("a2345678901234567890e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 10, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 10, 1, S("a1e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 10, 5, S("a12345e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 10, 9, S("a123456789e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 10, 10, S("a1234567890e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 10, 11, S("a1234567890e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 19, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 19, 1, S("a0e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 19, 2, S("a0e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 20, 0, S("ae"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 20, 1, S("ae"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, 4, SV(""), 0, 0, S("a"));
+  test(S("abcde"), 1, 4, SV(""), 0, 1, S("a"));
+  test(S("abcde"), 1, 4, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, 4, SV("12345"), 0, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("12345"), 0, 1, S("a1"));
+  test(S("abcde"), 1, 4, SV("12345"), 0, 2, S("a12"));
+  test(S("abcde"), 1, 4, SV("12345"), 0, 4, S("a1234"));
+  test(S("abcde"), 1, 4, SV("12345"), 0, 5, S("a12345"));
+  test(S("abcde"), 1, 4, SV("12345"), 0, 6, S("a12345"));
+  test(S("abcde"), 1, 4, SV("12345"), 1, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("12345"), 1, 1, S("a2"));
+  test(S("abcde"), 1, 4, SV("12345"), 1, 2, S("a23"));
+  test(S("abcde"), 1, 4, SV("12345"), 1, 3, S("a234"));
+  test(S("abcde"), 1, 4, SV("12345"), 1, 4, S("a2345"));
+  test(S("abcde"), 1, 4, SV("12345"), 1, 5, S("a2345"));
+  test(S("abcde"), 1, 4, SV("12345"), 2, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("12345"), 2, 1, S("a3"));
+  test(S("abcde"), 1, 4, SV("12345"), 2, 2, S("a34"));
+  test(S("abcde"), 1, 4, SV("12345"), 2, 3, S("a345"));
+  test(S("abcde"), 1, 4, SV("12345"), 2, 4, S("a345"));
+  test(S("abcde"), 1, 4, SV("12345"), 4, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("12345"), 4, 1, S("a5"));
+  test(S("abcde"), 1, 4, SV("12345"), 4, 2, S("a5"));
+  test(S("abcde"), 1, 4, SV("12345"), 5, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("12345"), 5, 1, S("a"));
+  test(S("abcde"), 1, 4, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 0, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 0, 1, S("a1"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 0, 5, S("a12345"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 0, 9, S("a123456789"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 0, 10, S("a1234567890"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 0, 11, S("a1234567890"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 1, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 1, 1, S("a2"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 1, 4, S("a2345"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 1, 8, S("a23456789"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 1, 9, S("a234567890"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 1, 10, S("a234567890"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test10()
-{
-    test(S("abcde"), 1, 4, SV("1234567890"), 5, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 5, 1, S("a6"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 5, 2, S("a67"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 5, 4, S("a6789"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 5, 5, S("a67890"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 5, 6, S("a67890"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 9, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 9, 1, S("a0"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 9, 2, S("a0"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 10, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 10, 1, S("a"));
-    test(S("abcde"), 1, 4, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 0, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 0, 1, S("a1"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 0, 10, S("a1234567890"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 0, 19, S("a1234567890123456789"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 0, 20, S("a12345678901234567890"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 0, 21, S("a12345678901234567890"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 1, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 1, 1, S("a2"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 1, 9, S("a234567890"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 1, 18, S("a234567890123456789"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 1, 19, S("a2345678901234567890"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 1, 20, S("a2345678901234567890"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 10, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 10, 1, S("a1"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 10, 5, S("a12345"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 10, 9, S("a123456789"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 10, 10, S("a1234567890"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 10, 11, S("a1234567890"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 19, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 19, 1, S("a0"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 19, 2, S("a0"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 20, 0, S("a"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 20, 1, S("a"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, 5, SV(""), 0, 0, S("a"));
-    test(S("abcde"), 1, 5, SV(""), 0, 1, S("a"));
-    test(S("abcde"), 1, 5, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, 5, SV("12345"), 0, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("12345"), 0, 1, S("a1"));
-    test(S("abcde"), 1, 5, SV("12345"), 0, 2, S("a12"));
-    test(S("abcde"), 1, 5, SV("12345"), 0, 4, S("a1234"));
-    test(S("abcde"), 1, 5, SV("12345"), 0, 5, S("a12345"));
-    test(S("abcde"), 1, 5, SV("12345"), 0, 6, S("a12345"));
-    test(S("abcde"), 1, 5, SV("12345"), 1, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("12345"), 1, 1, S("a2"));
-    test(S("abcde"), 1, 5, SV("12345"), 1, 2, S("a23"));
-    test(S("abcde"), 1, 5, SV("12345"), 1, 3, S("a234"));
-    test(S("abcde"), 1, 5, SV("12345"), 1, 4, S("a2345"));
-    test(S("abcde"), 1, 5, SV("12345"), 1, 5, S("a2345"));
-    test(S("abcde"), 1, 5, SV("12345"), 2, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("12345"), 2, 1, S("a3"));
-    test(S("abcde"), 1, 5, SV("12345"), 2, 2, S("a34"));
-    test(S("abcde"), 1, 5, SV("12345"), 2, 3, S("a345"));
-    test(S("abcde"), 1, 5, SV("12345"), 2, 4, S("a345"));
-    test(S("abcde"), 1, 5, SV("12345"), 4, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("12345"), 4, 1, S("a5"));
-    test(S("abcde"), 1, 5, SV("12345"), 4, 2, S("a5"));
-    test(S("abcde"), 1, 5, SV("12345"), 5, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("12345"), 5, 1, S("a"));
-    test(S("abcde"), 1, 5, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 0, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 0, 1, S("a1"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 0, 5, S("a12345"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 0, 9, S("a123456789"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 0, 10, S("a1234567890"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 0, 11, S("a1234567890"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 1, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 1, 1, S("a2"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 1, 4, S("a2345"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 1, 8, S("a23456789"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 1, 9, S("a234567890"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 1, 10, S("a234567890"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 5, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 5, 1, S("a6"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 5, 2, S("a67"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 5, 4, S("a6789"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 5, 5, S("a67890"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 5, 6, S("a67890"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 9, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 9, 1, S("a0"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 9, 2, S("a0"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 10, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 10, 1, S("a"));
-    test(S("abcde"), 1, 5, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 0, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 0, 1, S("a1"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 0, 10, S("a1234567890"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 0, 19, S("a1234567890123456789"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 0, 20, S("a12345678901234567890"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 0, 21, S("a12345678901234567890"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 1, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 1, 1, S("a2"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 1, 9, S("a234567890"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 1, 18, S("a234567890123456789"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 1, 19, S("a2345678901234567890"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 1, 20, S("a2345678901234567890"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 10, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 10, 1, S("a1"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test10() {
+  test(S("abcde"), 1, 4, SV("1234567890"), 5, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 5, 1, S("a6"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 5, 2, S("a67"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 5, 4, S("a6789"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 5, 5, S("a67890"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 5, 6, S("a67890"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 9, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 9, 1, S("a0"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 9, 2, S("a0"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 10, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 10, 1, S("a"));
+  test(S("abcde"), 1, 4, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 0, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 0, 1, S("a1"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 0, 10, S("a1234567890"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 0, 19, S("a1234567890123456789"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 0, 20, S("a12345678901234567890"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 0, 21, S("a12345678901234567890"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 1, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 1, 1, S("a2"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 1, 9, S("a234567890"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 1, 18, S("a234567890123456789"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 1, 19, S("a2345678901234567890"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 1, 20, S("a2345678901234567890"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 10, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 10, 1, S("a1"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 10, 5, S("a12345"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 10, 9, S("a123456789"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 10, 10, S("a1234567890"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 10, 11, S("a1234567890"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 19, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 19, 1, S("a0"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 19, 2, S("a0"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 20, 0, S("a"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 20, 1, S("a"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, 5, SV(""), 0, 0, S("a"));
+  test(S("abcde"), 1, 5, SV(""), 0, 1, S("a"));
+  test(S("abcde"), 1, 5, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, 5, SV("12345"), 0, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("12345"), 0, 1, S("a1"));
+  test(S("abcde"), 1, 5, SV("12345"), 0, 2, S("a12"));
+  test(S("abcde"), 1, 5, SV("12345"), 0, 4, S("a1234"));
+  test(S("abcde"), 1, 5, SV("12345"), 0, 5, S("a12345"));
+  test(S("abcde"), 1, 5, SV("12345"), 0, 6, S("a12345"));
+  test(S("abcde"), 1, 5, SV("12345"), 1, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("12345"), 1, 1, S("a2"));
+  test(S("abcde"), 1, 5, SV("12345"), 1, 2, S("a23"));
+  test(S("abcde"), 1, 5, SV("12345"), 1, 3, S("a234"));
+  test(S("abcde"), 1, 5, SV("12345"), 1, 4, S("a2345"));
+  test(S("abcde"), 1, 5, SV("12345"), 1, 5, S("a2345"));
+  test(S("abcde"), 1, 5, SV("12345"), 2, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("12345"), 2, 1, S("a3"));
+  test(S("abcde"), 1, 5, SV("12345"), 2, 2, S("a34"));
+  test(S("abcde"), 1, 5, SV("12345"), 2, 3, S("a345"));
+  test(S("abcde"), 1, 5, SV("12345"), 2, 4, S("a345"));
+  test(S("abcde"), 1, 5, SV("12345"), 4, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("12345"), 4, 1, S("a5"));
+  test(S("abcde"), 1, 5, SV("12345"), 4, 2, S("a5"));
+  test(S("abcde"), 1, 5, SV("12345"), 5, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("12345"), 5, 1, S("a"));
+  test(S("abcde"), 1, 5, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 0, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 0, 1, S("a1"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 0, 5, S("a12345"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 0, 9, S("a123456789"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 0, 10, S("a1234567890"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 0, 11, S("a1234567890"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 1, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 1, 1, S("a2"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 1, 4, S("a2345"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 1, 8, S("a23456789"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 1, 9, S("a234567890"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 1, 10, S("a234567890"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 5, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 5, 1, S("a6"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 5, 2, S("a67"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 5, 4, S("a6789"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 5, 5, S("a67890"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 5, 6, S("a67890"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 9, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 9, 1, S("a0"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 9, 2, S("a0"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 10, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 10, 1, S("a"));
+  test(S("abcde"), 1, 5, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 0, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 0, 1, S("a1"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 0, 10, S("a1234567890"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 0, 19, S("a1234567890123456789"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 0, 20, S("a12345678901234567890"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 0, 21, S("a12345678901234567890"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 1, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 1, 1, S("a2"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 1, 9, S("a234567890"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 1, 18, S("a234567890123456789"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 1, 19, S("a2345678901234567890"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 1, 20, S("a2345678901234567890"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 10, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 10, 1, S("a1"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test11()
-{
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 10, 5, S("a12345"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 10, 9, S("a123456789"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 10, 10, S("a1234567890"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 10, 11, S("a1234567890"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 19, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 19, 1, S("a0"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 19, 2, S("a0"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 20, 0, S("a"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 20, 1, S("a"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 2, 0, SV(""), 0, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV(""), 0, 1, S("abcde"));
-    test(S("abcde"), 2, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 2, 0, SV("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345"), 0, 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 0, 2, S("ab12cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 0, 4, S("ab1234cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 0, 5, S("ab12345cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 0, 6, S("ab12345cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345"), 1, 1, S("ab2cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 1, 2, S("ab23cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 1, 3, S("ab234cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 1, 4, S("ab2345cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 1, 5, S("ab2345cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345"), 2, 1, S("ab3cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 2, 2, S("ab34cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 2, 3, S("ab345cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 2, 4, S("ab345cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345"), 4, 1, S("ab5cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 4, 2, S("ab5cde"));
-    test(S("abcde"), 2, 0, SV("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 0, 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 0, 5, S("ab12345cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 0, 9, S("ab123456789cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 0, 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 0, 11, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 1, 1, S("ab2cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 1, 4, S("ab2345cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 1, 8, S("ab23456789cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 1, 9, S("ab234567890cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 1, 10, S("ab234567890cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 5, 1, S("ab6cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 5, 2, S("ab67cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 5, 4, S("ab6789cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 5, 5, S("ab67890cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 5, 6, S("ab67890cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 9, 1, S("ab0cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 9, 2, S("ab0cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 0, 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 0, 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 0, 19, S("ab1234567890123456789cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 0, 20, S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 0, 21, S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 1, 1, S("ab2cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 1, 9, S("ab234567890cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 1, 18, S("ab234567890123456789cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 1, 19, S("ab2345678901234567890cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 1, 20, S("ab2345678901234567890cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 10, 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 10, 5, S("ab12345cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 10, 9, S("ab123456789cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 10, 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 10, 11, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 19, 1, S("ab0cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 19, 2, S("ab0cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 2, 1, SV(""), 0, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV(""), 0, 1, S("abde"));
-    test(S("abcde"), 2, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 2, 1, SV("12345"), 0, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("12345"), 0, 1, S("ab1de"));
-    test(S("abcde"), 2, 1, SV("12345"), 0, 2, S("ab12de"));
-    test(S("abcde"), 2, 1, SV("12345"), 0, 4, S("ab1234de"));
-    test(S("abcde"), 2, 1, SV("12345"), 0, 5, S("ab12345de"));
-    test(S("abcde"), 2, 1, SV("12345"), 0, 6, S("ab12345de"));
-    test(S("abcde"), 2, 1, SV("12345"), 1, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("12345"), 1, 1, S("ab2de"));
-    test(S("abcde"), 2, 1, SV("12345"), 1, 2, S("ab23de"));
-    test(S("abcde"), 2, 1, SV("12345"), 1, 3, S("ab234de"));
-    test(S("abcde"), 2, 1, SV("12345"), 1, 4, S("ab2345de"));
-    test(S("abcde"), 2, 1, SV("12345"), 1, 5, S("ab2345de"));
-    test(S("abcde"), 2, 1, SV("12345"), 2, 0, S("abde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test11() {
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 10, 5, S("a12345"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 10, 9, S("a123456789"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 10, 10, S("a1234567890"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 10, 11, S("a1234567890"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 19, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 19, 1, S("a0"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 19, 2, S("a0"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 20, 0, S("a"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 20, 1, S("a"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 2, 0, SV(""), 0, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV(""), 0, 1, S("abcde"));
+  test(S("abcde"), 2, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 2, 0, SV("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345"), 0, 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 0, 2, S("ab12cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 0, 4, S("ab1234cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 0, 5, S("ab12345cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 0, 6, S("ab12345cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345"), 1, 1, S("ab2cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 1, 2, S("ab23cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 1, 3, S("ab234cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 1, 4, S("ab2345cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 1, 5, S("ab2345cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345"), 2, 1, S("ab3cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 2, 2, S("ab34cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 2, 3, S("ab345cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 2, 4, S("ab345cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345"), 4, 1, S("ab5cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 4, 2, S("ab5cde"));
+  test(S("abcde"), 2, 0, SV("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 0, 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 0, 5, S("ab12345cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 0, 9, S("ab123456789cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 0, 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 0, 11, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 1, 1, S("ab2cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 1, 4, S("ab2345cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 1, 8, S("ab23456789cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 1, 9, S("ab234567890cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 1, 10, S("ab234567890cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 5, 1, S("ab6cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 5, 2, S("ab67cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 5, 4, S("ab6789cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 5, 5, S("ab67890cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 5, 6, S("ab67890cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 9, 1, S("ab0cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 9, 2, S("ab0cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 0, 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 0, 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 0, 19, S("ab1234567890123456789cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 0, 20, S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 0, 21, S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 1, 1, S("ab2cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 1, 9, S("ab234567890cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 1, 18, S("ab234567890123456789cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 1, 19, S("ab2345678901234567890cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 1, 20, S("ab2345678901234567890cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 10, 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 10, 5, S("ab12345cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 10, 9, S("ab123456789cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 10, 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 10, 11, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 19, 1, S("ab0cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 19, 2, S("ab0cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 2, 1, SV(""), 0, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV(""), 0, 1, S("abde"));
+  test(S("abcde"), 2, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 2, 1, SV("12345"), 0, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("12345"), 0, 1, S("ab1de"));
+  test(S("abcde"), 2, 1, SV("12345"), 0, 2, S("ab12de"));
+  test(S("abcde"), 2, 1, SV("12345"), 0, 4, S("ab1234de"));
+  test(S("abcde"), 2, 1, SV("12345"), 0, 5, S("ab12345de"));
+  test(S("abcde"), 2, 1, SV("12345"), 0, 6, S("ab12345de"));
+  test(S("abcde"), 2, 1, SV("12345"), 1, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("12345"), 1, 1, S("ab2de"));
+  test(S("abcde"), 2, 1, SV("12345"), 1, 2, S("ab23de"));
+  test(S("abcde"), 2, 1, SV("12345"), 1, 3, S("ab234de"));
+  test(S("abcde"), 2, 1, SV("12345"), 1, 4, S("ab2345de"));
+  test(S("abcde"), 2, 1, SV("12345"), 1, 5, S("ab2345de"));
+  test(S("abcde"), 2, 1, SV("12345"), 2, 0, S("abde"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test12()
-{
-    test(S("abcde"), 2, 1, SV("12345"), 2, 1, S("ab3de"));
-    test(S("abcde"), 2, 1, SV("12345"), 2, 2, S("ab34de"));
-    test(S("abcde"), 2, 1, SV("12345"), 2, 3, S("ab345de"));
-    test(S("abcde"), 2, 1, SV("12345"), 2, 4, S("ab345de"));
-    test(S("abcde"), 2, 1, SV("12345"), 4, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("12345"), 4, 1, S("ab5de"));
-    test(S("abcde"), 2, 1, SV("12345"), 4, 2, S("ab5de"));
-    test(S("abcde"), 2, 1, SV("12345"), 5, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("12345"), 5, 1, S("abde"));
-    test(S("abcde"), 2, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 0, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 0, 1, S("ab1de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 0, 5, S("ab12345de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 0, 9, S("ab123456789de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 0, 10, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 0, 11, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 1, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 1, 1, S("ab2de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 1, 4, S("ab2345de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 1, 8, S("ab23456789de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 1, 9, S("ab234567890de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 1, 10, S("ab234567890de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 5, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 5, 1, S("ab6de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 5, 2, S("ab67de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 5, 4, S("ab6789de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 5, 5, S("ab67890de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 5, 6, S("ab67890de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 9, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 9, 1, S("ab0de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 9, 2, S("ab0de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 10, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 10, 1, S("abde"));
-    test(S("abcde"), 2, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 0, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 0, 1, S("ab1de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 0, 10, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 0, 19, S("ab1234567890123456789de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 0, 20, S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 0, 21, S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 1, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 1, 1, S("ab2de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 1, 9, S("ab234567890de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 1, 18, S("ab234567890123456789de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 1, 19, S("ab2345678901234567890de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 1, 20, S("ab2345678901234567890de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 10, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 10, 1, S("ab1de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 10, 5, S("ab12345de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 10, 9, S("ab123456789de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 10, 10, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 10, 11, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 19, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 19, 1, S("ab0de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 19, 2, S("ab0de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 20, 0, S("abde"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 20, 1, S("abde"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 2, 2, SV(""), 0, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV(""), 0, 1, S("abe"));
-    test(S("abcde"), 2, 2, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 2, 2, SV("12345"), 0, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("12345"), 0, 1, S("ab1e"));
-    test(S("abcde"), 2, 2, SV("12345"), 0, 2, S("ab12e"));
-    test(S("abcde"), 2, 2, SV("12345"), 0, 4, S("ab1234e"));
-    test(S("abcde"), 2, 2, SV("12345"), 0, 5, S("ab12345e"));
-    test(S("abcde"), 2, 2, SV("12345"), 0, 6, S("ab12345e"));
-    test(S("abcde"), 2, 2, SV("12345"), 1, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("12345"), 1, 1, S("ab2e"));
-    test(S("abcde"), 2, 2, SV("12345"), 1, 2, S("ab23e"));
-    test(S("abcde"), 2, 2, SV("12345"), 1, 3, S("ab234e"));
-    test(S("abcde"), 2, 2, SV("12345"), 1, 4, S("ab2345e"));
-    test(S("abcde"), 2, 2, SV("12345"), 1, 5, S("ab2345e"));
-    test(S("abcde"), 2, 2, SV("12345"), 2, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("12345"), 2, 1, S("ab3e"));
-    test(S("abcde"), 2, 2, SV("12345"), 2, 2, S("ab34e"));
-    test(S("abcde"), 2, 2, SV("12345"), 2, 3, S("ab345e"));
-    test(S("abcde"), 2, 2, SV("12345"), 2, 4, S("ab345e"));
-    test(S("abcde"), 2, 2, SV("12345"), 4, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("12345"), 4, 1, S("ab5e"));
-    test(S("abcde"), 2, 2, SV("12345"), 4, 2, S("ab5e"));
-    test(S("abcde"), 2, 2, SV("12345"), 5, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("12345"), 5, 1, S("abe"));
-    test(S("abcde"), 2, 2, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 0, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 0, 1, S("ab1e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 0, 5, S("ab12345e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 0, 9, S("ab123456789e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 0, 10, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 0, 11, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 1, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 1, 1, S("ab2e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 1, 4, S("ab2345e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 1, 8, S("ab23456789e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 1, 9, S("ab234567890e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 1, 10, S("ab234567890e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 5, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 5, 1, S("ab6e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 5, 2, S("ab67e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 5, 4, S("ab6789e"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test12() {
+  test(S("abcde"), 2, 1, SV("12345"), 2, 1, S("ab3de"));
+  test(S("abcde"), 2, 1, SV("12345"), 2, 2, S("ab34de"));
+  test(S("abcde"), 2, 1, SV("12345"), 2, 3, S("ab345de"));
+  test(S("abcde"), 2, 1, SV("12345"), 2, 4, S("ab345de"));
+  test(S("abcde"), 2, 1, SV("12345"), 4, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("12345"), 4, 1, S("ab5de"));
+  test(S("abcde"), 2, 1, SV("12345"), 4, 2, S("ab5de"));
+  test(S("abcde"), 2, 1, SV("12345"), 5, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("12345"), 5, 1, S("abde"));
+  test(S("abcde"), 2, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 0, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 0, 1, S("ab1de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 0, 5, S("ab12345de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 0, 9, S("ab123456789de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 0, 10, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 0, 11, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 1, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 1, 1, S("ab2de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 1, 4, S("ab2345de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 1, 8, S("ab23456789de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 1, 9, S("ab234567890de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 1, 10, S("ab234567890de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 5, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 5, 1, S("ab6de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 5, 2, S("ab67de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 5, 4, S("ab6789de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 5, 5, S("ab67890de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 5, 6, S("ab67890de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 9, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 9, 1, S("ab0de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 9, 2, S("ab0de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 10, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 10, 1, S("abde"));
+  test(S("abcde"), 2, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 0, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 0, 1, S("ab1de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 0, 10, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 0, 19, S("ab1234567890123456789de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 0, 20, S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 0, 21, S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 1, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 1, 1, S("ab2de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 1, 9, S("ab234567890de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 1, 18, S("ab234567890123456789de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 1, 19, S("ab2345678901234567890de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 1, 20, S("ab2345678901234567890de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 10, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 10, 1, S("ab1de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 10, 5, S("ab12345de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 10, 9, S("ab123456789de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 10, 10, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 10, 11, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 19, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 19, 1, S("ab0de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 19, 2, S("ab0de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 20, 0, S("abde"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 20, 1, S("abde"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 2, 2, SV(""), 0, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV(""), 0, 1, S("abe"));
+  test(S("abcde"), 2, 2, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 2, 2, SV("12345"), 0, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("12345"), 0, 1, S("ab1e"));
+  test(S("abcde"), 2, 2, SV("12345"), 0, 2, S("ab12e"));
+  test(S("abcde"), 2, 2, SV("12345"), 0, 4, S("ab1234e"));
+  test(S("abcde"), 2, 2, SV("12345"), 0, 5, S("ab12345e"));
+  test(S("abcde"), 2, 2, SV("12345"), 0, 6, S("ab12345e"));
+  test(S("abcde"), 2, 2, SV("12345"), 1, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("12345"), 1, 1, S("ab2e"));
+  test(S("abcde"), 2, 2, SV("12345"), 1, 2, S("ab23e"));
+  test(S("abcde"), 2, 2, SV("12345"), 1, 3, S("ab234e"));
+  test(S("abcde"), 2, 2, SV("12345"), 1, 4, S("ab2345e"));
+  test(S("abcde"), 2, 2, SV("12345"), 1, 5, S("ab2345e"));
+  test(S("abcde"), 2, 2, SV("12345"), 2, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("12345"), 2, 1, S("ab3e"));
+  test(S("abcde"), 2, 2, SV("12345"), 2, 2, S("ab34e"));
+  test(S("abcde"), 2, 2, SV("12345"), 2, 3, S("ab345e"));
+  test(S("abcde"), 2, 2, SV("12345"), 2, 4, S("ab345e"));
+  test(S("abcde"), 2, 2, SV("12345"), 4, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("12345"), 4, 1, S("ab5e"));
+  test(S("abcde"), 2, 2, SV("12345"), 4, 2, S("ab5e"));
+  test(S("abcde"), 2, 2, SV("12345"), 5, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("12345"), 5, 1, S("abe"));
+  test(S("abcde"), 2, 2, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 0, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 0, 1, S("ab1e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 0, 5, S("ab12345e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 0, 9, S("ab123456789e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 0, 10, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 0, 11, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 1, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 1, 1, S("ab2e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 1, 4, S("ab2345e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 1, 8, S("ab23456789e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 1, 9, S("ab234567890e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 1, 10, S("ab234567890e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 5, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 5, 1, S("ab6e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 5, 2, S("ab67e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 5, 4, S("ab6789e"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test13()
-{
-    test(S("abcde"), 2, 2, SV("1234567890"), 5, 5, S("ab67890e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 5, 6, S("ab67890e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 9, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 9, 1, S("ab0e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 9, 2, S("ab0e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 10, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 10, 1, S("abe"));
-    test(S("abcde"), 2, 2, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 0, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 0, 1, S("ab1e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 0, 10, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 0, 19, S("ab1234567890123456789e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 0, 20, S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 0, 21, S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 1, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 1, 1, S("ab2e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 1, 9, S("ab234567890e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 1, 18, S("ab234567890123456789e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 1, 19, S("ab2345678901234567890e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 1, 20, S("ab2345678901234567890e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 10, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 10, 1, S("ab1e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 10, 5, S("ab12345e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 10, 9, S("ab123456789e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 10, 10, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 10, 11, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 19, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 19, 1, S("ab0e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 19, 2, S("ab0e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 20, 0, S("abe"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 20, 1, S("abe"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 2, 3, SV(""), 0, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV(""), 0, 1, S("ab"));
-    test(S("abcde"), 2, 3, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 2, 3, SV("12345"), 0, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("12345"), 0, 1, S("ab1"));
-    test(S("abcde"), 2, 3, SV("12345"), 0, 2, S("ab12"));
-    test(S("abcde"), 2, 3, SV("12345"), 0, 4, S("ab1234"));
-    test(S("abcde"), 2, 3, SV("12345"), 0, 5, S("ab12345"));
-    test(S("abcde"), 2, 3, SV("12345"), 0, 6, S("ab12345"));
-    test(S("abcde"), 2, 3, SV("12345"), 1, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("12345"), 1, 1, S("ab2"));
-    test(S("abcde"), 2, 3, SV("12345"), 1, 2, S("ab23"));
-    test(S("abcde"), 2, 3, SV("12345"), 1, 3, S("ab234"));
-    test(S("abcde"), 2, 3, SV("12345"), 1, 4, S("ab2345"));
-    test(S("abcde"), 2, 3, SV("12345"), 1, 5, S("ab2345"));
-    test(S("abcde"), 2, 3, SV("12345"), 2, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("12345"), 2, 1, S("ab3"));
-    test(S("abcde"), 2, 3, SV("12345"), 2, 2, S("ab34"));
-    test(S("abcde"), 2, 3, SV("12345"), 2, 3, S("ab345"));
-    test(S("abcde"), 2, 3, SV("12345"), 2, 4, S("ab345"));
-    test(S("abcde"), 2, 3, SV("12345"), 4, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("12345"), 4, 1, S("ab5"));
-    test(S("abcde"), 2, 3, SV("12345"), 4, 2, S("ab5"));
-    test(S("abcde"), 2, 3, SV("12345"), 5, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("12345"), 5, 1, S("ab"));
-    test(S("abcde"), 2, 3, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 0, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 0, 1, S("ab1"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 0, 5, S("ab12345"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 0, 9, S("ab123456789"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 0, 10, S("ab1234567890"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 0, 11, S("ab1234567890"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 1, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 1, 1, S("ab2"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 1, 4, S("ab2345"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 1, 8, S("ab23456789"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 1, 9, S("ab234567890"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 1, 10, S("ab234567890"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 5, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 5, 1, S("ab6"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 5, 2, S("ab67"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 5, 4, S("ab6789"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 5, 5, S("ab67890"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 5, 6, S("ab67890"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 9, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 9, 1, S("ab0"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 9, 2, S("ab0"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 10, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 10, 1, S("ab"));
-    test(S("abcde"), 2, 3, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 0, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 0, 1, S("ab1"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 0, 10, S("ab1234567890"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 0, 19, S("ab1234567890123456789"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 0, 20, S("ab12345678901234567890"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 0, 21, S("ab12345678901234567890"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 1, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 1, 1, S("ab2"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 1, 9, S("ab234567890"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 1, 18, S("ab234567890123456789"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 1, 19, S("ab2345678901234567890"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 1, 20, S("ab2345678901234567890"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 10, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 10, 1, S("ab1"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 10, 5, S("ab12345"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 10, 9, S("ab123456789"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 10, 10, S("ab1234567890"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 10, 11, S("ab1234567890"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test13() {
+  test(S("abcde"), 2, 2, SV("1234567890"), 5, 5, S("ab67890e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 5, 6, S("ab67890e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 9, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 9, 1, S("ab0e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 9, 2, S("ab0e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 10, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 10, 1, S("abe"));
+  test(S("abcde"), 2, 2, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 0, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 0, 1, S("ab1e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 0, 10, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 0, 19, S("ab1234567890123456789e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 0, 20, S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 0, 21, S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 1, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 1, 1, S("ab2e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 1, 9, S("ab234567890e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 1, 18, S("ab234567890123456789e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 1, 19, S("ab2345678901234567890e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 1, 20, S("ab2345678901234567890e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 10, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 10, 1, S("ab1e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 10, 5, S("ab12345e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 10, 9, S("ab123456789e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 10, 10, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 10, 11, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 19, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 19, 1, S("ab0e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 19, 2, S("ab0e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 20, 0, S("abe"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 20, 1, S("abe"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 2, 3, SV(""), 0, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV(""), 0, 1, S("ab"));
+  test(S("abcde"), 2, 3, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 2, 3, SV("12345"), 0, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("12345"), 0, 1, S("ab1"));
+  test(S("abcde"), 2, 3, SV("12345"), 0, 2, S("ab12"));
+  test(S("abcde"), 2, 3, SV("12345"), 0, 4, S("ab1234"));
+  test(S("abcde"), 2, 3, SV("12345"), 0, 5, S("ab12345"));
+  test(S("abcde"), 2, 3, SV("12345"), 0, 6, S("ab12345"));
+  test(S("abcde"), 2, 3, SV("12345"), 1, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("12345"), 1, 1, S("ab2"));
+  test(S("abcde"), 2, 3, SV("12345"), 1, 2, S("ab23"));
+  test(S("abcde"), 2, 3, SV("12345"), 1, 3, S("ab234"));
+  test(S("abcde"), 2, 3, SV("12345"), 1, 4, S("ab2345"));
+  test(S("abcde"), 2, 3, SV("12345"), 1, 5, S("ab2345"));
+  test(S("abcde"), 2, 3, SV("12345"), 2, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("12345"), 2, 1, S("ab3"));
+  test(S("abcde"), 2, 3, SV("12345"), 2, 2, S("ab34"));
+  test(S("abcde"), 2, 3, SV("12345"), 2, 3, S("ab345"));
+  test(S("abcde"), 2, 3, SV("12345"), 2, 4, S("ab345"));
+  test(S("abcde"), 2, 3, SV("12345"), 4, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("12345"), 4, 1, S("ab5"));
+  test(S("abcde"), 2, 3, SV("12345"), 4, 2, S("ab5"));
+  test(S("abcde"), 2, 3, SV("12345"), 5, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("12345"), 5, 1, S("ab"));
+  test(S("abcde"), 2, 3, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 0, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 0, 1, S("ab1"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 0, 5, S("ab12345"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 0, 9, S("ab123456789"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 0, 10, S("ab1234567890"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 0, 11, S("ab1234567890"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 1, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 1, 1, S("ab2"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 1, 4, S("ab2345"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 1, 8, S("ab23456789"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 1, 9, S("ab234567890"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 1, 10, S("ab234567890"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 5, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 5, 1, S("ab6"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 5, 2, S("ab67"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 5, 4, S("ab6789"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 5, 5, S("ab67890"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 5, 6, S("ab67890"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 9, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 9, 1, S("ab0"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 9, 2, S("ab0"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 10, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 10, 1, S("ab"));
+  test(S("abcde"), 2, 3, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 0, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 0, 1, S("ab1"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 0, 10, S("ab1234567890"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 0, 19, S("ab1234567890123456789"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 0, 20, S("ab12345678901234567890"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 0, 21, S("ab12345678901234567890"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 1, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 1, 1, S("ab2"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 1, 9, S("ab234567890"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 1, 18, S("ab234567890123456789"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 1, 19, S("ab2345678901234567890"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 1, 20, S("ab2345678901234567890"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 10, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 10, 1, S("ab1"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 10, 5, S("ab12345"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 10, 9, S("ab123456789"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 10, 10, S("ab1234567890"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 10, 11, S("ab1234567890"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test14()
-{
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 19, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 19, 1, S("ab0"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 19, 2, S("ab0"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 20, 0, S("ab"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 20, 1, S("ab"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 2, 4, SV(""), 0, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV(""), 0, 1, S("ab"));
-    test(S("abcde"), 2, 4, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 2, 4, SV("12345"), 0, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("12345"), 0, 1, S("ab1"));
-    test(S("abcde"), 2, 4, SV("12345"), 0, 2, S("ab12"));
-    test(S("abcde"), 2, 4, SV("12345"), 0, 4, S("ab1234"));
-    test(S("abcde"), 2, 4, SV("12345"), 0, 5, S("ab12345"));
-    test(S("abcde"), 2, 4, SV("12345"), 0, 6, S("ab12345"));
-    test(S("abcde"), 2, 4, SV("12345"), 1, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("12345"), 1, 1, S("ab2"));
-    test(S("abcde"), 2, 4, SV("12345"), 1, 2, S("ab23"));
-    test(S("abcde"), 2, 4, SV("12345"), 1, 3, S("ab234"));
-    test(S("abcde"), 2, 4, SV("12345"), 1, 4, S("ab2345"));
-    test(S("abcde"), 2, 4, SV("12345"), 1, 5, S("ab2345"));
-    test(S("abcde"), 2, 4, SV("12345"), 2, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("12345"), 2, 1, S("ab3"));
-    test(S("abcde"), 2, 4, SV("12345"), 2, 2, S("ab34"));
-    test(S("abcde"), 2, 4, SV("12345"), 2, 3, S("ab345"));
-    test(S("abcde"), 2, 4, SV("12345"), 2, 4, S("ab345"));
-    test(S("abcde"), 2, 4, SV("12345"), 4, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("12345"), 4, 1, S("ab5"));
-    test(S("abcde"), 2, 4, SV("12345"), 4, 2, S("ab5"));
-    test(S("abcde"), 2, 4, SV("12345"), 5, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("12345"), 5, 1, S("ab"));
-    test(S("abcde"), 2, 4, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 0, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 0, 1, S("ab1"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 0, 5, S("ab12345"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 0, 9, S("ab123456789"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 0, 10, S("ab1234567890"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 0, 11, S("ab1234567890"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 1, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 1, 1, S("ab2"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 1, 4, S("ab2345"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 1, 8, S("ab23456789"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 1, 9, S("ab234567890"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 1, 10, S("ab234567890"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 5, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 5, 1, S("ab6"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 5, 2, S("ab67"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 5, 4, S("ab6789"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 5, 5, S("ab67890"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 5, 6, S("ab67890"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 9, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 9, 1, S("ab0"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 9, 2, S("ab0"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 10, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 10, 1, S("ab"));
-    test(S("abcde"), 2, 4, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 0, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 0, 1, S("ab1"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 0, 10, S("ab1234567890"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 0, 19, S("ab1234567890123456789"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 0, 20, S("ab12345678901234567890"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 0, 21, S("ab12345678901234567890"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 1, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 1, 1, S("ab2"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 1, 9, S("ab234567890"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 1, 18, S("ab234567890123456789"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 1, 19, S("ab2345678901234567890"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 1, 20, S("ab2345678901234567890"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 10, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 10, 1, S("ab1"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 10, 5, S("ab12345"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 10, 9, S("ab123456789"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 10, 10, S("ab1234567890"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 10, 11, S("ab1234567890"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 19, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 19, 1, S("ab0"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 19, 2, S("ab0"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 20, 0, S("ab"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 20, 1, S("ab"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 4, 0, SV(""), 0, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV(""), 0, 1, S("abcde"));
-    test(S("abcde"), 4, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 4, 0, SV("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345"), 0, 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, SV("12345"), 0, 2, S("abcd12e"));
-    test(S("abcde"), 4, 0, SV("12345"), 0, 4, S("abcd1234e"));
-    test(S("abcde"), 4, 0, SV("12345"), 0, 5, S("abcd12345e"));
-    test(S("abcde"), 4, 0, SV("12345"), 0, 6, S("abcd12345e"));
-    test(S("abcde"), 4, 0, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345"), 1, 1, S("abcd2e"));
-    test(S("abcde"), 4, 0, SV("12345"), 1, 2, S("abcd23e"));
-    test(S("abcde"), 4, 0, SV("12345"), 1, 3, S("abcd234e"));
-    test(S("abcde"), 4, 0, SV("12345"), 1, 4, S("abcd2345e"));
-    test(S("abcde"), 4, 0, SV("12345"), 1, 5, S("abcd2345e"));
-    test(S("abcde"), 4, 0, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345"), 2, 1, S("abcd3e"));
-    test(S("abcde"), 4, 0, SV("12345"), 2, 2, S("abcd34e"));
-    test(S("abcde"), 4, 0, SV("12345"), 2, 3, S("abcd345e"));
-    test(S("abcde"), 4, 0, SV("12345"), 2, 4, S("abcd345e"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test14() {
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 19, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 19, 1, S("ab0"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 19, 2, S("ab0"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 20, 0, S("ab"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 20, 1, S("ab"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 2, 4, SV(""), 0, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV(""), 0, 1, S("ab"));
+  test(S("abcde"), 2, 4, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 2, 4, SV("12345"), 0, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("12345"), 0, 1, S("ab1"));
+  test(S("abcde"), 2, 4, SV("12345"), 0, 2, S("ab12"));
+  test(S("abcde"), 2, 4, SV("12345"), 0, 4, S("ab1234"));
+  test(S("abcde"), 2, 4, SV("12345"), 0, 5, S("ab12345"));
+  test(S("abcde"), 2, 4, SV("12345"), 0, 6, S("ab12345"));
+  test(S("abcde"), 2, 4, SV("12345"), 1, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("12345"), 1, 1, S("ab2"));
+  test(S("abcde"), 2, 4, SV("12345"), 1, 2, S("ab23"));
+  test(S("abcde"), 2, 4, SV("12345"), 1, 3, S("ab234"));
+  test(S("abcde"), 2, 4, SV("12345"), 1, 4, S("ab2345"));
+  test(S("abcde"), 2, 4, SV("12345"), 1, 5, S("ab2345"));
+  test(S("abcde"), 2, 4, SV("12345"), 2, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("12345"), 2, 1, S("ab3"));
+  test(S("abcde"), 2, 4, SV("12345"), 2, 2, S("ab34"));
+  test(S("abcde"), 2, 4, SV("12345"), 2, 3, S("ab345"));
+  test(S("abcde"), 2, 4, SV("12345"), 2, 4, S("ab345"));
+  test(S("abcde"), 2, 4, SV("12345"), 4, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("12345"), 4, 1, S("ab5"));
+  test(S("abcde"), 2, 4, SV("12345"), 4, 2, S("ab5"));
+  test(S("abcde"), 2, 4, SV("12345"), 5, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("12345"), 5, 1, S("ab"));
+  test(S("abcde"), 2, 4, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 0, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 0, 1, S("ab1"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 0, 5, S("ab12345"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 0, 9, S("ab123456789"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 0, 10, S("ab1234567890"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 0, 11, S("ab1234567890"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 1, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 1, 1, S("ab2"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 1, 4, S("ab2345"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 1, 8, S("ab23456789"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 1, 9, S("ab234567890"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 1, 10, S("ab234567890"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 5, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 5, 1, S("ab6"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 5, 2, S("ab67"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 5, 4, S("ab6789"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 5, 5, S("ab67890"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 5, 6, S("ab67890"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 9, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 9, 1, S("ab0"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 9, 2, S("ab0"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 10, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 10, 1, S("ab"));
+  test(S("abcde"), 2, 4, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 0, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 0, 1, S("ab1"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 0, 10, S("ab1234567890"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 0, 19, S("ab1234567890123456789"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 0, 20, S("ab12345678901234567890"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 0, 21, S("ab12345678901234567890"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 1, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 1, 1, S("ab2"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 1, 9, S("ab234567890"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 1, 18, S("ab234567890123456789"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 1, 19, S("ab2345678901234567890"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 1, 20, S("ab2345678901234567890"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 10, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 10, 1, S("ab1"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 10, 5, S("ab12345"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 10, 9, S("ab123456789"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 10, 10, S("ab1234567890"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 10, 11, S("ab1234567890"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 19, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 19, 1, S("ab0"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 19, 2, S("ab0"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 20, 0, S("ab"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 20, 1, S("ab"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 4, 0, SV(""), 0, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV(""), 0, 1, S("abcde"));
+  test(S("abcde"), 4, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 4, 0, SV("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345"), 0, 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, SV("12345"), 0, 2, S("abcd12e"));
+  test(S("abcde"), 4, 0, SV("12345"), 0, 4, S("abcd1234e"));
+  test(S("abcde"), 4, 0, SV("12345"), 0, 5, S("abcd12345e"));
+  test(S("abcde"), 4, 0, SV("12345"), 0, 6, S("abcd12345e"));
+  test(S("abcde"), 4, 0, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345"), 1, 1, S("abcd2e"));
+  test(S("abcde"), 4, 0, SV("12345"), 1, 2, S("abcd23e"));
+  test(S("abcde"), 4, 0, SV("12345"), 1, 3, S("abcd234e"));
+  test(S("abcde"), 4, 0, SV("12345"), 1, 4, S("abcd2345e"));
+  test(S("abcde"), 4, 0, SV("12345"), 1, 5, S("abcd2345e"));
+  test(S("abcde"), 4, 0, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345"), 2, 1, S("abcd3e"));
+  test(S("abcde"), 4, 0, SV("12345"), 2, 2, S("abcd34e"));
+  test(S("abcde"), 4, 0, SV("12345"), 2, 3, S("abcd345e"));
+  test(S("abcde"), 4, 0, SV("12345"), 2, 4, S("abcd345e"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test15()
-{
-    test(S("abcde"), 4, 0, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345"), 4, 1, S("abcd5e"));
-    test(S("abcde"), 4, 0, SV("12345"), 4, 2, S("abcd5e"));
-    test(S("abcde"), 4, 0, SV("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 0, 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 0, 5, S("abcd12345e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 0, 9, S("abcd123456789e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 0, 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 0, 11, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 1, 1, S("abcd2e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 1, 4, S("abcd2345e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 1, 8, S("abcd23456789e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 1, 9, S("abcd234567890e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 1, 10, S("abcd234567890e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 5, 1, S("abcd6e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 5, 2, S("abcd67e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 5, 4, S("abcd6789e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 5, 5, S("abcd67890e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 5, 6, S("abcd67890e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 9, 1, S("abcd0e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 9, 2, S("abcd0e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 4, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 0, 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 0, 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 0, 19, S("abcd1234567890123456789e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 0, 20, S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 0, 21, S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 1, 1, S("abcd2e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 1, 9, S("abcd234567890e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 1, 18, S("abcd234567890123456789e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 1, 19, S("abcd2345678901234567890e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 1, 20, S("abcd2345678901234567890e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 10, 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 10, 5, S("abcd12345e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 10, 9, S("abcd123456789e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 10, 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 10, 11, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 19, 1, S("abcd0e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 19, 2, S("abcd0e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 4, 1, SV(""), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV(""), 0, 1, S("abcd"));
-    test(S("abcde"), 4, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 4, 1, SV("12345"), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345"), 0, 1, S("abcd1"));
-    test(S("abcde"), 4, 1, SV("12345"), 0, 2, S("abcd12"));
-    test(S("abcde"), 4, 1, SV("12345"), 0, 4, S("abcd1234"));
-    test(S("abcde"), 4, 1, SV("12345"), 0, 5, S("abcd12345"));
-    test(S("abcde"), 4, 1, SV("12345"), 0, 6, S("abcd12345"));
-    test(S("abcde"), 4, 1, SV("12345"), 1, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345"), 1, 1, S("abcd2"));
-    test(S("abcde"), 4, 1, SV("12345"), 1, 2, S("abcd23"));
-    test(S("abcde"), 4, 1, SV("12345"), 1, 3, S("abcd234"));
-    test(S("abcde"), 4, 1, SV("12345"), 1, 4, S("abcd2345"));
-    test(S("abcde"), 4, 1, SV("12345"), 1, 5, S("abcd2345"));
-    test(S("abcde"), 4, 1, SV("12345"), 2, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345"), 2, 1, S("abcd3"));
-    test(S("abcde"), 4, 1, SV("12345"), 2, 2, S("abcd34"));
-    test(S("abcde"), 4, 1, SV("12345"), 2, 3, S("abcd345"));
-    test(S("abcde"), 4, 1, SV("12345"), 2, 4, S("abcd345"));
-    test(S("abcde"), 4, 1, SV("12345"), 4, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345"), 4, 1, S("abcd5"));
-    test(S("abcde"), 4, 1, SV("12345"), 4, 2, S("abcd5"));
-    test(S("abcde"), 4, 1, SV("12345"), 5, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345"), 5, 1, S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 0, 1, S("abcd1"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 0, 5, S("abcd12345"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 0, 9, S("abcd123456789"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 0, 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 0, 11, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 1, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 1, 1, S("abcd2"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 1, 4, S("abcd2345"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 1, 8, S("abcd23456789"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 1, 9, S("abcd234567890"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 1, 10, S("abcd234567890"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 5, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 5, 1, S("abcd6"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 5, 2, S("abcd67"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 5, 4, S("abcd6789"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 5, 5, S("abcd67890"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 5, 6, S("abcd67890"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 9, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 9, 1, S("abcd0"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test15() {
+  test(S("abcde"), 4, 0, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345"), 4, 1, S("abcd5e"));
+  test(S("abcde"), 4, 0, SV("12345"), 4, 2, S("abcd5e"));
+  test(S("abcde"), 4, 0, SV("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 0, 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 0, 5, S("abcd12345e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 0, 9, S("abcd123456789e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 0, 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 0, 11, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 1, 1, S("abcd2e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 1, 4, S("abcd2345e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 1, 8, S("abcd23456789e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 1, 9, S("abcd234567890e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 1, 10, S("abcd234567890e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 5, 1, S("abcd6e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 5, 2, S("abcd67e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 5, 4, S("abcd6789e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 5, 5, S("abcd67890e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 5, 6, S("abcd67890e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 9, 1, S("abcd0e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 9, 2, S("abcd0e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 4, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 0, 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 0, 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 0, 19, S("abcd1234567890123456789e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 0, 20, S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 0, 21, S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 1, 1, S("abcd2e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 1, 9, S("abcd234567890e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 1, 18, S("abcd234567890123456789e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 1, 19, S("abcd2345678901234567890e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 1, 20, S("abcd2345678901234567890e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 10, 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 10, 5, S("abcd12345e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 10, 9, S("abcd123456789e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 10, 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 10, 11, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 19, 1, S("abcd0e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 19, 2, S("abcd0e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 4, 1, SV(""), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV(""), 0, 1, S("abcd"));
+  test(S("abcde"), 4, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 4, 1, SV("12345"), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345"), 0, 1, S("abcd1"));
+  test(S("abcde"), 4, 1, SV("12345"), 0, 2, S("abcd12"));
+  test(S("abcde"), 4, 1, SV("12345"), 0, 4, S("abcd1234"));
+  test(S("abcde"), 4, 1, SV("12345"), 0, 5, S("abcd12345"));
+  test(S("abcde"), 4, 1, SV("12345"), 0, 6, S("abcd12345"));
+  test(S("abcde"), 4, 1, SV("12345"), 1, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345"), 1, 1, S("abcd2"));
+  test(S("abcde"), 4, 1, SV("12345"), 1, 2, S("abcd23"));
+  test(S("abcde"), 4, 1, SV("12345"), 1, 3, S("abcd234"));
+  test(S("abcde"), 4, 1, SV("12345"), 1, 4, S("abcd2345"));
+  test(S("abcde"), 4, 1, SV("12345"), 1, 5, S("abcd2345"));
+  test(S("abcde"), 4, 1, SV("12345"), 2, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345"), 2, 1, S("abcd3"));
+  test(S("abcde"), 4, 1, SV("12345"), 2, 2, S("abcd34"));
+  test(S("abcde"), 4, 1, SV("12345"), 2, 3, S("abcd345"));
+  test(S("abcde"), 4, 1, SV("12345"), 2, 4, S("abcd345"));
+  test(S("abcde"), 4, 1, SV("12345"), 4, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345"), 4, 1, S("abcd5"));
+  test(S("abcde"), 4, 1, SV("12345"), 4, 2, S("abcd5"));
+  test(S("abcde"), 4, 1, SV("12345"), 5, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345"), 5, 1, S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 0, 1, S("abcd1"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 0, 5, S("abcd12345"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 0, 9, S("abcd123456789"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 0, 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 0, 11, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 1, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 1, 1, S("abcd2"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 1, 4, S("abcd2345"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 1, 8, S("abcd23456789"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 1, 9, S("abcd234567890"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 1, 10, S("abcd234567890"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 5, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 5, 1, S("abcd6"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 5, 2, S("abcd67"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 5, 4, S("abcd6789"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 5, 5, S("abcd67890"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 5, 6, S("abcd67890"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 9, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 9, 1, S("abcd0"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test16()
-{
-    test(S("abcde"), 4, 1, SV("1234567890"), 9, 2, S("abcd0"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 10, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 10, 1, S("abcd"));
-    test(S("abcde"), 4, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 0, 1, S("abcd1"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 0, 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 0, 19, S("abcd1234567890123456789"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 0, 20, S("abcd12345678901234567890"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 0, 21, S("abcd12345678901234567890"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 1, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 1, 1, S("abcd2"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 1, 9, S("abcd234567890"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 1, 18, S("abcd234567890123456789"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 1, 19, S("abcd2345678901234567890"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 1, 20, S("abcd2345678901234567890"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 10, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 10, 1, S("abcd1"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 10, 5, S("abcd12345"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 10, 9, S("abcd123456789"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 10, 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 10, 11, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 19, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 19, 1, S("abcd0"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 19, 2, S("abcd0"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 20, 0, S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 20, 1, S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 4, 2, SV(""), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV(""), 0, 1, S("abcd"));
-    test(S("abcde"), 4, 2, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 4, 2, SV("12345"), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("12345"), 0, 1, S("abcd1"));
-    test(S("abcde"), 4, 2, SV("12345"), 0, 2, S("abcd12"));
-    test(S("abcde"), 4, 2, SV("12345"), 0, 4, S("abcd1234"));
-    test(S("abcde"), 4, 2, SV("12345"), 0, 5, S("abcd12345"));
-    test(S("abcde"), 4, 2, SV("12345"), 0, 6, S("abcd12345"));
-    test(S("abcde"), 4, 2, SV("12345"), 1, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("12345"), 1, 1, S("abcd2"));
-    test(S("abcde"), 4, 2, SV("12345"), 1, 2, S("abcd23"));
-    test(S("abcde"), 4, 2, SV("12345"), 1, 3, S("abcd234"));
-    test(S("abcde"), 4, 2, SV("12345"), 1, 4, S("abcd2345"));
-    test(S("abcde"), 4, 2, SV("12345"), 1, 5, S("abcd2345"));
-    test(S("abcde"), 4, 2, SV("12345"), 2, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("12345"), 2, 1, S("abcd3"));
-    test(S("abcde"), 4, 2, SV("12345"), 2, 2, S("abcd34"));
-    test(S("abcde"), 4, 2, SV("12345"), 2, 3, S("abcd345"));
-    test(S("abcde"), 4, 2, SV("12345"), 2, 4, S("abcd345"));
-    test(S("abcde"), 4, 2, SV("12345"), 4, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("12345"), 4, 1, S("abcd5"));
-    test(S("abcde"), 4, 2, SV("12345"), 4, 2, S("abcd5"));
-    test(S("abcde"), 4, 2, SV("12345"), 5, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("12345"), 5, 1, S("abcd"));
-    test(S("abcde"), 4, 2, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 0, 1, S("abcd1"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 0, 5, S("abcd12345"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 0, 9, S("abcd123456789"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 0, 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 0, 11, S("abcd1234567890"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 1, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 1, 1, S("abcd2"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 1, 4, S("abcd2345"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 1, 8, S("abcd23456789"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 1, 9, S("abcd234567890"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 1, 10, S("abcd234567890"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 5, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 5, 1, S("abcd6"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 5, 2, S("abcd67"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 5, 4, S("abcd6789"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 5, 5, S("abcd67890"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 5, 6, S("abcd67890"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 9, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 9, 1, S("abcd0"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 9, 2, S("abcd0"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 10, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 10, 1, S("abcd"));
-    test(S("abcde"), 4, 2, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 0, 1, S("abcd1"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 0, 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 0, 19, S("abcd1234567890123456789"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 0, 20, S("abcd12345678901234567890"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 0, 21, S("abcd12345678901234567890"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 1, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 1, 1, S("abcd2"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 1, 9, S("abcd234567890"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 1, 18, S("abcd234567890123456789"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 1, 19, S("abcd2345678901234567890"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 1, 20, S("abcd2345678901234567890"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 10, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 10, 1, S("abcd1"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 10, 5, S("abcd12345"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 10, 9, S("abcd123456789"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 10, 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 10, 11, S("abcd1234567890"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 19, 0, S("abcd"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 19, 1, S("abcd0"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 19, 2, S("abcd0"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 20, 0, S("abcd"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test16() {
+  test(S("abcde"), 4, 1, SV("1234567890"), 9, 2, S("abcd0"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 10, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 10, 1, S("abcd"));
+  test(S("abcde"), 4, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 0, 1, S("abcd1"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 0, 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 0, 19, S("abcd1234567890123456789"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 0, 20, S("abcd12345678901234567890"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 0, 21, S("abcd12345678901234567890"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 1, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 1, 1, S("abcd2"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 1, 9, S("abcd234567890"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 1, 18, S("abcd234567890123456789"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 1, 19, S("abcd2345678901234567890"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 1, 20, S("abcd2345678901234567890"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 10, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 10, 1, S("abcd1"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 10, 5, S("abcd12345"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 10, 9, S("abcd123456789"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 10, 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 10, 11, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 19, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 19, 1, S("abcd0"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 19, 2, S("abcd0"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 20, 0, S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 20, 1, S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 4, 2, SV(""), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV(""), 0, 1, S("abcd"));
+  test(S("abcde"), 4, 2, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 4, 2, SV("12345"), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("12345"), 0, 1, S("abcd1"));
+  test(S("abcde"), 4, 2, SV("12345"), 0, 2, S("abcd12"));
+  test(S("abcde"), 4, 2, SV("12345"), 0, 4, S("abcd1234"));
+  test(S("abcde"), 4, 2, SV("12345"), 0, 5, S("abcd12345"));
+  test(S("abcde"), 4, 2, SV("12345"), 0, 6, S("abcd12345"));
+  test(S("abcde"), 4, 2, SV("12345"), 1, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("12345"), 1, 1, S("abcd2"));
+  test(S("abcde"), 4, 2, SV("12345"), 1, 2, S("abcd23"));
+  test(S("abcde"), 4, 2, SV("12345"), 1, 3, S("abcd234"));
+  test(S("abcde"), 4, 2, SV("12345"), 1, 4, S("abcd2345"));
+  test(S("abcde"), 4, 2, SV("12345"), 1, 5, S("abcd2345"));
+  test(S("abcde"), 4, 2, SV("12345"), 2, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("12345"), 2, 1, S("abcd3"));
+  test(S("abcde"), 4, 2, SV("12345"), 2, 2, S("abcd34"));
+  test(S("abcde"), 4, 2, SV("12345"), 2, 3, S("abcd345"));
+  test(S("abcde"), 4, 2, SV("12345"), 2, 4, S("abcd345"));
+  test(S("abcde"), 4, 2, SV("12345"), 4, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("12345"), 4, 1, S("abcd5"));
+  test(S("abcde"), 4, 2, SV("12345"), 4, 2, S("abcd5"));
+  test(S("abcde"), 4, 2, SV("12345"), 5, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("12345"), 5, 1, S("abcd"));
+  test(S("abcde"), 4, 2, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 0, 1, S("abcd1"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 0, 5, S("abcd12345"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 0, 9, S("abcd123456789"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 0, 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 0, 11, S("abcd1234567890"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 1, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 1, 1, S("abcd2"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 1, 4, S("abcd2345"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 1, 8, S("abcd23456789"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 1, 9, S("abcd234567890"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 1, 10, S("abcd234567890"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 5, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 5, 1, S("abcd6"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 5, 2, S("abcd67"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 5, 4, S("abcd6789"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 5, 5, S("abcd67890"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 5, 6, S("abcd67890"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 9, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 9, 1, S("abcd0"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 9, 2, S("abcd0"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 10, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 10, 1, S("abcd"));
+  test(S("abcde"), 4, 2, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 0, 1, S("abcd1"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 0, 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 0, 19, S("abcd1234567890123456789"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 0, 20, S("abcd12345678901234567890"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 0, 21, S("abcd12345678901234567890"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 1, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 1, 1, S("abcd2"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 1, 9, S("abcd234567890"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 1, 18, S("abcd234567890123456789"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 1, 19, S("abcd2345678901234567890"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 1, 20, S("abcd2345678901234567890"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 10, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 10, 1, S("abcd1"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 10, 5, S("abcd12345"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 10, 9, S("abcd123456789"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 10, 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 10, 11, S("abcd1234567890"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 19, 0, S("abcd"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 19, 1, S("abcd0"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 19, 2, S("abcd0"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 20, 0, S("abcd"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test17()
-{
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 20, 1, S("abcd"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 5, 0, SV(""), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV(""), 0, 1, S("abcde"));
-    test(S("abcde"), 5, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 5, 0, SV("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, 0, SV("12345"), 0, 2, S("abcde12"));
-    test(S("abcde"), 5, 0, SV("12345"), 0, 4, S("abcde1234"));
-    test(S("abcde"), 5, 0, SV("12345"), 0, 5, S("abcde12345"));
-    test(S("abcde"), 5, 0, SV("12345"), 0, 6, S("abcde12345"));
-    test(S("abcde"), 5, 0, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, 0, SV("12345"), 1, 2, S("abcde23"));
-    test(S("abcde"), 5, 0, SV("12345"), 1, 3, S("abcde234"));
-    test(S("abcde"), 5, 0, SV("12345"), 1, 4, S("abcde2345"));
-    test(S("abcde"), 5, 0, SV("12345"), 1, 5, S("abcde2345"));
-    test(S("abcde"), 5, 0, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345"), 2, 1, S("abcde3"));
-    test(S("abcde"), 5, 0, SV("12345"), 2, 2, S("abcde34"));
-    test(S("abcde"), 5, 0, SV("12345"), 2, 3, S("abcde345"));
-    test(S("abcde"), 5, 0, SV("12345"), 2, 4, S("abcde345"));
-    test(S("abcde"), 5, 0, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345"), 4, 1, S("abcde5"));
-    test(S("abcde"), 5, 0, SV("12345"), 4, 2, S("abcde5"));
-    test(S("abcde"), 5, 0, SV("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 0, 5, S("abcde12345"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 0, 9, S("abcde123456789"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 0, 11, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 1, 4, S("abcde2345"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 1, 8, S("abcde23456789"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 1, 10, S("abcde234567890"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 5, 1, S("abcde6"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 5, 2, S("abcde67"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 5, 4, S("abcde6789"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 5, 5, S("abcde67890"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 5, 6, S("abcde67890"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 9, 1, S("abcde0"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 9, 2, S("abcde0"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 5, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 10, 1, S("abcde1"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 10, 5, S("abcde12345"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 10, 9, S("abcde123456789"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 10, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 10, 11, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 19, 1, S("abcde0"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 19, 2, S("abcde0"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 5, 1, SV(""), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV(""), 0, 1, S("abcde"));
-    test(S("abcde"), 5, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 5, 1, SV("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("12345"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, 1, SV("12345"), 0, 2, S("abcde12"));
-    test(S("abcde"), 5, 1, SV("12345"), 0, 4, S("abcde1234"));
-    test(S("abcde"), 5, 1, SV("12345"), 0, 5, S("abcde12345"));
-    test(S("abcde"), 5, 1, SV("12345"), 0, 6, S("abcde12345"));
-    test(S("abcde"), 5, 1, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("12345"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, 1, SV("12345"), 1, 2, S("abcde23"));
-    test(S("abcde"), 5, 1, SV("12345"), 1, 3, S("abcde234"));
-    test(S("abcde"), 5, 1, SV("12345"), 1, 4, S("abcde2345"));
-    test(S("abcde"), 5, 1, SV("12345"), 1, 5, S("abcde2345"));
-    test(S("abcde"), 5, 1, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("12345"), 2, 1, S("abcde3"));
-    test(S("abcde"), 5, 1, SV("12345"), 2, 2, S("abcde34"));
-    test(S("abcde"), 5, 1, SV("12345"), 2, 3, S("abcde345"));
-    test(S("abcde"), 5, 1, SV("12345"), 2, 4, S("abcde345"));
-    test(S("abcde"), 5, 1, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("12345"), 4, 1, S("abcde5"));
-    test(S("abcde"), 5, 1, SV("12345"), 4, 2, S("abcde5"));
-    test(S("abcde"), 5, 1, SV("12345"), 5, 0, S("abcde"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test17() {
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 20, 1, S("abcd"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 5, 0, SV(""), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV(""), 0, 1, S("abcde"));
+  test(S("abcde"), 5, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 5, 0, SV("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, 0, SV("12345"), 0, 2, S("abcde12"));
+  test(S("abcde"), 5, 0, SV("12345"), 0, 4, S("abcde1234"));
+  test(S("abcde"), 5, 0, SV("12345"), 0, 5, S("abcde12345"));
+  test(S("abcde"), 5, 0, SV("12345"), 0, 6, S("abcde12345"));
+  test(S("abcde"), 5, 0, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, 0, SV("12345"), 1, 2, S("abcde23"));
+  test(S("abcde"), 5, 0, SV("12345"), 1, 3, S("abcde234"));
+  test(S("abcde"), 5, 0, SV("12345"), 1, 4, S("abcde2345"));
+  test(S("abcde"), 5, 0, SV("12345"), 1, 5, S("abcde2345"));
+  test(S("abcde"), 5, 0, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345"), 2, 1, S("abcde3"));
+  test(S("abcde"), 5, 0, SV("12345"), 2, 2, S("abcde34"));
+  test(S("abcde"), 5, 0, SV("12345"), 2, 3, S("abcde345"));
+  test(S("abcde"), 5, 0, SV("12345"), 2, 4, S("abcde345"));
+  test(S("abcde"), 5, 0, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345"), 4, 1, S("abcde5"));
+  test(S("abcde"), 5, 0, SV("12345"), 4, 2, S("abcde5"));
+  test(S("abcde"), 5, 0, SV("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 0, 5, S("abcde12345"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 0, 9, S("abcde123456789"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 0, 11, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 1, 4, S("abcde2345"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 1, 8, S("abcde23456789"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 1, 10, S("abcde234567890"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 5, 1, S("abcde6"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 5, 2, S("abcde67"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 5, 4, S("abcde6789"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 5, 5, S("abcde67890"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 5, 6, S("abcde67890"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 9, 1, S("abcde0"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 9, 2, S("abcde0"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 5, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 10, 1, S("abcde1"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 10, 5, S("abcde12345"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 10, 9, S("abcde123456789"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 10, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 10, 11, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 19, 1, S("abcde0"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 19, 2, S("abcde0"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 5, 1, SV(""), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV(""), 0, 1, S("abcde"));
+  test(S("abcde"), 5, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 5, 1, SV("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("12345"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, 1, SV("12345"), 0, 2, S("abcde12"));
+  test(S("abcde"), 5, 1, SV("12345"), 0, 4, S("abcde1234"));
+  test(S("abcde"), 5, 1, SV("12345"), 0, 5, S("abcde12345"));
+  test(S("abcde"), 5, 1, SV("12345"), 0, 6, S("abcde12345"));
+  test(S("abcde"), 5, 1, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("12345"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, 1, SV("12345"), 1, 2, S("abcde23"));
+  test(S("abcde"), 5, 1, SV("12345"), 1, 3, S("abcde234"));
+  test(S("abcde"), 5, 1, SV("12345"), 1, 4, S("abcde2345"));
+  test(S("abcde"), 5, 1, SV("12345"), 1, 5, S("abcde2345"));
+  test(S("abcde"), 5, 1, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("12345"), 2, 1, S("abcde3"));
+  test(S("abcde"), 5, 1, SV("12345"), 2, 2, S("abcde34"));
+  test(S("abcde"), 5, 1, SV("12345"), 2, 3, S("abcde345"));
+  test(S("abcde"), 5, 1, SV("12345"), 2, 4, S("abcde345"));
+  test(S("abcde"), 5, 1, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("12345"), 4, 1, S("abcde5"));
+  test(S("abcde"), 5, 1, SV("12345"), 4, 2, S("abcde5"));
+  test(S("abcde"), 5, 1, SV("12345"), 5, 0, S("abcde"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test18()
-{
-    test(S("abcde"), 5, 1, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 5, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 0, 5, S("abcde12345"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 0, 9, S("abcde123456789"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 0, 11, S("abcde1234567890"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 1, 4, S("abcde2345"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 1, 8, S("abcde23456789"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 1, 10, S("abcde234567890"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 5, 1, S("abcde6"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 5, 2, S("abcde67"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 5, 4, S("abcde6789"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 5, 5, S("abcde67890"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 5, 6, S("abcde67890"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 9, 1, S("abcde0"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 9, 2, S("abcde0"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 5, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 10, 1, S("abcde1"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 10, 5, S("abcde12345"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 10, 9, S("abcde123456789"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 10, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 10, 11, S("abcde1234567890"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 19, 1, S("abcde0"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 19, 2, S("abcde0"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV(""), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV(""), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 0, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 0, 4, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 0, 5, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 0, 6, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 1, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 1, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 1, 3, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 1, 4, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 1, 5, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 2, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 2, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 2, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 2, 3, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 2, 4, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 4, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 4, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 4, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 5, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 5, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 0, 5, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 0, 9, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 0, 10, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 0, 11, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 1, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 1, 4, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 1, 8, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 1, 9, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 1, 10, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 5, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 5, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 5, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 5, 4, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 5, 5, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 5, 6, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 9, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 9, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 9, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 10, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 10, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), 11, 0, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test18() {
+  test(S("abcde"), 5, 1, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 5, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 0, 5, S("abcde12345"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 0, 9, S("abcde123456789"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 0, 11, S("abcde1234567890"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 1, 4, S("abcde2345"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 1, 8, S("abcde23456789"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 1, 10, S("abcde234567890"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 5, 1, S("abcde6"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 5, 2, S("abcde67"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 5, 4, S("abcde6789"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 5, 5, S("abcde67890"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 5, 6, S("abcde67890"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 9, 1, S("abcde0"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 9, 2, S("abcde0"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 5, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 10, 1, S("abcde1"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 10, 5, S("abcde12345"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 10, 9, S("abcde123456789"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 10, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 10, 11, S("abcde1234567890"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 19, 1, S("abcde0"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 19, 2, S("abcde0"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV(""), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV(""), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 0, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 0, 4, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 0, 5, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 0, 6, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 1, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 1, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 1, 3, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 1, 4, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 1, 5, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 2, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 2, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 2, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 2, 3, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 2, 4, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 4, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 4, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 4, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 5, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 5, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 0, 5, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 0, 9, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 0, 10, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 0, 11, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 1, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 1, 4, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 1, 8, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 1, 9, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 1, 10, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 5, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 5, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 5, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 5, 4, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 5, 5, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 5, 6, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 9, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 9, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 9, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 10, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 10, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), 11, 0, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test19()
-{
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 0, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 0, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 0, 2, S("12abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 0, 4, S("1234abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 0, 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 0, 6, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 1, 1, S("2abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 1, 2, S("23abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 1, 3, S("234abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 1, 4, S("2345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 1, 5, S("2345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 2, 1, S("3abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 2, 2, S("34abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 2, 3, S("345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 2, 4, S("345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 4, 1, S("5abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 4, 2, S("5abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 0, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 0, 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 0, 9, S("123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 0, 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 0, 11, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 1, 1, S("2abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 1, 4, S("2345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 1, 8, S("23456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 1, 9, S("234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 1, 10, S("234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 5, 1, S("6abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 5, 2, S("67abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 5, 4, S("6789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 5, 5, S("67890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 5, 6, S("67890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 9, 1, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 9, 2, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 0, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 0, 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 1, 1, S("2abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 1, 9, S("234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 1, 18, S("234567890123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 10, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 10, 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 10, 9, S("123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 10, 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 10, 11, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 19, 1, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 19, 2, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 1, SV(""), 0, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV(""), 0, 1, S("bcdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test19() {
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 0, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 0, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 0, 2, S("12abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 0, 4, S("1234abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 0, 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 0, 6, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 1, 1, S("2abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 1, 2, S("23abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 1, 3, S("234abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 1, 4, S("2345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 1, 5, S("2345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 2, 1, S("3abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 2, 2, S("34abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 2, 3, S("345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 2, 4, S("345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 4, 1, S("5abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 4, 2, S("5abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 0, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 0, 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 0, 9, S("123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 0, 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 0, 11, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 1, 1, S("2abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 1, 4, S("2345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 1, 8, S("23456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 1, 9, S("234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 1, 10, S("234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 5, 1, S("6abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 5, 2, S("67abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 5, 4, S("6789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 5, 5, S("67890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 5, 6, S("67890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 9, 1, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 9, 2, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 0, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 0, 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 1, 1, S("2abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 1, 9, S("234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 1, 18, S("234567890123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 10, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 10, 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 10, 9, S("123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 10, 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 10, 11, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 19, 1, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 19, 2, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 1, SV(""), 0, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV(""), 0, 1, S("bcdefghij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test20()
-{
-    test(S("abcdefghij"), 0, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 0, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 0, 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 0, 2, S("12bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 0, 4, S("1234bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 0, 5, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 0, 6, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 1, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 1, 1, S("2bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 1, 2, S("23bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 1, 3, S("234bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 1, 4, S("2345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 1, 5, S("2345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 2, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 2, 1, S("3bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 2, 2, S("34bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 2, 3, S("345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 2, 4, S("345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 4, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 4, 1, S("5bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 4, 2, S("5bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 5, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 5, 1, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 0, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 0, 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 0, 5, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 0, 9, S("123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 0, 10, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 0, 11, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 1, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 1, 1, S("2bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 1, 4, S("2345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 1, 8, S("23456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 1, 9, S("234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 1, 10, S("234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 5, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 5, 1, S("6bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 5, 2, S("67bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 5, 4, S("6789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 5, 5, S("67890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 5, 6, S("67890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 9, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 9, 1, S("0bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 9, 2, S("0bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 10, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 10, 1, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 0, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 0, 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 0, 10, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 0, 19, S("1234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 0, 20, S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 0, 21, S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 1, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 1, 1, S("2bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 1, 9, S("234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 1, 18, S("234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 1, 19, S("2345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 1, 20, S("2345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 10, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 10, 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 10, 5, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 10, 9, S("123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 10, 10, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 10, 11, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 19, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 19, 1, S("0bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 19, 2, S("0bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 20, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 20, 1, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 5, SV(""), 0, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV(""), 0, 1, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 0, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 0, 1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 0, 2, S("12fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 0, 4, S("1234fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 0, 5, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 0, 6, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 1, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 1, 1, S("2fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 1, 2, S("23fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 1, 3, S("234fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 1, 4, S("2345fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 1, 5, S("2345fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 2, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 2, 1, S("3fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 2, 2, S("34fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 2, 3, S("345fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 2, 4, S("345fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 4, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 4, 1, S("5fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 4, 2, S("5fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 5, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 5, 1, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 0, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 0, 1, S("1fghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test20() {
+  test(S("abcdefghij"), 0, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 0, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 0, 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 0, 2, S("12bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 0, 4, S("1234bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 0, 5, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 0, 6, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 1, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 1, 1, S("2bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 1, 2, S("23bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 1, 3, S("234bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 1, 4, S("2345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 1, 5, S("2345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 2, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 2, 1, S("3bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 2, 2, S("34bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 2, 3, S("345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 2, 4, S("345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 4, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 4, 1, S("5bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 4, 2, S("5bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 5, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 5, 1, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 0, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 0, 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 0, 5, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 0, 9, S("123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 0, 10, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 0, 11, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 1, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 1, 1, S("2bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 1, 4, S("2345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 1, 8, S("23456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 1, 9, S("234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 1, 10, S("234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 5, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 5, 1, S("6bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 5, 2, S("67bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 5, 4, S("6789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 5, 5, S("67890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 5, 6, S("67890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 9, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 9, 1, S("0bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 9, 2, S("0bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 10, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 10, 1, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 0, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 0, 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 0, 10, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 0, 19, S("1234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 0, 20, S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 0, 21, S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 1, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 1, 1, S("2bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 1, 9, S("234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 1, 18, S("234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 1, 19, S("2345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 1, 20, S("2345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 10, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 10, 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 10, 5, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 10, 9, S("123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 10, 10, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 10, 11, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 19, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 19, 1, S("0bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 19, 2, S("0bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 20, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 20, 1, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 5, SV(""), 0, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV(""), 0, 1, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 0, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 0, 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 0, 2, S("12fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 0, 4, S("1234fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 0, 5, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 0, 6, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 1, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 1, 1, S("2fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 1, 2, S("23fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 1, 3, S("234fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 1, 4, S("2345fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 1, 5, S("2345fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 2, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 2, 1, S("3fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 2, 2, S("34fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 2, 3, S("345fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 2, 4, S("345fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 4, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 4, 1, S("5fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 4, 2, S("5fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 5, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 5, 1, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 0, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 0, 1, S("1fghij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test21()
-{
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 0, 5, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 0, 9, S("123456789fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 0, 10, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 0, 11, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 1, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 1, 1, S("2fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 1, 4, S("2345fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 1, 8, S("23456789fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 1, 9, S("234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 1, 10, S("234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 5, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 5, 1, S("6fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 5, 2, S("67fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 5, 4, S("6789fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 5, 5, S("67890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 5, 6, S("67890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 9, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 9, 1, S("0fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 9, 2, S("0fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 10, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 10, 1, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 0, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 0, 1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 0, 10, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 0, 19, S("1234567890123456789fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 0, 20, S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 0, 21, S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 1, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 1, 1, S("2fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 1, 9, S("234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 1, 18, S("234567890123456789fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 1, 19, S("2345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 1, 20, S("2345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 10, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 10, 1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 10, 5, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 10, 9, S("123456789fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 10, 10, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 10, 11, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 19, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 19, 1, S("0fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 19, 2, S("0fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 20, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 20, 1, S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 9, SV(""), 0, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV(""), 0, 1, S("j"));
-    test(S("abcdefghij"), 0, 9, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 0, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 0, 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 0, 2, S("12j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 0, 4, S("1234j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 0, 5, S("12345j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 0, 6, S("12345j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 1, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 1, 1, S("2j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 1, 2, S("23j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 1, 3, S("234j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 1, 4, S("2345j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 1, 5, S("2345j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 2, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 2, 1, S("3j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 2, 2, S("34j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 2, 3, S("345j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 2, 4, S("345j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 4, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 4, 1, S("5j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 4, 2, S("5j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 5, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 5, 1, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 0, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 0, 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 0, 5, S("12345j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 0, 9, S("123456789j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 0, 10, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 0, 11, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 1, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 1, 1, S("2j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 1, 4, S("2345j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 1, 8, S("23456789j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 1, 9, S("234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 1, 10, S("234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 5, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 5, 1, S("6j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 5, 2, S("67j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 5, 4, S("6789j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 5, 5, S("67890j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 5, 6, S("67890j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 9, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 9, 1, S("0j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 9, 2, S("0j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 10, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 10, 1, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 0, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 0, 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 0, 10, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 0, 19, S("1234567890123456789j"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test21() {
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 0, 5, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 0, 9, S("123456789fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 0, 10, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 0, 11, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 1, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 1, 1, S("2fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 1, 4, S("2345fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 1, 8, S("23456789fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 1, 9, S("234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 1, 10, S("234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 5, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 5, 1, S("6fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 5, 2, S("67fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 5, 4, S("6789fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 5, 5, S("67890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 5, 6, S("67890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 9, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 9, 1, S("0fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 9, 2, S("0fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 10, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 10, 1, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 0, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 0, 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 0, 10, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 0, 19, S("1234567890123456789fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 0, 20, S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 0, 21, S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 1, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 1, 1, S("2fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 1, 9, S("234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 1, 18, S("234567890123456789fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 1, 19, S("2345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 1, 20, S("2345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 10, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 10, 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 10, 5, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 10, 9, S("123456789fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 10, 10, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 10, 11, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 19, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 19, 1, S("0fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 19, 2, S("0fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 20, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 20, 1, S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 9, SV(""), 0, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV(""), 0, 1, S("j"));
+  test(S("abcdefghij"), 0, 9, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 0, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 0, 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 0, 2, S("12j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 0, 4, S("1234j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 0, 5, S("12345j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 0, 6, S("12345j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 1, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 1, 1, S("2j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 1, 2, S("23j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 1, 3, S("234j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 1, 4, S("2345j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 1, 5, S("2345j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 2, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 2, 1, S("3j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 2, 2, S("34j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 2, 3, S("345j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 2, 4, S("345j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 4, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 4, 1, S("5j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 4, 2, S("5j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 5, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 5, 1, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 0, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 0, 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 0, 5, S("12345j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 0, 9, S("123456789j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 0, 10, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 0, 11, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 1, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 1, 1, S("2j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 1, 4, S("2345j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 1, 8, S("23456789j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 1, 9, S("234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 1, 10, S("234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 5, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 5, 1, S("6j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 5, 2, S("67j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 5, 4, S("6789j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 5, 5, S("67890j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 5, 6, S("67890j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 9, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 9, 1, S("0j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 9, 2, S("0j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 10, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 10, 1, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 0, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 0, 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 0, 10, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 0, 19, S("1234567890123456789j"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test22()
-{
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 0, 20, S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 0, 21, S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 1, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 1, 1, S("2j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 1, 9, S("234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 1, 18, S("234567890123456789j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 1, 19, S("2345678901234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 1, 20, S("2345678901234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 10, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 10, 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 10, 5, S("12345j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 10, 9, S("123456789j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 10, 10, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 10, 11, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 19, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 19, 1, S("0j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 19, 2, S("0j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 20, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 20, 1, S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 10, SV(""), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV(""), 0, 1, S(""));
-    test(S("abcdefghij"), 0, 10, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 0, 1, S("1"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 0, 2, S("12"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 0, 4, S("1234"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 0, 5, S("12345"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 0, 6, S("12345"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 1, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 1, 1, S("2"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 1, 2, S("23"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 1, 3, S("234"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 1, 4, S("2345"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 1, 5, S("2345"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 2, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 2, 1, S("3"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 2, 2, S("34"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 2, 3, S("345"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 2, 4, S("345"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 4, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 4, 1, S("5"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 4, 2, S("5"));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 5, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 5, 1, S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 0, 1, S("1"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 0, 5, S("12345"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 0, 9, S("123456789"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 0, 11, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 1, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 1, 1, S("2"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 1, 4, S("2345"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 1, 8, S("23456789"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 1, 10, S("234567890"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 5, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 5, 1, S("6"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 5, 2, S("67"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 5, 4, S("6789"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 5, 5, S("67890"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 5, 6, S("67890"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 9, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 9, 1, S("0"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 9, 2, S("0"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 10, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 10, 1, S(""));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 0, 1, S("1"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 1, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 1, 1, S("2"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 10, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 10, 1, S("1"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 10, 5, S("12345"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 10, 9, S("123456789"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 19, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 19, 1, S("0"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 19, 2, S("0"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 20, 0, S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 20, 1, S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 11, SV(""), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV(""), 0, 1, S(""));
-    test(S("abcdefghij"), 0, 11, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 0, 1, S("1"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 0, 2, S("12"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test22() {
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 0, 20, S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 0, 21, S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 1, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 1, 1, S("2j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 1, 9, S("234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 1, 18, S("234567890123456789j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 1, 19, S("2345678901234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 1, 20, S("2345678901234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 10, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 10, 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 10, 5, S("12345j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 10, 9, S("123456789j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 10, 10, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 10, 11, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 19, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 19, 1, S("0j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 19, 2, S("0j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 20, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 20, 1, S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 10, SV(""), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV(""), 0, 1, S(""));
+  test(S("abcdefghij"), 0, 10, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 0, 1, S("1"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 0, 2, S("12"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 0, 4, S("1234"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 0, 5, S("12345"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 0, 6, S("12345"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 1, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 1, 1, S("2"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 1, 2, S("23"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 1, 3, S("234"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 1, 4, S("2345"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 1, 5, S("2345"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 2, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 2, 1, S("3"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 2, 2, S("34"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 2, 3, S("345"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 2, 4, S("345"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 4, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 4, 1, S("5"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 4, 2, S("5"));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 5, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 5, 1, S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 0, 1, S("1"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 0, 5, S("12345"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 0, 9, S("123456789"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 0, 11, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 1, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 1, 1, S("2"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 1, 4, S("2345"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 1, 8, S("23456789"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 1, 10, S("234567890"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 5, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 5, 1, S("6"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 5, 2, S("67"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 5, 4, S("6789"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 5, 5, S("67890"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 5, 6, S("67890"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 9, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 9, 1, S("0"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 9, 2, S("0"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 10, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 10, 1, S(""));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 0, 1, S("1"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 1, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 1, 1, S("2"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 10, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 10, 1, S("1"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 10, 5, S("12345"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 10, 9, S("123456789"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 19, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 19, 1, S("0"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 19, 2, S("0"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 20, 0, S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 20, 1, S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 11, SV(""), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV(""), 0, 1, S(""));
+  test(S("abcdefghij"), 0, 11, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 0, 1, S("1"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 0, 2, S("12"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test23()
-{
-    test(S("abcdefghij"), 0, 11, SV("12345"), 0, 4, S("1234"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 0, 5, S("12345"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 0, 6, S("12345"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 1, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 1, 1, S("2"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 1, 2, S("23"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 1, 3, S("234"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 1, 4, S("2345"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 1, 5, S("2345"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 2, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 2, 1, S("3"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 2, 2, S("34"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 2, 3, S("345"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 2, 4, S("345"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 4, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 4, 1, S("5"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 4, 2, S("5"));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 5, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 5, 1, S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 0, 1, S("1"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 0, 5, S("12345"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 0, 9, S("123456789"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 0, 11, S("1234567890"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 1, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 1, 1, S("2"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 1, 4, S("2345"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 1, 8, S("23456789"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 1, 10, S("234567890"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 5, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 5, 1, S("6"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 5, 2, S("67"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 5, 4, S("6789"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 5, 5, S("67890"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 5, 6, S("67890"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 9, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 9, 1, S("0"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 9, 2, S("0"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 10, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 10, 1, S(""));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 0, 1, S("1"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 1, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 1, 1, S("2"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 10, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 10, 1, S("1"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 10, 5, S("12345"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 10, 9, S("123456789"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 19, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 19, 1, S("0"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 19, 2, S("0"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 20, 0, S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 20, 1, S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 0, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 0, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 0, 2, S("a12bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 0, 4, S("a1234bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 0, 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 0, 6, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 1, 1, S("a2bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 1, 2, S("a23bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 1, 3, S("a234bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 1, 4, S("a2345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 1, 5, S("a2345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 2, 1, S("a3bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 2, 2, S("a34bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 2, 3, S("a345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 2, 4, S("a345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 4, 1, S("a5bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 4, 2, S("a5bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 0, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 0, 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 0, 9, S("a123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 0, 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 0, 11, S("a1234567890bcdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test23() {
+  test(S("abcdefghij"), 0, 11, SV("12345"), 0, 4, S("1234"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 0, 5, S("12345"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 0, 6, S("12345"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 1, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 1, 1, S("2"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 1, 2, S("23"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 1, 3, S("234"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 1, 4, S("2345"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 1, 5, S("2345"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 2, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 2, 1, S("3"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 2, 2, S("34"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 2, 3, S("345"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 2, 4, S("345"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 4, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 4, 1, S("5"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 4, 2, S("5"));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 5, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 5, 1, S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 0, 1, S("1"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 0, 5, S("12345"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 0, 9, S("123456789"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 0, 11, S("1234567890"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 1, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 1, 1, S("2"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 1, 4, S("2345"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 1, 8, S("23456789"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 1, 10, S("234567890"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 5, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 5, 1, S("6"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 5, 2, S("67"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 5, 4, S("6789"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 5, 5, S("67890"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 5, 6, S("67890"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 9, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 9, 1, S("0"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 9, 2, S("0"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 10, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 10, 1, S(""));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 0, 1, S("1"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 1, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 1, 1, S("2"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 10, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 10, 1, S("1"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 10, 5, S("12345"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 10, 9, S("123456789"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 19, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 19, 1, S("0"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 19, 2, S("0"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 20, 0, S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 20, 1, S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 0, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 0, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 0, 2, S("a12bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 0, 4, S("a1234bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 0, 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 0, 6, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 1, 1, S("a2bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 1, 2, S("a23bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 1, 3, S("a234bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 1, 4, S("a2345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 1, 5, S("a2345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 2, 1, S("a3bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 2, 2, S("a34bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 2, 3, S("a345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 2, 4, S("a345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 4, 1, S("a5bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 4, 2, S("a5bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 0, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 0, 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 0, 9, S("a123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 0, 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 0, 11, S("a1234567890bcdefghij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test24()
-{
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 1, 1, S("a2bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 1, 4, S("a2345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 1, 8, S("a23456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 1, 9, S("a234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 1, 10, S("a234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 5, 1, S("a6bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 5, 2, S("a67bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 5, 4, S("a6789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 5, 5, S("a67890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 5, 6, S("a67890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 9, 1, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 9, 2, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 0, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 0, 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 1, 1, S("a2bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 1, 9, S("a234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 10, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 10, 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 10, 9, S("a123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 10, 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 10, 11, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 19, 1, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 19, 2, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 1, SV(""), 0, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV(""), 0, 1, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 0, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 0, 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 0, 2, S("a12cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 0, 4, S("a1234cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 0, 5, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 0, 6, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 1, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 1, 1, S("a2cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 1, 2, S("a23cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 1, 3, S("a234cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 1, 4, S("a2345cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 1, 5, S("a2345cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 2, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 2, 1, S("a3cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 2, 2, S("a34cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 2, 3, S("a345cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 2, 4, S("a345cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 4, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 4, 1, S("a5cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 4, 2, S("a5cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 5, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 5, 1, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 0, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 0, 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 0, 5, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 0, 9, S("a123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 0, 10, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 0, 11, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 1, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 1, 1, S("a2cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 1, 4, S("a2345cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 1, 8, S("a23456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 1, 9, S("a234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 1, 10, S("a234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 5, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 5, 1, S("a6cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 5, 2, S("a67cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 5, 4, S("a6789cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 5, 5, S("a67890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 5, 6, S("a67890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 9, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 9, 1, S("a0cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 9, 2, S("a0cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 10, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 10, 1, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 0, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 0, 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 0, 10, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 0, 19, S("a1234567890123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 0, 20, S("a12345678901234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 0, 21, S("a12345678901234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 1, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 1, 1, S("a2cdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test24() {
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 1, 1, S("a2bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 1, 4, S("a2345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 1, 8, S("a23456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 1, 9, S("a234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 1, 10, S("a234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 5, 1, S("a6bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 5, 2, S("a67bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 5, 4, S("a6789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 5, 5, S("a67890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 5, 6, S("a67890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 9, 1, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 9, 2, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 0, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 0, 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 1, 1, S("a2bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 1, 9, S("a234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 10, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 10, 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 10, 9, S("a123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 10, 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 10, 11, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 19, 1, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 19, 2, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 1, SV(""), 0, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV(""), 0, 1, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 0, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 0, 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 0, 2, S("a12cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 0, 4, S("a1234cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 0, 5, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 0, 6, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 1, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 1, 1, S("a2cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 1, 2, S("a23cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 1, 3, S("a234cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 1, 4, S("a2345cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 1, 5, S("a2345cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 2, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 2, 1, S("a3cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 2, 2, S("a34cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 2, 3, S("a345cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 2, 4, S("a345cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 4, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 4, 1, S("a5cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 4, 2, S("a5cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 5, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 5, 1, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 0, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 0, 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 0, 5, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 0, 9, S("a123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 0, 10, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 0, 11, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 1, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 1, 1, S("a2cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 1, 4, S("a2345cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 1, 8, S("a23456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 1, 9, S("a234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 1, 10, S("a234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 5, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 5, 1, S("a6cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 5, 2, S("a67cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 5, 4, S("a6789cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 5, 5, S("a67890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 5, 6, S("a67890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 9, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 9, 1, S("a0cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 9, 2, S("a0cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 10, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 10, 1, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 0, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 0, 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 0, 10, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 0, 19, S("a1234567890123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 0, 20, S("a12345678901234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 0, 21, S("a12345678901234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 1, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 1, 1, S("a2cdefghij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test25()
-{
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 1, 9, S("a234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 1, 18, S("a234567890123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 1, 19, S("a2345678901234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 1, 20, S("a2345678901234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 10, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 10, 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 10, 5, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 10, 9, S("a123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 10, 10, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 10, 11, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 19, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 19, 1, S("a0cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 19, 2, S("a0cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 20, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 20, 1, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 4, SV(""), 0, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV(""), 0, 1, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 0, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 0, 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 0, 2, S("a12fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 0, 4, S("a1234fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 0, 5, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 0, 6, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 1, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 1, 1, S("a2fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 1, 2, S("a23fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 1, 3, S("a234fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 1, 4, S("a2345fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 1, 5, S("a2345fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 2, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 2, 1, S("a3fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 2, 2, S("a34fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 2, 3, S("a345fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 2, 4, S("a345fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 4, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 4, 1, S("a5fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 4, 2, S("a5fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 5, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 5, 1, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 0, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 0, 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 0, 5, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 0, 9, S("a123456789fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 0, 10, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 0, 11, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 1, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 1, 1, S("a2fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 1, 4, S("a2345fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 1, 8, S("a23456789fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 1, 9, S("a234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 1, 10, S("a234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 5, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 5, 1, S("a6fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 5, 2, S("a67fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 5, 4, S("a6789fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 5, 5, S("a67890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 5, 6, S("a67890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 9, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 9, 1, S("a0fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 9, 2, S("a0fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 10, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 10, 1, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 0, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 0, 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 0, 10, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 0, 19, S("a1234567890123456789fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 0, 20, S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 0, 21, S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 1, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 1, 1, S("a2fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 1, 9, S("a234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 1, 18, S("a234567890123456789fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 1, 19, S("a2345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 1, 20, S("a2345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 10, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 10, 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 10, 5, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 10, 9, S("a123456789fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 10, 10, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 10, 11, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 19, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 19, 1, S("a0fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 19, 2, S("a0fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 20, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 20, 1, S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 8, SV(""), 0, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV(""), 0, 1, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 0, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 0, 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 0, 2, S("a12j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 0, 4, S("a1234j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 0, 5, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 0, 6, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 1, 0, S("aj"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test25() {
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 1, 9, S("a234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 1, 18, S("a234567890123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 1, 19, S("a2345678901234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 1, 20, S("a2345678901234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 10, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 10, 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 10, 5, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 10, 9, S("a123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 10, 10, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 10, 11, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 19, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 19, 1, S("a0cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 19, 2, S("a0cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 20, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 20, 1, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 4, SV(""), 0, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV(""), 0, 1, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 0, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 0, 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 0, 2, S("a12fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 0, 4, S("a1234fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 0, 5, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 0, 6, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 1, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 1, 1, S("a2fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 1, 2, S("a23fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 1, 3, S("a234fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 1, 4, S("a2345fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 1, 5, S("a2345fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 2, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 2, 1, S("a3fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 2, 2, S("a34fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 2, 3, S("a345fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 2, 4, S("a345fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 4, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 4, 1, S("a5fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 4, 2, S("a5fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 5, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 5, 1, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 0, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 0, 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 0, 5, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 0, 9, S("a123456789fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 0, 10, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 0, 11, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 1, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 1, 1, S("a2fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 1, 4, S("a2345fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 1, 8, S("a23456789fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 1, 9, S("a234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 1, 10, S("a234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 5, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 5, 1, S("a6fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 5, 2, S("a67fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 5, 4, S("a6789fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 5, 5, S("a67890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 5, 6, S("a67890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 9, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 9, 1, S("a0fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 9, 2, S("a0fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 10, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 10, 1, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 0, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 0, 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 0, 10, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 0, 19, S("a1234567890123456789fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 0, 20, S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 0, 21, S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 1, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 1, 1, S("a2fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 1, 9, S("a234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 1, 18, S("a234567890123456789fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 1, 19, S("a2345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 1, 20, S("a2345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 10, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 10, 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 10, 5, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 10, 9, S("a123456789fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 10, 10, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 10, 11, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 19, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 19, 1, S("a0fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 19, 2, S("a0fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 20, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 20, 1, S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 8, SV(""), 0, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV(""), 0, 1, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 0, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 0, 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 0, 2, S("a12j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 0, 4, S("a1234j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 0, 5, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 0, 6, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 1, 0, S("aj"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test26()
-{
-    test(S("abcdefghij"), 1, 8, SV("12345"), 1, 1, S("a2j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 1, 2, S("a23j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 1, 3, S("a234j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 1, 4, S("a2345j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 1, 5, S("a2345j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 2, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 2, 1, S("a3j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 2, 2, S("a34j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 2, 3, S("a345j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 2, 4, S("a345j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 4, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 4, 1, S("a5j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 4, 2, S("a5j"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 5, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 5, 1, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 0, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 0, 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 0, 5, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 0, 9, S("a123456789j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 0, 10, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 0, 11, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 1, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 1, 1, S("a2j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 1, 4, S("a2345j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 1, 8, S("a23456789j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 1, 9, S("a234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 1, 10, S("a234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 5, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 5, 1, S("a6j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 5, 2, S("a67j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 5, 4, S("a6789j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 5, 5, S("a67890j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 5, 6, S("a67890j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 9, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 9, 1, S("a0j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 9, 2, S("a0j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 10, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 10, 1, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 0, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 0, 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 0, 10, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 0, 19, S("a1234567890123456789j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 0, 20, S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 0, 21, S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 1, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 1, 1, S("a2j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 1, 9, S("a234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 1, 18, S("a234567890123456789j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 1, 19, S("a2345678901234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 1, 20, S("a2345678901234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 10, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 10, 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 10, 5, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 10, 9, S("a123456789j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 10, 10, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 10, 11, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 19, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 19, 1, S("a0j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 19, 2, S("a0j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 20, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 20, 1, S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 9, SV(""), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV(""), 0, 1, S("a"));
-    test(S("abcdefghij"), 1, 9, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 0, 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 0, 2, S("a12"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 0, 4, S("a1234"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 0, 5, S("a12345"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 0, 6, S("a12345"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 1, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 1, 1, S("a2"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 1, 2, S("a23"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 1, 3, S("a234"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 1, 4, S("a2345"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 1, 5, S("a2345"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 2, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 2, 1, S("a3"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 2, 2, S("a34"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 2, 3, S("a345"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 2, 4, S("a345"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 4, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 4, 1, S("a5"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 4, 2, S("a5"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 5, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 5, 1, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 0, 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 0, 5, S("a12345"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 0, 9, S("a123456789"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 0, 11, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 1, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 1, 1, S("a2"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 1, 4, S("a2345"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 1, 8, S("a23456789"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test26() {
+  test(S("abcdefghij"), 1, 8, SV("12345"), 1, 1, S("a2j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 1, 2, S("a23j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 1, 3, S("a234j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 1, 4, S("a2345j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 1, 5, S("a2345j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 2, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 2, 1, S("a3j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 2, 2, S("a34j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 2, 3, S("a345j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 2, 4, S("a345j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 4, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 4, 1, S("a5j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 4, 2, S("a5j"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 5, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 5, 1, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 0, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 0, 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 0, 5, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 0, 9, S("a123456789j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 0, 10, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 0, 11, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 1, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 1, 1, S("a2j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 1, 4, S("a2345j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 1, 8, S("a23456789j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 1, 9, S("a234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 1, 10, S("a234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 5, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 5, 1, S("a6j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 5, 2, S("a67j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 5, 4, S("a6789j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 5, 5, S("a67890j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 5, 6, S("a67890j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 9, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 9, 1, S("a0j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 9, 2, S("a0j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 10, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 10, 1, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 0, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 0, 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 0, 10, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 0, 19, S("a1234567890123456789j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 0, 20, S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 0, 21, S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 1, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 1, 1, S("a2j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 1, 9, S("a234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 1, 18, S("a234567890123456789j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 1, 19, S("a2345678901234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 1, 20, S("a2345678901234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 10, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 10, 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 10, 5, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 10, 9, S("a123456789j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 10, 10, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 10, 11, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 19, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 19, 1, S("a0j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 19, 2, S("a0j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 20, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 20, 1, S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 9, SV(""), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV(""), 0, 1, S("a"));
+  test(S("abcdefghij"), 1, 9, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 0, 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 0, 2, S("a12"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 0, 4, S("a1234"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 0, 5, S("a12345"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 0, 6, S("a12345"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 1, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 1, 1, S("a2"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 1, 2, S("a23"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 1, 3, S("a234"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 1, 4, S("a2345"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 1, 5, S("a2345"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 2, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 2, 1, S("a3"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 2, 2, S("a34"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 2, 3, S("a345"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 2, 4, S("a345"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 4, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 4, 1, S("a5"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 4, 2, S("a5"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 5, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 5, 1, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 0, 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 0, 5, S("a12345"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 0, 9, S("a123456789"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 0, 11, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 1, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 1, 1, S("a2"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 1, 4, S("a2345"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 1, 8, S("a23456789"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test27()
-{
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 1, 10, S("a234567890"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 5, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 5, 1, S("a6"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 5, 2, S("a67"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 5, 4, S("a6789"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 5, 5, S("a67890"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 5, 6, S("a67890"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 9, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 9, 1, S("a0"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 9, 2, S("a0"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 10, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 10, 1, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 0, 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 0, 19, S("a1234567890123456789"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 0, 20, S("a12345678901234567890"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 0, 21, S("a12345678901234567890"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 1, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 1, 1, S("a2"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 1, 18, S("a234567890123456789"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 1, 19, S("a2345678901234567890"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 1, 20, S("a2345678901234567890"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 10, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 10, 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 10, 5, S("a12345"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 10, 9, S("a123456789"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 10, 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 10, 11, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 19, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 19, 1, S("a0"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 19, 2, S("a0"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 20, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 20, 1, S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 10, SV(""), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV(""), 0, 1, S("a"));
-    test(S("abcdefghij"), 1, 10, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 0, 1, S("a1"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 0, 2, S("a12"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 0, 4, S("a1234"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 0, 5, S("a12345"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 0, 6, S("a12345"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 1, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 1, 1, S("a2"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 1, 2, S("a23"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 1, 3, S("a234"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 1, 4, S("a2345"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 1, 5, S("a2345"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 2, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 2, 1, S("a3"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 2, 2, S("a34"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 2, 3, S("a345"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 2, 4, S("a345"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 4, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 4, 1, S("a5"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 4, 2, S("a5"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 5, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 5, 1, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 0, 1, S("a1"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 0, 5, S("a12345"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 0, 9, S("a123456789"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 0, 11, S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 1, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 1, 1, S("a2"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 1, 4, S("a2345"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 1, 8, S("a23456789"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 1, 10, S("a234567890"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 5, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 5, 1, S("a6"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 5, 2, S("a67"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 5, 4, S("a6789"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 5, 5, S("a67890"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 5, 6, S("a67890"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 9, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 9, 1, S("a0"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 9, 2, S("a0"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 10, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 10, 1, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 0, 1, S("a1"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 0, 19, S("a1234567890123456789"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 0, 20, S("a12345678901234567890"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 0, 21, S("a12345678901234567890"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 1, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 1, 1, S("a2"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 1, 18, S("a234567890123456789"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 1, 19, S("a2345678901234567890"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 1, 20, S("a2345678901234567890"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test27() {
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 1, 10, S("a234567890"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 5, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 5, 1, S("a6"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 5, 2, S("a67"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 5, 4, S("a6789"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 5, 5, S("a67890"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 5, 6, S("a67890"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 9, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 9, 1, S("a0"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 9, 2, S("a0"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 10, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 10, 1, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 0, 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 0, 19, S("a1234567890123456789"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 0, 20, S("a12345678901234567890"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 0, 21, S("a12345678901234567890"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 1, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 1, 1, S("a2"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 1, 18, S("a234567890123456789"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 1, 19, S("a2345678901234567890"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 1, 20, S("a2345678901234567890"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 10, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 10, 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 10, 5, S("a12345"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 10, 9, S("a123456789"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 10, 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 10, 11, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 19, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 19, 1, S("a0"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 19, 2, S("a0"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 20, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 20, 1, S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 10, SV(""), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV(""), 0, 1, S("a"));
+  test(S("abcdefghij"), 1, 10, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 0, 1, S("a1"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 0, 2, S("a12"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 0, 4, S("a1234"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 0, 5, S("a12345"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 0, 6, S("a12345"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 1, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 1, 1, S("a2"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 1, 2, S("a23"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 1, 3, S("a234"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 1, 4, S("a2345"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 1, 5, S("a2345"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 2, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 2, 1, S("a3"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 2, 2, S("a34"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 2, 3, S("a345"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 2, 4, S("a345"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 4, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 4, 1, S("a5"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 4, 2, S("a5"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 5, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 5, 1, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 0, 1, S("a1"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 0, 5, S("a12345"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 0, 9, S("a123456789"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 0, 11, S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 1, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 1, 1, S("a2"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 1, 4, S("a2345"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 1, 8, S("a23456789"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 1, 10, S("a234567890"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 5, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 5, 1, S("a6"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 5, 2, S("a67"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 5, 4, S("a6789"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 5, 5, S("a67890"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 5, 6, S("a67890"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 9, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 9, 1, S("a0"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 9, 2, S("a0"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 10, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 10, 1, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 0, 1, S("a1"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 0, 19, S("a1234567890123456789"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 0, 20, S("a12345678901234567890"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 0, 21, S("a12345678901234567890"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 1, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 1, 1, S("a2"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 1, 18, S("a234567890123456789"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 1, 19, S("a2345678901234567890"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 1, 20, S("a2345678901234567890"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test28()
-{
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 10, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 10, 1, S("a1"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 10, 5, S("a12345"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 10, 9, S("a123456789"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 10, 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 10, 11, S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 19, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 19, 1, S("a0"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 19, 2, S("a0"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 20, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 20, 1, S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 0, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 0, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 0, 2, S("abcde12fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 0, 4, S("abcde1234fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 0, 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 0, 6, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 1, 1, S("abcde2fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 1, 2, S("abcde23fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 1, 3, S("abcde234fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 1, 4, S("abcde2345fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 1, 5, S("abcde2345fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 2, 1, S("abcde3fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 2, 2, S("abcde34fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 2, 3, S("abcde345fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 2, 4, S("abcde345fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 4, 1, S("abcde5fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 4, 2, S("abcde5fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 0, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 0, 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 0, 9, S("abcde123456789fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 0, 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 0, 11, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 1, 1, S("abcde2fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 1, 4, S("abcde2345fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 1, 8, S("abcde23456789fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 1, 9, S("abcde234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 1, 10, S("abcde234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 5, 1, S("abcde6fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 5, 2, S("abcde67fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 5, 4, S("abcde6789fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 5, 5, S("abcde67890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 5, 6, S("abcde67890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 9, 1, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 9, 2, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 0, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 0, 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 1, 1, S("abcde2fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 1, 9, S("abcde234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 10, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 10, 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 10, 9, S("abcde123456789fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 10, 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 10, 11, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 19, 1, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 19, 2, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 1, SV(""), 0, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV(""), 0, 1, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 0, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 0, 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 0, 2, S("abcde12ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 0, 4, S("abcde1234ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 0, 5, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 0, 6, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 1, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 1, 1, S("abcde2ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 1, 2, S("abcde23ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 1, 3, S("abcde234ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 1, 4, S("abcde2345ghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test28() {
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 10, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 10, 1, S("a1"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 10, 5, S("a12345"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 10, 9, S("a123456789"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 10, 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 10, 11, S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 19, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 19, 1, S("a0"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 19, 2, S("a0"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 20, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 20, 1, S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 0, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 0, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 0, 2, S("abcde12fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 0, 4, S("abcde1234fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 0, 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 0, 6, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 1, 1, S("abcde2fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 1, 2, S("abcde23fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 1, 3, S("abcde234fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 1, 4, S("abcde2345fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 1, 5, S("abcde2345fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 2, 1, S("abcde3fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 2, 2, S("abcde34fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 2, 3, S("abcde345fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 2, 4, S("abcde345fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 4, 1, S("abcde5fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 4, 2, S("abcde5fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 0, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 0, 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 0, 9, S("abcde123456789fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 0, 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 0, 11, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 1, 1, S("abcde2fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 1, 4, S("abcde2345fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 1, 8, S("abcde23456789fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 1, 9, S("abcde234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 1, 10, S("abcde234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 5, 1, S("abcde6fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 5, 2, S("abcde67fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 5, 4, S("abcde6789fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 5, 5, S("abcde67890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 5, 6, S("abcde67890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 9, 1, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 9, 2, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 0, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 0, 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 1, 1, S("abcde2fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 1, 9, S("abcde234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 10, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 10, 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 10, 9, S("abcde123456789fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 10, 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 10, 11, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 19, 1, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 19, 2, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 1, SV(""), 0, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV(""), 0, 1, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 0, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 0, 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 0, 2, S("abcde12ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 0, 4, S("abcde1234ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 0, 5, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 0, 6, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 1, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 1, 1, S("abcde2ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 1, 2, S("abcde23ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 1, 3, S("abcde234ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 1, 4, S("abcde2345ghij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test29()
-{
-    test(S("abcdefghij"), 5, 1, SV("12345"), 1, 5, S("abcde2345ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 2, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 2, 1, S("abcde3ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 2, 2, S("abcde34ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 2, 3, S("abcde345ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 2, 4, S("abcde345ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 4, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 4, 1, S("abcde5ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 4, 2, S("abcde5ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 5, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 5, 1, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 0, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 0, 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 0, 5, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 0, 9, S("abcde123456789ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 0, 10, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 0, 11, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 1, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 1, 1, S("abcde2ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 1, 4, S("abcde2345ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 1, 8, S("abcde23456789ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 1, 9, S("abcde234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 1, 10, S("abcde234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 5, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 5, 1, S("abcde6ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 5, 2, S("abcde67ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 5, 4, S("abcde6789ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 5, 5, S("abcde67890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 5, 6, S("abcde67890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 9, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 9, 1, S("abcde0ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 9, 2, S("abcde0ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 10, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 10, 1, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 0, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 0, 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 0, 10, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 1, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 1, 1, S("abcde2ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 1, 9, S("abcde234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 10, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 10, 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 10, 5, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 10, 9, S("abcde123456789ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 10, 10, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 10, 11, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 19, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 19, 1, S("abcde0ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 19, 2, S("abcde0ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 20, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 20, 1, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 2, SV(""), 0, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV(""), 0, 1, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 0, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 0, 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 0, 2, S("abcde12hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 0, 4, S("abcde1234hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 0, 5, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 0, 6, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 1, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 1, 1, S("abcde2hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 1, 2, S("abcde23hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 1, 3, S("abcde234hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 1, 4, S("abcde2345hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 1, 5, S("abcde2345hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 2, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 2, 1, S("abcde3hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 2, 2, S("abcde34hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 2, 3, S("abcde345hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 2, 4, S("abcde345hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 4, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 4, 1, S("abcde5hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 4, 2, S("abcde5hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 5, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 5, 1, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 0, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 0, 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 0, 5, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 0, 9, S("abcde123456789hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 0, 10, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 0, 11, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 1, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 1, 1, S("abcde2hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 1, 4, S("abcde2345hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 1, 8, S("abcde23456789hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 1, 9, S("abcde234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 1, 10, S("abcde234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 5, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 5, 1, S("abcde6hij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test29() {
+  test(S("abcdefghij"), 5, 1, SV("12345"), 1, 5, S("abcde2345ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 2, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 2, 1, S("abcde3ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 2, 2, S("abcde34ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 2, 3, S("abcde345ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 2, 4, S("abcde345ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 4, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 4, 1, S("abcde5ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 4, 2, S("abcde5ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 5, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 5, 1, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 0, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 0, 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 0, 5, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 0, 9, S("abcde123456789ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 0, 10, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 0, 11, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 1, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 1, 1, S("abcde2ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 1, 4, S("abcde2345ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 1, 8, S("abcde23456789ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 1, 9, S("abcde234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 1, 10, S("abcde234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 5, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 5, 1, S("abcde6ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 5, 2, S("abcde67ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 5, 4, S("abcde6789ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 5, 5, S("abcde67890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 5, 6, S("abcde67890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 9, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 9, 1, S("abcde0ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 9, 2, S("abcde0ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 10, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 10, 1, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 0, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 0, 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 0, 10, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 1, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 1, 1, S("abcde2ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 1, 9, S("abcde234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 10, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 10, 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 10, 5, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 10, 9, S("abcde123456789ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 10, 10, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 10, 11, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 19, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 19, 1, S("abcde0ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 19, 2, S("abcde0ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 20, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 20, 1, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 2, SV(""), 0, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV(""), 0, 1, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 0, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 0, 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 0, 2, S("abcde12hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 0, 4, S("abcde1234hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 0, 5, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 0, 6, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 1, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 1, 1, S("abcde2hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 1, 2, S("abcde23hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 1, 3, S("abcde234hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 1, 4, S("abcde2345hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 1, 5, S("abcde2345hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 2, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 2, 1, S("abcde3hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 2, 2, S("abcde34hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 2, 3, S("abcde345hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 2, 4, S("abcde345hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 4, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 4, 1, S("abcde5hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 4, 2, S("abcde5hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 5, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 5, 1, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 0, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 0, 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 0, 5, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 0, 9, S("abcde123456789hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 0, 10, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 0, 11, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 1, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 1, 1, S("abcde2hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 1, 4, S("abcde2345hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 1, 8, S("abcde23456789hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 1, 9, S("abcde234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 1, 10, S("abcde234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 5, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 5, 1, S("abcde6hij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test30()
-{
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 5, 2, S("abcde67hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 5, 4, S("abcde6789hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 5, 5, S("abcde67890hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 5, 6, S("abcde67890hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 9, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 9, 1, S("abcde0hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 9, 2, S("abcde0hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 10, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 10, 1, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 0, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 0, 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 0, 10, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 1, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 1, 1, S("abcde2hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 1, 9, S("abcde234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 10, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 10, 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 10, 5, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 10, 9, S("abcde123456789hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 10, 10, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 10, 11, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 19, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 19, 1, S("abcde0hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 19, 2, S("abcde0hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 20, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 20, 1, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 4, SV(""), 0, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV(""), 0, 1, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 0, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 0, 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 0, 2, S("abcde12j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 0, 4, S("abcde1234j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 0, 5, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 0, 6, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 1, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 1, 1, S("abcde2j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 1, 2, S("abcde23j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 1, 3, S("abcde234j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 1, 4, S("abcde2345j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 1, 5, S("abcde2345j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 2, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 2, 1, S("abcde3j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 2, 2, S("abcde34j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 2, 3, S("abcde345j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 2, 4, S("abcde345j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 4, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 4, 1, S("abcde5j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 4, 2, S("abcde5j"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 5, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 5, 1, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 0, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 0, 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 0, 5, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 0, 9, S("abcde123456789j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 0, 10, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 0, 11, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 1, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 1, 1, S("abcde2j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 1, 4, S("abcde2345j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 1, 8, S("abcde23456789j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 1, 9, S("abcde234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 1, 10, S("abcde234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 5, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 5, 1, S("abcde6j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 5, 2, S("abcde67j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 5, 4, S("abcde6789j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 5, 5, S("abcde67890j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 5, 6, S("abcde67890j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 9, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 9, 1, S("abcde0j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 9, 2, S("abcde0j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 10, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 10, 1, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 0, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 0, 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 0, 10, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 1, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 1, 1, S("abcde2j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 1, 9, S("abcde234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 10, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 10, 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 10, 5, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 10, 9, S("abcde123456789j"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test30() {
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 5, 2, S("abcde67hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 5, 4, S("abcde6789hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 5, 5, S("abcde67890hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 5, 6, S("abcde67890hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 9, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 9, 1, S("abcde0hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 9, 2, S("abcde0hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 10, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 10, 1, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 0, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 0, 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 0, 10, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 1, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 1, 1, S("abcde2hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 1, 9, S("abcde234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 10, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 10, 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 10, 5, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 10, 9, S("abcde123456789hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 10, 10, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 10, 11, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 19, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 19, 1, S("abcde0hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 19, 2, S("abcde0hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 20, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 20, 1, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 4, SV(""), 0, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV(""), 0, 1, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 0, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 0, 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 0, 2, S("abcde12j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 0, 4, S("abcde1234j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 0, 5, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 0, 6, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 1, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 1, 1, S("abcde2j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 1, 2, S("abcde23j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 1, 3, S("abcde234j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 1, 4, S("abcde2345j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 1, 5, S("abcde2345j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 2, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 2, 1, S("abcde3j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 2, 2, S("abcde34j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 2, 3, S("abcde345j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 2, 4, S("abcde345j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 4, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 4, 1, S("abcde5j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 4, 2, S("abcde5j"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 5, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 5, 1, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 0, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 0, 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 0, 5, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 0, 9, S("abcde123456789j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 0, 10, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 0, 11, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 1, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 1, 1, S("abcde2j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 1, 4, S("abcde2345j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 1, 8, S("abcde23456789j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 1, 9, S("abcde234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 1, 10, S("abcde234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 5, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 5, 1, S("abcde6j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 5, 2, S("abcde67j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 5, 4, S("abcde6789j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 5, 5, S("abcde67890j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 5, 6, S("abcde67890j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 9, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 9, 1, S("abcde0j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 9, 2, S("abcde0j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 10, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 10, 1, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 0, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 0, 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 0, 10, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 1, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 1, 1, S("abcde2j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 1, 9, S("abcde234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 10, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 10, 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 10, 5, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 10, 9, S("abcde123456789j"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test31()
-{
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 10, 10, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 10, 11, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 19, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 19, 1, S("abcde0j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 19, 2, S("abcde0j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 20, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 20, 1, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 5, SV(""), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV(""), 0, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 0, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 0, 2, S("abcde12"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 0, 4, S("abcde1234"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 0, 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 0, 6, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 1, 1, S("abcde2"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 1, 2, S("abcde23"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 1, 3, S("abcde234"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 1, 4, S("abcde2345"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 1, 5, S("abcde2345"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 2, 1, S("abcde3"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 2, 2, S("abcde34"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 2, 3, S("abcde345"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 2, 4, S("abcde345"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 4, 1, S("abcde5"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 4, 2, S("abcde5"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 5, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 0, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 0, 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 0, 9, S("abcde123456789"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 0, 11, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 1, 1, S("abcde2"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 1, 4, S("abcde2345"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 1, 8, S("abcde23456789"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 1, 10, S("abcde234567890"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 5, 1, S("abcde6"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 5, 2, S("abcde67"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 5, 4, S("abcde6789"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 5, 5, S("abcde67890"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 5, 6, S("abcde67890"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 9, 1, S("abcde0"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 9, 2, S("abcde0"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 0, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 1, 1, S("abcde2"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 10, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 10, 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 10, 9, S("abcde123456789"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 10, 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 10, 11, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 19, 1, S("abcde0"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 19, 2, S("abcde0"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 6, SV(""), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV(""), 0, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 0, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 0, 2, S("abcde12"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 0, 4, S("abcde1234"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 0, 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 0, 6, S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 1, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 1, 1, S("abcde2"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 1, 2, S("abcde23"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 1, 3, S("abcde234"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 1, 4, S("abcde2345"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 1, 5, S("abcde2345"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 2, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 2, 1, S("abcde3"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 2, 2, S("abcde34"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test31() {
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 10, 10, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 10, 11, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 19, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 19, 1, S("abcde0j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 19, 2, S("abcde0j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 20, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 20, 1, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 5, SV(""), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV(""), 0, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 0, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 0, 2, S("abcde12"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 0, 4, S("abcde1234"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 0, 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 0, 6, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 1, 1, S("abcde2"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 1, 2, S("abcde23"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 1, 3, S("abcde234"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 1, 4, S("abcde2345"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 1, 5, S("abcde2345"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 2, 1, S("abcde3"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 2, 2, S("abcde34"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 2, 3, S("abcde345"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 2, 4, S("abcde345"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 4, 1, S("abcde5"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 4, 2, S("abcde5"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 5, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 0, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 0, 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 0, 9, S("abcde123456789"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 0, 11, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 1, 1, S("abcde2"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 1, 4, S("abcde2345"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 1, 8, S("abcde23456789"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 1, 10, S("abcde234567890"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 5, 1, S("abcde6"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 5, 2, S("abcde67"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 5, 4, S("abcde6789"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 5, 5, S("abcde67890"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 5, 6, S("abcde67890"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 9, 1, S("abcde0"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 9, 2, S("abcde0"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 0, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 1, 1, S("abcde2"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 10, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 10, 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 10, 9, S("abcde123456789"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 10, 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 10, 11, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 19, 1, S("abcde0"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 19, 2, S("abcde0"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 6, SV(""), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV(""), 0, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 0, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 0, 2, S("abcde12"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 0, 4, S("abcde1234"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 0, 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 0, 6, S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 1, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 1, 1, S("abcde2"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 1, 2, S("abcde23"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 1, 3, S("abcde234"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 1, 4, S("abcde2345"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 1, 5, S("abcde2345"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 2, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 2, 1, S("abcde3"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 2, 2, S("abcde34"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test32()
-{
-    test(S("abcdefghij"), 5, 6, SV("12345"), 2, 3, S("abcde345"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 2, 4, S("abcde345"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 4, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 4, 1, S("abcde5"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 4, 2, S("abcde5"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 5, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 5, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 0, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 0, 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 0, 9, S("abcde123456789"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 0, 11, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 1, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 1, 1, S("abcde2"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 1, 4, S("abcde2345"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 1, 8, S("abcde23456789"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 1, 10, S("abcde234567890"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 5, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 5, 1, S("abcde6"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 5, 2, S("abcde67"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 5, 4, S("abcde6789"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 5, 5, S("abcde67890"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 5, 6, S("abcde67890"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 9, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 9, 1, S("abcde0"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 9, 2, S("abcde0"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 10, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 10, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 0, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 1, 1, S("abcde2"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 10, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 10, 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 10, 9, S("abcde123456789"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 10, 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 10, 11, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 19, 1, S("abcde0"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 19, 2, S("abcde0"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 0, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 0, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 0, 2, S("abcdefghi12j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 0, 4, S("abcdefghi1234j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 0, 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 0, 6, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 1, 1, S("abcdefghi2j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 1, 2, S("abcdefghi23j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 1, 3, S("abcdefghi234j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 1, 4, S("abcdefghi2345j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 1, 5, S("abcdefghi2345j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 2, 1, S("abcdefghi3j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 2, 2, S("abcdefghi34j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 2, 3, S("abcdefghi345j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 2, 4, S("abcdefghi345j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 4, 1, S("abcdefghi5j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 4, 2, S("abcdefghi5j"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 0, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 0, 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 0, 9, S("abcdefghi123456789j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 0, 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 0, 11, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 1, 1, S("abcdefghi2j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 1, 4, S("abcdefghi2345j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 1, 8, S("abcdefghi23456789j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 1, 9, S("abcdefghi234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 1, 10, S("abcdefghi234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 5, 1, S("abcdefghi6j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 5, 2, S("abcdefghi67j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 5, 4, S("abcdefghi6789j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 5, 5, S("abcdefghi67890j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 5, 6, S("abcdefghi67890j"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test32() {
+  test(S("abcdefghij"), 5, 6, SV("12345"), 2, 3, S("abcde345"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 2, 4, S("abcde345"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 4, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 4, 1, S("abcde5"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 4, 2, S("abcde5"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 5, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 5, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 0, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 0, 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 0, 9, S("abcde123456789"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 0, 11, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 1, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 1, 1, S("abcde2"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 1, 4, S("abcde2345"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 1, 8, S("abcde23456789"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 1, 10, S("abcde234567890"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 5, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 5, 1, S("abcde6"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 5, 2, S("abcde67"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 5, 4, S("abcde6789"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 5, 5, S("abcde67890"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 5, 6, S("abcde67890"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 9, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 9, 1, S("abcde0"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 9, 2, S("abcde0"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 10, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 10, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 0, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 1, 1, S("abcde2"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 10, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 10, 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 10, 9, S("abcde123456789"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 10, 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 10, 11, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 19, 1, S("abcde0"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 19, 2, S("abcde0"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 0, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 0, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 0, 2, S("abcdefghi12j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 0, 4, S("abcdefghi1234j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 0, 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 0, 6, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 1, 1, S("abcdefghi2j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 1, 2, S("abcdefghi23j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 1, 3, S("abcdefghi234j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 1, 4, S("abcdefghi2345j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 1, 5, S("abcdefghi2345j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 2, 1, S("abcdefghi3j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 2, 2, S("abcdefghi34j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 2, 3, S("abcdefghi345j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 2, 4, S("abcdefghi345j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 4, 1, S("abcdefghi5j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 4, 2, S("abcdefghi5j"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 0, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 0, 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 0, 9, S("abcdefghi123456789j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 0, 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 0, 11, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 1, 1, S("abcdefghi2j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 1, 4, S("abcdefghi2345j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 1, 8, S("abcdefghi23456789j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 1, 9, S("abcdefghi234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 1, 10, S("abcdefghi234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 5, 1, S("abcdefghi6j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 5, 2, S("abcdefghi67j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 5, 4, S("abcdefghi6789j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 5, 5, S("abcdefghi67890j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 5, 6, S("abcdefghi67890j"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test33()
-{
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 9, 1, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 9, 2, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 0, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 0, 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 1, 1, S("abcdefghi2j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 1, 9, S("abcdefghi234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 10, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 10, 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 10, 9, S("abcdefghi123456789j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 10, 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 10, 11, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 19, 1, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 19, 2, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 1, SV(""), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV(""), 0, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 0, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 0, 2, S("abcdefghi12"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 0, 4, S("abcdefghi1234"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 0, 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 0, 6, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 1, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 1, 1, S("abcdefghi2"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 1, 2, S("abcdefghi23"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 1, 3, S("abcdefghi234"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 1, 4, S("abcdefghi2345"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 1, 5, S("abcdefghi2345"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 2, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 2, 1, S("abcdefghi3"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 2, 2, S("abcdefghi34"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 2, 3, S("abcdefghi345"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 2, 4, S("abcdefghi345"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 4, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 4, 1, S("abcdefghi5"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 4, 2, S("abcdefghi5"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 5, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 5, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 0, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 0, 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 0, 9, S("abcdefghi123456789"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 0, 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 0, 11, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 1, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 1, 1, S("abcdefghi2"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 1, 4, S("abcdefghi2345"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 1, 8, S("abcdefghi23456789"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 1, 9, S("abcdefghi234567890"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 1, 10, S("abcdefghi234567890"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 5, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 5, 1, S("abcdefghi6"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 5, 2, S("abcdefghi67"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 5, 4, S("abcdefghi6789"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 5, 5, S("abcdefghi67890"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 5, 6, S("abcdefghi67890"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 9, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 9, 1, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 9, 2, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 10, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 10, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 0, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 0, 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 1, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 1, 1, S("abcdefghi2"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 1, 9, S("abcdefghi234567890"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, 9, S("abcdefghi123456789"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, 11, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 19, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 19, 1, S("abcdefghi0"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test33() {
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 9, 1, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 9, 2, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 0, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 0, 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 1, 1, S("abcdefghi2j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 1, 9, S("abcdefghi234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 10, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 10, 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 10, 9, S("abcdefghi123456789j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 10, 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 10, 11, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 19, 1, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 19, 2, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 1, SV(""), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV(""), 0, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 0, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 0, 2, S("abcdefghi12"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 0, 4, S("abcdefghi1234"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 0, 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 0, 6, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 1, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 1, 1, S("abcdefghi2"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 1, 2, S("abcdefghi23"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 1, 3, S("abcdefghi234"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 1, 4, S("abcdefghi2345"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 1, 5, S("abcdefghi2345"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 2, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 2, 1, S("abcdefghi3"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 2, 2, S("abcdefghi34"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 2, 3, S("abcdefghi345"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 2, 4, S("abcdefghi345"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 4, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 4, 1, S("abcdefghi5"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 4, 2, S("abcdefghi5"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 5, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 5, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 0, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 0, 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 0, 9, S("abcdefghi123456789"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 0, 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 0, 11, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 1, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 1, 1, S("abcdefghi2"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 1, 4, S("abcdefghi2345"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 1, 8, S("abcdefghi23456789"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 1, 9, S("abcdefghi234567890"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 1, 10, S("abcdefghi234567890"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 5, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 5, 1, S("abcdefghi6"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 5, 2, S("abcdefghi67"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 5, 4, S("abcdefghi6789"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 5, 5, S("abcdefghi67890"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 5, 6, S("abcdefghi67890"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 9, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 9, 1, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 9, 2, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 10, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 10, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 0, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 0, 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 1, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 1, 1, S("abcdefghi2"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 1, 9, S("abcdefghi234567890"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, 9, S("abcdefghi123456789"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, 11, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 19, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 19, 1, S("abcdefghi0"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test34()
-{
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 19, 2, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 20, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 20, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 2, SV(""), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV(""), 0, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 0, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 0, 2, S("abcdefghi12"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 0, 4, S("abcdefghi1234"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 0, 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 0, 6, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 1, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 1, 1, S("abcdefghi2"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 1, 2, S("abcdefghi23"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 1, 3, S("abcdefghi234"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 1, 4, S("abcdefghi2345"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 1, 5, S("abcdefghi2345"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 2, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 2, 1, S("abcdefghi3"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 2, 2, S("abcdefghi34"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 2, 3, S("abcdefghi345"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 2, 4, S("abcdefghi345"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 4, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 4, 1, S("abcdefghi5"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 4, 2, S("abcdefghi5"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 5, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 5, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 0, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 0, 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 0, 9, S("abcdefghi123456789"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 0, 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 0, 11, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 1, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 1, 1, S("abcdefghi2"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 1, 4, S("abcdefghi2345"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 1, 8, S("abcdefghi23456789"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 1, 9, S("abcdefghi234567890"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 1, 10, S("abcdefghi234567890"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 5, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 5, 1, S("abcdefghi6"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 5, 2, S("abcdefghi67"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 5, 4, S("abcdefghi6789"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 5, 5, S("abcdefghi67890"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 5, 6, S("abcdefghi67890"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 9, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 9, 1, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 9, 2, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 10, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 10, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 0, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 0, 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 1, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 1, 1, S("abcdefghi2"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 1, 9, S("abcdefghi234567890"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 10, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 10, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 10, 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 10, 9, S("abcdefghi123456789"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 10, 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 10, 11, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 19, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 19, 1, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 19, 2, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 20, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 20, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 0, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 0, 2, S("abcdefghij12"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 0, 4, S("abcdefghij1234"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 0, 6, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 1, 2, S("abcdefghij23"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 1, 3, S("abcdefghij234"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 1, 5, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 2, 1, S("abcdefghij3"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 2, 2, S("abcdefghij34"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 2, 3, S("abcdefghij345"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 2, 4, S("abcdefghij345"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 4, 1, S("abcdefghij5"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test34() {
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 19, 2, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 20, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 20, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 2, SV(""), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV(""), 0, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 0, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 0, 2, S("abcdefghi12"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 0, 4, S("abcdefghi1234"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 0, 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 0, 6, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 1, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 1, 1, S("abcdefghi2"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 1, 2, S("abcdefghi23"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 1, 3, S("abcdefghi234"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 1, 4, S("abcdefghi2345"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 1, 5, S("abcdefghi2345"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 2, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 2, 1, S("abcdefghi3"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 2, 2, S("abcdefghi34"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 2, 3, S("abcdefghi345"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 2, 4, S("abcdefghi345"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 4, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 4, 1, S("abcdefghi5"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 4, 2, S("abcdefghi5"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 5, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 5, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 0, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 0, 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 0, 9, S("abcdefghi123456789"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 0, 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 0, 11, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 1, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 1, 1, S("abcdefghi2"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 1, 4, S("abcdefghi2345"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 1, 8, S("abcdefghi23456789"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 1, 9, S("abcdefghi234567890"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 1, 10, S("abcdefghi234567890"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 5, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 5, 1, S("abcdefghi6"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 5, 2, S("abcdefghi67"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 5, 4, S("abcdefghi6789"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 5, 5, S("abcdefghi67890"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 5, 6, S("abcdefghi67890"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 9, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 9, 1, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 9, 2, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 10, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 10, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 0, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 0, 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 1, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 1, 1, S("abcdefghi2"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 1, 9, S("abcdefghi234567890"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 10, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 10, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 10, 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 10, 9, S("abcdefghi123456789"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 10, 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 10, 11, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 19, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 19, 1, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 19, 2, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 20, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 20, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 0, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 0, 2, S("abcdefghij12"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 0, 4, S("abcdefghij1234"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 0, 6, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 1, 2, S("abcdefghij23"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 1, 3, S("abcdefghij234"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 1, 5, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 2, 1, S("abcdefghij3"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 2, 2, S("abcdefghij34"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 2, 3, S("abcdefghij345"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 2, 4, S("abcdefghij345"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 4, 1, S("abcdefghij5"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test35()
-{
-    test(S("abcdefghij"), 10, 0, SV("12345"), 4, 2, S("abcdefghij5"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 0, 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 0, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 1, 8, S("abcdefghij23456789"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 1, 10, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 5, 1, S("abcdefghij6"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 5, 2, S("abcdefghij67"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 5, 4, S("abcdefghij6789"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 5, 5, S("abcdefghij67890"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 5, 6, S("abcdefghij67890"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 9, 1, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 9, 2, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 10, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 10, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 19, 1, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 19, 2, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 1, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 0, 2, S("abcdefghij12"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 0, 4, S("abcdefghij1234"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 0, 6, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 1, 2, S("abcdefghij23"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 1, 3, S("abcdefghij234"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 1, 5, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 2, 1, S("abcdefghij3"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 2, 2, S("abcdefghij34"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 2, 3, S("abcdefghij345"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 2, 4, S("abcdefghij345"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 4, 1, S("abcdefghij5"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 4, 2, S("abcdefghij5"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 0, 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 0, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 1, 8, S("abcdefghij23456789"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 1, 10, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 5, 1, S("abcdefghij6"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 5, 2, S("abcdefghij67"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 5, 4, S("abcdefghij6789"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 5, 5, S("abcdefghij67890"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 5, 6, S("abcdefghij67890"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 9, 1, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 9, 2, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 10, 0, S("abcdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test35() {
+  test(S("abcdefghij"), 10, 0, SV("12345"), 4, 2, S("abcdefghij5"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 0, 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 0, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 1, 8, S("abcdefghij23456789"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 1, 10, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 5, 1, S("abcdefghij6"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 5, 2, S("abcdefghij67"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 5, 4, S("abcdefghij6789"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 5, 5, S("abcdefghij67890"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 5, 6, S("abcdefghij67890"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 9, 1, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 9, 2, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 10, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 10, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 19, 1, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 19, 2, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 1, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 0, 2, S("abcdefghij12"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 0, 4, S("abcdefghij1234"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 0, 6, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 1, 2, S("abcdefghij23"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 1, 3, S("abcdefghij234"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 1, 5, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 2, 1, S("abcdefghij3"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 2, 2, S("abcdefghij34"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 2, 3, S("abcdefghij345"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 2, 4, S("abcdefghij345"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 4, 1, S("abcdefghij5"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 4, 2, S("abcdefghij5"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 0, 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 0, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 1, 8, S("abcdefghij23456789"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 1, 10, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 5, 1, S("abcdefghij6"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 5, 2, S("abcdefghij67"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 5, 4, S("abcdefghij6789"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 5, 5, S("abcdefghij67890"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 5, 6, S("abcdefghij67890"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 9, 1, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 9, 2, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 10, 0, S("abcdefghij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test36()
-{
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 10, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 10, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 19, 1, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 19, 2, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV(""), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV(""), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 0, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 0, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 0, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 0, 6, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 1, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 1, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 1, 3, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 1, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 1, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 2, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 2, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 2, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 2, 3, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 2, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 4, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 4, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 4, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 5, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 5, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 0, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 0, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 0, 11, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 1, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 1, 8, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 1, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 5, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 5, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 5, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 5, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 5, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 5, 6, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 9, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 9, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 9, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test36() {
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 10, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 10, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 19, 1, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 19, 2, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV(""), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV(""), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 0, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 0, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 0, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 0, 6, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 1, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 1, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 1, 3, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 1, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 1, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 2, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 2, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 2, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 2, 3, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 2, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 4, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 4, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 4, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 5, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 5, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 0, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 0, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 0, 11, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 1, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 1, 8, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 1, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 5, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 5, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 5, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 5, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 5, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 5, 6, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 9, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 9, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 9, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test37()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 0, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 0, 2, S("12abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 0, 4, S("1234abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 0, 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 0, 6, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 1, 1, S("2abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 1, 2, S("23abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 1, 3, S("234abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 1, 4, S("2345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 1, 5, S("2345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 2, 1, S("3abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 2, 2, S("34abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 2, 3, S("345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 2, 4, S("345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 4, 1, S("5abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 4, 2, S("5abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 0, 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 0, 9, S("123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 0, 11, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 1, 4, S("2345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 1, 8, S("23456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 1, 10, S("234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 5, 1, S("6abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 5, 2, S("67abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 5, 4, S("6789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 5, 5, S("67890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 5, 6, S("67890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 9, 1, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 9, 2, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 1, 18, S("234567890123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 10, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 10, 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 10, 9, S("123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 10, 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 10, 11, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 19, 1, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 19, 2, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 0, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 0, 1, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 0, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 0, 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 0, 2, S("12bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 0, 4, S("1234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 0, 5, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 0, 6, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 1, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 1, 1, S("2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 1, 2, S("23bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 1, 3, S("234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 1, 4, S("2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 1, 5, S("2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 2, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 2, 1, S("3bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 2, 2, S("34bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 2, 3, S("345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 2, 4, S("345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 4, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 4, 1, S("5bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 4, 2, S("5bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 5, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 5, 1, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 6, 0, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test37() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 0, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 0, 2, S("12abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 0, 4, S("1234abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 0, 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 0, 6, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 1, 1, S("2abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 1, 2, S("23abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 1, 3, S("234abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 1, 4, S("2345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 1, 5, S("2345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 2, 1, S("3abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 2, 2, S("34abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 2, 3, S("345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 2, 4, S("345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 4, 1, S("5abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 4, 2, S("5abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 0, 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 0, 9, S("123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 0, 11, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 1, 4, S("2345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 1, 8, S("23456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 1, 10, S("234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 5, 1, S("6abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 5, 2, S("67abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 5, 4, S("6789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 5, 5, S("67890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 5, 6, S("67890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 9, 1, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 9, 2, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       0,
+       0,
+       SV("12345678901234567890"),
+       0,
+       20,
+       S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       0,
+       0,
+       SV("12345678901234567890"),
+       0,
+       21,
+       S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 1, 18, S("234567890123456789abcdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 10, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 10, 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 10, 9, S("123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 10, 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 10, 11, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 19, 1, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 19, 2, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 0, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 0, 1, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 0, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 0, 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 0, 2, S("12bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 0, 4, S("1234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 0, 5, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 0, 6, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 1, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 1, 1, S("2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 1, 2, S("23bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 1, 3, S("234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 1, 4, S("2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 1, 5, S("2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 2, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 2, 1, S("3bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 2, 2, S("34bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 2, 3, S("345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 2, 4, S("345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 4, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 4, 1, S("5bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 4, 2, S("5bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 5, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 5, 1, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), 6, 0, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test38()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 0, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 0, 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 0, 5, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 0, 9, S("123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 0, 10, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 0, 11, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 1, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 1, 1, S("2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 1, 4, S("2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 1, 8, S("23456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 1, 9, S("234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 1, 10, S("234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 5, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 5, 1, S("6bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 5, 2, S("67bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 5, 4, S("6789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 5, 5, S("67890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 5, 6, S("67890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 9, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 9, 1, S("0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 9, 2, S("0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 10, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 10, 1, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 0, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 0, 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 0, 10, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 0, 19, S("1234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 0, 20, S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 0, 21, S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 1, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 1, 1, S("2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 1, 9, S("234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 1, 18, S("234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 1, 19, S("2345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 1, 20, S("2345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 10, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 10, 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 10, 5, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 10, 9, S("123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 10, 10, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 10, 11, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 19, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 19, 1, S("0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 19, 2, S("0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 20, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 20, 1, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 0, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 0, 1, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 0, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 0, 1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 0, 2, S("12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 0, 4, S("1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 0, 5, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 0, 6, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 1, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 1, 1, S("2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 1, 2, S("23klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 1, 3, S("234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 1, 4, S("2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 1, 5, S("2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 2, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 2, 1, S("3klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 2, 2, S("34klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 2, 3, S("345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 2, 4, S("345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 4, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 4, 1, S("5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 4, 2, S("5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 5, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 5, 1, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 0, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 0, 1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 0, 5, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 0, 9, S("123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 0, 10, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 0, 11, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 1, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 1, 1, S("2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 1, 4, S("2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 1, 8, S("23456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 1, 9, S("234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 1, 10, S("234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 5, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 5, 1, S("6klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 5, 2, S("67klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 5, 4, S("6789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 5, 5, S("67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 5, 6, S("67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 9, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 9, 1, S("0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 9, 2, S("0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 10, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 10, 1, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 0, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 0, 1, S("1klmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test38() {
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 0, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 0, 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 0, 5, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 0, 9, S("123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 0, 10, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 0, 11, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 1, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 1, 1, S("2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 1, 4, S("2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 1, 8, S("23456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 1, 9, S("234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 1, 10, S("234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 5, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 5, 1, S("6bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 5, 2, S("67bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 5, 4, S("6789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 5, 5, S("67890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 5, 6, S("67890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 9, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 9, 1, S("0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 9, 2, S("0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 10, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 10, 1, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 0, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 0, 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 0, 10, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 0, 19, S("1234567890123456789bcdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 0, 20, S("12345678901234567890bcdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 0, 21, S("12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 1, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 1, 1, S("2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 1, 9, S("234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 1, 18, S("234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 1, 19, S("2345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 1, 20, S("2345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 10, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 10, 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 10, 5, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 10, 9, S("123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 10, 10, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 10, 11, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 19, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 19, 1, S("0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 19, 2, S("0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 20, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 20, 1, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 0, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 0, 1, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 0, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 0, 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 0, 2, S("12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 0, 4, S("1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 0, 5, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 0, 6, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 1, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 1, 1, S("2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 1, 2, S("23klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 1, 3, S("234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 1, 4, S("2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 1, 5, S("2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 2, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 2, 1, S("3klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 2, 2, S("34klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 2, 3, S("345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 2, 4, S("345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 4, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 4, 1, S("5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 4, 2, S("5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 5, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 5, 1, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 0, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 0, 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 0, 5, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 0, 9, S("123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 0, 10, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 0, 11, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 1, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 1, 1, S("2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 1, 4, S("2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 1, 8, S("23456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 1, 9, S("234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 1, 10, S("234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 5, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 5, 1, S("6klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 5, 2, S("67klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 5, 4, S("6789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 5, 5, S("67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 5, 6, S("67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 9, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 9, 1, S("0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 9, 2, S("0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 10, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 10, 1, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 0, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 0, 1, S("1klmnopqrst"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test39()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 0, 10, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 0, 19, S("1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 0, 20, S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 0, 21, S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 1, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 1, 1, S("2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 1, 9, S("234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 1, 18, S("234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 1, 19, S("2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 1, 20, S("2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 10, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 10, 1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 10, 5, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 10, 9, S("123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 10, 10, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 10, 11, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 19, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 19, 1, S("0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 19, 2, S("0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 20, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 20, 1, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 0, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 0, 1, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 0, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 0, 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 0, 2, S("12t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 0, 4, S("1234t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 0, 5, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 0, 6, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 1, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 1, 1, S("2t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 1, 2, S("23t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 1, 3, S("234t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 1, 4, S("2345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 1, 5, S("2345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 2, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 2, 1, S("3t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 2, 2, S("34t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 2, 3, S("345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 2, 4, S("345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 4, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 4, 1, S("5t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 4, 2, S("5t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 5, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 5, 1, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 0, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 0, 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 0, 5, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 0, 9, S("123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 0, 10, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 0, 11, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 1, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 1, 1, S("2t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 1, 4, S("2345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 1, 8, S("23456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 1, 9, S("234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 1, 10, S("234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 5, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 5, 1, S("6t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 5, 2, S("67t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 5, 4, S("6789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 5, 5, S("67890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 5, 6, S("67890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 9, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 9, 1, S("0t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 9, 2, S("0t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 10, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 10, 1, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 0, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 0, 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 0, 10, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 0, 19, S("1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 0, 20, S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 0, 21, S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 1, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 1, 1, S("2t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 1, 9, S("234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 1, 18, S("234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 1, 19, S("2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 1, 20, S("2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 10, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 10, 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 10, 5, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 10, 9, S("123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 10, 10, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 10, 11, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 19, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 19, 1, S("0t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 19, 2, S("0t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 20, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 20, 1, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 0, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 0, 0, S(""));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test39() {
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 0, 10, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 0, 19, S("1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 0, 20, S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 0, 21, S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 1, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 1, 1, S("2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 1, 9, S("234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 1, 18, S("234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 1, 19, S("2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 1, 20, S("2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 10, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 10, 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 10, 5, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 10, 9, S("123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 10, 10, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 10, 11, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 19, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 19, 1, S("0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 19, 2, S("0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 20, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 20, 1, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 0, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 0, 1, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 0, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 0, 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 0, 2, S("12t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 0, 4, S("1234t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 0, 5, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 0, 6, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 1, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 1, 1, S("2t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 1, 2, S("23t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 1, 3, S("234t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 1, 4, S("2345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 1, 5, S("2345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 2, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 2, 1, S("3t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 2, 2, S("34t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 2, 3, S("345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 2, 4, S("345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 4, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 4, 1, S("5t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 4, 2, S("5t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 5, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 5, 1, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 0, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 0, 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 0, 5, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 0, 9, S("123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 0, 10, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 0, 11, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 1, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 1, 1, S("2t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 1, 4, S("2345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 1, 8, S("23456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 1, 9, S("234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 1, 10, S("234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 5, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 5, 1, S("6t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 5, 2, S("67t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 5, 4, S("6789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 5, 5, S("67890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 5, 6, S("67890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 9, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 9, 1, S("0t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 9, 2, S("0t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 10, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 10, 1, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 0, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 0, 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 0, 10, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 0, 19, S("1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 0, 20, S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 0, 21, S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 1, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 1, 1, S("2t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 1, 9, S("234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 1, 18, S("234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 1, 19, S("2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 1, 20, S("2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 10, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 10, 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 10, 5, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 10, 9, S("123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 10, 10, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 10, 11, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 19, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 19, 1, S("0t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 19, 2, S("0t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 20, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 20, 1, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 0, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 0, 0, S(""));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test40()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 0, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 0, 2, S("12"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 0, 4, S("1234"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 0, 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 0, 6, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 1, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 1, 1, S("2"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 1, 2, S("23"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 1, 3, S("234"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 1, 4, S("2345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 1, 5, S("2345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 2, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 2, 1, S("3"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 2, 2, S("34"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 2, 3, S("345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 2, 4, S("345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 4, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 4, 1, S("5"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 4, 2, S("5"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 5, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 5, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 0, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 0, 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 0, 9, S("123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 0, 11, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 1, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 1, 1, S("2"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 1, 4, S("2345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 1, 8, S("23456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 1, 10, S("234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 5, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 5, 1, S("6"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 5, 2, S("67"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 5, 4, S("6789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 5, 5, S("67890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 5, 6, S("67890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 9, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 9, 1, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 9, 2, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 10, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 10, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 0, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 1, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 1, 1, S("2"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 10, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 10, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 10, 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 10, 9, S("123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 19, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 19, 1, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 19, 2, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 20, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 20, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 0, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 0, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 0, 2, S("12"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 0, 4, S("1234"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 0, 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 0, 6, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 1, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 1, 1, S("2"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 1, 2, S("23"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 1, 3, S("234"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 1, 4, S("2345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 1, 5, S("2345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 2, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 2, 1, S("3"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 2, 2, S("34"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 2, 3, S("345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 2, 4, S("345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 4, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 4, 1, S("5"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 4, 2, S("5"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 5, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 5, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 0, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 0, 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 0, 9, S("123456789"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test40() {
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 0, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 0, 2, S("12"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 0, 4, S("1234"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 0, 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 0, 6, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 1, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 1, 1, S("2"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 1, 2, S("23"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 1, 3, S("234"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 1, 4, S("2345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 1, 5, S("2345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 2, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 2, 1, S("3"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 2, 2, S("34"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 2, 3, S("345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 2, 4, S("345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 4, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 4, 1, S("5"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 4, 2, S("5"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 5, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 5, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 0, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 0, 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 0, 9, S("123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 0, 11, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 1, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 1, 1, S("2"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 1, 4, S("2345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 1, 8, S("23456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 1, 10, S("234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 5, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 5, 1, S("6"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 5, 2, S("67"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 5, 4, S("6789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 5, 5, S("67890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 5, 6, S("67890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 9, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 9, 1, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 9, 2, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 10, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 10, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 0, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 1, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 1, 1, S("2"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 10, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 10, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 10, 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 10, 9, S("123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 19, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 19, 1, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 19, 2, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 20, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 20, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 0, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 0, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 0, 2, S("12"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 0, 4, S("1234"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 0, 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 0, 6, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 1, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 1, 1, S("2"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 1, 2, S("23"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 1, 3, S("234"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 1, 4, S("2345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 1, 5, S("2345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 2, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 2, 1, S("3"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 2, 2, S("34"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 2, 3, S("345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 2, 4, S("345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 4, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 4, 1, S("5"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 4, 2, S("5"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 5, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 5, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 0, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 0, 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 0, 9, S("123456789"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test41()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 0, 11, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 1, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 1, 1, S("2"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 1, 4, S("2345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 1, 8, S("23456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 1, 10, S("234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 5, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 5, 1, S("6"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 5, 2, S("67"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 5, 4, S("6789"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 5, 5, S("67890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 5, 6, S("67890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 9, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 9, 1, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 9, 2, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 10, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 10, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 0, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 1, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 1, 1, S("2"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 10, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 10, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 10, 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 10, 9, S("123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 19, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 19, 1, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 19, 2, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 20, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 20, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 0, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 0, 2, S("a12bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 0, 4, S("a1234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 0, 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 0, 6, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 1, 1, S("a2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 1, 2, S("a23bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 1, 3, S("a234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 1, 4, S("a2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 1, 5, S("a2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 2, 1, S("a3bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 2, 2, S("a34bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 2, 3, S("a345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 2, 4, S("a345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 4, 1, S("a5bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 4, 2, S("a5bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 0, 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 0, 9, S("a123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 0, 11, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 1, 4, S("a2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 1, 8, S("a23456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 1, 10, S("a234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 5, 1, S("a6bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 5, 2, S("a67bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 5, 4, S("a6789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 5, 5, S("a67890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 5, 6, S("a67890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 9, 1, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 9, 2, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghijklmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test41() {
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 0, 11, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 1, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 1, 1, S("2"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 1, 4, S("2345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 1, 8, S("23456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 1, 10, S("234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 5, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 5, 1, S("6"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 5, 2, S("67"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 5, 4, S("6789"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 5, 5, S("67890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 5, 6, S("67890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 9, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 9, 1, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 9, 2, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 10, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 10, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 0, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 1, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 1, 1, S("2"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 10, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 10, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 10, 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 10, 9, S("123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 19, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 19, 1, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 19, 2, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 20, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 20, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 0, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 0, 2, S("a12bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 0, 4, S("a1234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 0, 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 0, 6, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 1, 1, S("a2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 1, 2, S("a23bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 1, 3, S("a234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 1, 4, S("a2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 1, 5, S("a2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 2, 1, S("a3bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 2, 2, S("a34bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 2, 3, S("a345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 2, 4, S("a345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 4, 1, S("a5bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 4, 2, S("a5bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 0, 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 0, 9, S("a123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 0, 11, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 1, 4, S("a2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 1, 8, S("a23456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 1, 10, S("a234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 5, 1, S("a6bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 5, 2, S("a67bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 5, 4, S("a6789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 5, 5, S("a67890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 5, 6, S("a67890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 9, 1, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 9, 2, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       1,
+       0,
+       SV("12345678901234567890"),
+       0,
+       20,
+       S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       1,
+       0,
+       SV("12345678901234567890"),
+       0,
+       21,
+       S("a12345678901234567890bcdefghijklmnopqrst"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test42()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 10, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 10, 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 10, 9, S("a123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 10, 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 10, 11, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 19, 1, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 19, 2, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 0, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 0, 1, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 0, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 0, 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 0, 2, S("a12cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 0, 4, S("a1234cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 0, 5, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 0, 6, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 1, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 1, 1, S("a2cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 1, 2, S("a23cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 1, 3, S("a234cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 1, 4, S("a2345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 1, 5, S("a2345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 2, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 2, 1, S("a3cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 2, 2, S("a34cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 2, 3, S("a345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 2, 4, S("a345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 4, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 4, 1, S("a5cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 4, 2, S("a5cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 5, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 5, 1, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 0, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 0, 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 0, 5, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 0, 9, S("a123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 0, 10, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 0, 11, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 1, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 1, 1, S("a2cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 1, 4, S("a2345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 1, 8, S("a23456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 1, 9, S("a234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 1, 10, S("a234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 5, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 5, 1, S("a6cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 5, 2, S("a67cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 5, 4, S("a6789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 5, 5, S("a67890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 5, 6, S("a67890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 9, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 9, 1, S("a0cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 9, 2, S("a0cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 10, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 10, 1, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 0, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 0, 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 0, 10, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 0, 19, S("a1234567890123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 0, 20, S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 0, 21, S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 1, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 1, 1, S("a2cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 1, 9, S("a234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 1, 18, S("a234567890123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 1, 19, S("a2345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 1, 20, S("a2345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 10, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 10, 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 10, 5, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 10, 9, S("a123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 10, 10, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 10, 11, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 19, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 19, 1, S("a0cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 19, 2, S("a0cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 20, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 20, 1, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 0, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 0, 1, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 0, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 0, 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 0, 2, S("a12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 0, 4, S("a1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 0, 5, S("a12345klmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test42() {
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 10, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 10, 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 10, 9, S("a123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 10, 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 10, 11, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 19, 1, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 19, 2, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 0, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 0, 1, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 0, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 0, 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 0, 2, S("a12cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 0, 4, S("a1234cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 0, 5, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 0, 6, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 1, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 1, 1, S("a2cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 1, 2, S("a23cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 1, 3, S("a234cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 1, 4, S("a2345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 1, 5, S("a2345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 2, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 2, 1, S("a3cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 2, 2, S("a34cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 2, 3, S("a345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 2, 4, S("a345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 4, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 4, 1, S("a5cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 4, 2, S("a5cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 5, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 5, 1, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 0, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 0, 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 0, 5, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 0, 9, S("a123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 0, 10, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 0, 11, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 1, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 1, 1, S("a2cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 1, 4, S("a2345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 1, 8, S("a23456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 1, 9, S("a234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 1, 10, S("a234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 5, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 5, 1, S("a6cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 5, 2, S("a67cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 5, 4, S("a6789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 5, 5, S("a67890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 5, 6, S("a67890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 9, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 9, 1, S("a0cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 9, 2, S("a0cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 10, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 10, 1, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 0, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 0, 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 0, 10, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 0, 19, S("a1234567890123456789cdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 0, 20, S("a12345678901234567890cdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 0, 21, S("a12345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 1, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 1, 1, S("a2cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 1, 9, S("a234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 1, 18, S("a234567890123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 1, 19, S("a2345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 1, 20, S("a2345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 10, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 10, 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 10, 5, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 10, 9, S("a123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 10, 10, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 10, 11, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 19, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 19, 1, S("a0cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 19, 2, S("a0cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 20, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 20, 1, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 0, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 0, 1, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 0, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 0, 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 0, 2, S("a12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 0, 4, S("a1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 0, 5, S("a12345klmnopqrst"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test43()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 0, 6, S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 1, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 1, 1, S("a2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 1, 2, S("a23klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 1, 3, S("a234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 1, 4, S("a2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 1, 5, S("a2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 2, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 2, 1, S("a3klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 2, 2, S("a34klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 2, 3, S("a345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 2, 4, S("a345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 4, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 4, 1, S("a5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 4, 2, S("a5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 5, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 5, 1, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 0, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 0, 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 0, 5, S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 0, 9, S("a123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 0, 10, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 0, 11, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 1, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 1, 1, S("a2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 1, 4, S("a2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 1, 8, S("a23456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 1, 9, S("a234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 1, 10, S("a234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 5, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 5, 1, S("a6klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 5, 2, S("a67klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 5, 4, S("a6789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 5, 5, S("a67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 5, 6, S("a67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 9, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 9, 1, S("a0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 9, 2, S("a0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 10, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 10, 1, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 0, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 0, 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 0, 10, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 0, 19, S("a1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 0, 20, S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 0, 21, S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 1, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 1, 1, S("a2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 1, 9, S("a234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 1, 18, S("a234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 1, 19, S("a2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 1, 20, S("a2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 10, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 10, 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 10, 5, S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 10, 9, S("a123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 10, 10, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 10, 11, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 19, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 19, 1, S("a0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 19, 2, S("a0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 20, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 20, 1, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 0, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 0, 1, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 0, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 0, 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 0, 2, S("a12t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 0, 4, S("a1234t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 0, 5, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 0, 6, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 1, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 1, 1, S("a2t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 1, 2, S("a23t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 1, 3, S("a234t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 1, 4, S("a2345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 1, 5, S("a2345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 2, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 2, 1, S("a3t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 2, 2, S("a34t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 2, 3, S("a345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 2, 4, S("a345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 4, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 4, 1, S("a5t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 4, 2, S("a5t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 5, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 5, 1, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 0, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 0, 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 0, 5, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 0, 9, S("a123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 0, 10, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 0, 11, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 1, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 1, 1, S("a2t"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test43() {
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 0, 6, S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 1, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 1, 1, S("a2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 1, 2, S("a23klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 1, 3, S("a234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 1, 4, S("a2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 1, 5, S("a2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 2, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 2, 1, S("a3klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 2, 2, S("a34klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 2, 3, S("a345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 2, 4, S("a345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 4, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 4, 1, S("a5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 4, 2, S("a5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 5, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 5, 1, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 0, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 0, 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 0, 5, S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 0, 9, S("a123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 0, 10, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 0, 11, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 1, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 1, 1, S("a2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 1, 4, S("a2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 1, 8, S("a23456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 1, 9, S("a234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 1, 10, S("a234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 5, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 5, 1, S("a6klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 5, 2, S("a67klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 5, 4, S("a6789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 5, 5, S("a67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 5, 6, S("a67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 9, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 9, 1, S("a0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 9, 2, S("a0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 10, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 10, 1, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 0, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 0, 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 0, 10, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 0, 19, S("a1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 0, 20, S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 0, 21, S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 1, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 1, 1, S("a2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 1, 9, S("a234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 1, 18, S("a234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 1, 19, S("a2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 1, 20, S("a2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 10, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 10, 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 10, 5, S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 10, 9, S("a123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 10, 10, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 10, 11, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 19, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 19, 1, S("a0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 19, 2, S("a0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 20, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 20, 1, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 0, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 0, 1, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 0, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 0, 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 0, 2, S("a12t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 0, 4, S("a1234t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 0, 5, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 0, 6, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 1, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 1, 1, S("a2t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 1, 2, S("a23t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 1, 3, S("a234t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 1, 4, S("a2345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 1, 5, S("a2345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 2, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 2, 1, S("a3t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 2, 2, S("a34t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 2, 3, S("a345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 2, 4, S("a345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 4, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 4, 1, S("a5t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 4, 2, S("a5t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 5, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 5, 1, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 0, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 0, 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 0, 5, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 0, 9, S("a123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 0, 10, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 0, 11, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 1, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 1, 1, S("a2t"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test44()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 1, 4, S("a2345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 1, 8, S("a23456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 1, 9, S("a234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 1, 10, S("a234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 5, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 5, 1, S("a6t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 5, 2, S("a67t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 5, 4, S("a6789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 5, 5, S("a67890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 5, 6, S("a67890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 9, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 9, 1, S("a0t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 9, 2, S("a0t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 10, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 10, 1, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 0, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 0, 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 0, 10, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 0, 19, S("a1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 0, 20, S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 0, 21, S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 1, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 1, 1, S("a2t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 1, 9, S("a234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 1, 18, S("a234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 1, 19, S("a2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 1, 20, S("a2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 10, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 10, 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 10, 5, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 10, 9, S("a123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 10, 10, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 10, 11, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 19, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 19, 1, S("a0t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 19, 2, S("a0t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 20, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 20, 1, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 0, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 0, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 0, 2, S("a12"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 0, 4, S("a1234"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 0, 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 0, 6, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 1, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 1, 1, S("a2"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 1, 2, S("a23"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 1, 3, S("a234"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 1, 4, S("a2345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 1, 5, S("a2345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 2, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 2, 1, S("a3"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 2, 2, S("a34"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 2, 3, S("a345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 2, 4, S("a345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 4, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 4, 1, S("a5"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 4, 2, S("a5"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 5, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 5, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 0, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 0, 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 0, 9, S("a123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 0, 11, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 1, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 1, 1, S("a2"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 1, 4, S("a2345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 1, 8, S("a23456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 1, 10, S("a234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 5, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 5, 1, S("a6"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 5, 2, S("a67"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 5, 4, S("a6789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 5, 5, S("a67890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 5, 6, S("a67890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 9, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 9, 1, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 9, 2, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 10, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 10, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 0, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 0, 19, S("a1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 0, 20, S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 0, 21, S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 1, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 1, 1, S("a2"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 1, 18, S("a234567890123456789"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test44() {
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 1, 4, S("a2345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 1, 8, S("a23456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 1, 9, S("a234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 1, 10, S("a234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 5, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 5, 1, S("a6t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 5, 2, S("a67t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 5, 4, S("a6789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 5, 5, S("a67890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 5, 6, S("a67890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 9, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 9, 1, S("a0t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 9, 2, S("a0t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 10, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 10, 1, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 0, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 0, 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 0, 10, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 0, 19, S("a1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 0, 20, S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 0, 21, S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 1, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 1, 1, S("a2t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 1, 9, S("a234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 1, 18, S("a234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 1, 19, S("a2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 1, 20, S("a2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 10, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 10, 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 10, 5, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 10, 9, S("a123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 10, 10, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 10, 11, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 19, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 19, 1, S("a0t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 19, 2, S("a0t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 20, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 20, 1, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 0, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 0, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 0, 2, S("a12"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 0, 4, S("a1234"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 0, 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 0, 6, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 1, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 1, 1, S("a2"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 1, 2, S("a23"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 1, 3, S("a234"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 1, 4, S("a2345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 1, 5, S("a2345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 2, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 2, 1, S("a3"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 2, 2, S("a34"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 2, 3, S("a345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 2, 4, S("a345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 4, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 4, 1, S("a5"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 4, 2, S("a5"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 5, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 5, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 0, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 0, 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 0, 9, S("a123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 0, 11, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 1, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 1, 1, S("a2"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 1, 4, S("a2345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 1, 8, S("a23456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 1, 10, S("a234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 5, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 5, 1, S("a6"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 5, 2, S("a67"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 5, 4, S("a6789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 5, 5, S("a67890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 5, 6, S("a67890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 9, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 9, 1, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 9, 2, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 10, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 10, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 0, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 0, 19, S("a1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 0, 20, S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 0, 21, S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 1, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 1, 1, S("a2"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 1, 18, S("a234567890123456789"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test45()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 1, 19, S("a2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 1, 20, S("a2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 10, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 10, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 10, 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 10, 9, S("a123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 10, 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 10, 11, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 19, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 19, 1, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 19, 2, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 20, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 20, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 0, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 0, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 0, 2, S("a12"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 0, 4, S("a1234"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 0, 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 0, 6, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 1, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 1, 1, S("a2"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 1, 2, S("a23"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 1, 3, S("a234"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 1, 4, S("a2345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 1, 5, S("a2345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 2, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 2, 1, S("a3"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 2, 2, S("a34"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 2, 3, S("a345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 2, 4, S("a345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 4, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 4, 1, S("a5"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 4, 2, S("a5"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 5, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 5, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 0, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 0, 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 0, 9, S("a123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 0, 11, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 1, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 1, 1, S("a2"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 1, 4, S("a2345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 1, 8, S("a23456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 1, 10, S("a234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 5, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 5, 1, S("a6"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 5, 2, S("a67"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 5, 4, S("a6789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 5, 5, S("a67890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 5, 6, S("a67890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 9, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 9, 1, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 9, 2, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 10, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 10, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 0, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 0, 19, S("a1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 0, 20, S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 0, 21, S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 1, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 1, 1, S("a2"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 1, 18, S("a234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 1, 19, S("a2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 1, 20, S("a2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 10, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 10, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 10, 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 10, 9, S("a123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 10, 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 10, 11, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 19, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 19, 1, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 19, 2, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 20, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 20, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 0, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 0, 2, S("abcdefghij12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 0, 4, S("abcdefghij1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 0, 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 0, 6, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 1, 1, S("abcdefghij2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 1, 2, S("abcdefghij23klmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test45() {
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 1, 19, S("a2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 1, 20, S("a2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 10, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 10, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 10, 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 10, 9, S("a123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 10, 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 10, 11, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 19, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 19, 1, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 19, 2, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 20, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 20, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 0, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 0, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 0, 2, S("a12"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 0, 4, S("a1234"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 0, 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 0, 6, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 1, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 1, 1, S("a2"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 1, 2, S("a23"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 1, 3, S("a234"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 1, 4, S("a2345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 1, 5, S("a2345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 2, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 2, 1, S("a3"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 2, 2, S("a34"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 2, 3, S("a345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 2, 4, S("a345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 4, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 4, 1, S("a5"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 4, 2, S("a5"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 5, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 5, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 0, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 0, 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 0, 9, S("a123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 0, 11, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 1, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 1, 1, S("a2"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 1, 4, S("a2345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 1, 8, S("a23456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 1, 10, S("a234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 5, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 5, 1, S("a6"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 5, 2, S("a67"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 5, 4, S("a6789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 5, 5, S("a67890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 5, 6, S("a67890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 9, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 9, 1, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 9, 2, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 10, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 10, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 0, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 0, 19, S("a1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 0, 20, S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 0, 21, S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 1, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 1, 1, S("a2"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 1, 18, S("a234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 1, 19, S("a2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 1, 20, S("a2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 10, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 10, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 10, 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 10, 9, S("a123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 10, 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 10, 11, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 19, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 19, 1, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 19, 2, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 20, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 20, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 0, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 0, 2, S("abcdefghij12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 0, 4, S("abcdefghij1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 0, 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 0, 6, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 1, 1, S("abcdefghij2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 1, 2, S("abcdefghij23klmnopqrst"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test46()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 1, 3, S("abcdefghij234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 1, 4, S("abcdefghij2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 1, 5, S("abcdefghij2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 2, 1, S("abcdefghij3klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 2, 2, S("abcdefghij34klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 2, 3, S("abcdefghij345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 2, 4, S("abcdefghij345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 4, 1, S("abcdefghij5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 4, 2, S("abcdefghij5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 0, 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 0, 9, S("abcdefghij123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 0, 11, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 1, 4, S("abcdefghij2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 1, 8, S("abcdefghij23456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 1, 10, S("abcdefghij234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 5, 1, S("abcdefghij6klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 5, 2, S("abcdefghij67klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 5, 4, S("abcdefghij6789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 5, 5, S("abcdefghij67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 5, 6, S("abcdefghij67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 9, 1, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 9, 2, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 10, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 10, 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 19, 1, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 19, 2, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 0, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 0, 1, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 0, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 0, 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 0, 2, S("abcdefghij12lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 0, 4, S("abcdefghij1234lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 0, 5, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 0, 6, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 1, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 1, 1, S("abcdefghij2lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 1, 2, S("abcdefghij23lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 1, 3, S("abcdefghij234lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 1, 4, S("abcdefghij2345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 1, 5, S("abcdefghij2345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 2, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 2, 1, S("abcdefghij3lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 2, 2, S("abcdefghij34lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 2, 3, S("abcdefghij345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 2, 4, S("abcdefghij345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 4, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 4, 1, S("abcdefghij5lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 4, 2, S("abcdefghij5lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 5, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 5, 1, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 0, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 0, 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 0, 5, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 0, 9, S("abcdefghij123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 0, 10, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 0, 11, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 1, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 1, 1, S("abcdefghij2lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 1, 4, S("abcdefghij2345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 1, 8, S("abcdefghij23456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 1, 9, S("abcdefghij234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 1, 10, S("abcdefghij234567890lmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test46() {
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 1, 3, S("abcdefghij234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 1, 4, S("abcdefghij2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 1, 5, S("abcdefghij2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 2, 1, S("abcdefghij3klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 2, 2, S("abcdefghij34klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 2, 3, S("abcdefghij345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 2, 4, S("abcdefghij345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 4, 1, S("abcdefghij5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 4, 2, S("abcdefghij5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 0, 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 0, 9, S("abcdefghij123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 0, 11, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 1, 4, S("abcdefghij2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 1, 8, S("abcdefghij23456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 1, 10, S("abcdefghij234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 5, 1, S("abcdefghij6klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 5, 2, S("abcdefghij67klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 5, 4, S("abcdefghij6789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 5, 5, S("abcdefghij67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 5, 6, S("abcdefghij67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 9, 1, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 9, 2, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       10,
+       0,
+       SV("12345678901234567890"),
+       0,
+       19,
+       S("abcdefghij1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       10,
+       0,
+       SV("12345678901234567890"),
+       0,
+       20,
+       S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       10,
+       0,
+       SV("12345678901234567890"),
+       0,
+       21,
+       S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       10,
+       0,
+       SV("12345678901234567890"),
+       1,
+       19,
+       S("abcdefghij2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       10,
+       0,
+       SV("12345678901234567890"),
+       1,
+       20,
+       S("abcdefghij2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 10, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 10, 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 19, 1, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 19, 2, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 0, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 0, 1, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 0, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 0, 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 0, 2, S("abcdefghij12lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 0, 4, S("abcdefghij1234lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 0, 5, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 0, 6, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 1, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 1, 1, S("abcdefghij2lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 1, 2, S("abcdefghij23lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 1, 3, S("abcdefghij234lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 1, 4, S("abcdefghij2345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 1, 5, S("abcdefghij2345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 2, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 2, 1, S("abcdefghij3lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 2, 2, S("abcdefghij34lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 2, 3, S("abcdefghij345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 2, 4, S("abcdefghij345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 4, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 4, 1, S("abcdefghij5lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 4, 2, S("abcdefghij5lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 5, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 5, 1, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 0, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 0, 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 0, 5, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 0, 9, S("abcdefghij123456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 0, 10, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 0, 11, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 1, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 1, 1, S("abcdefghij2lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 1, 4, S("abcdefghij2345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 1, 8, S("abcdefghij23456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 1, 9, S("abcdefghij234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 1, 10, S("abcdefghij234567890lmnopqrst"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test47()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 5, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 5, 1, S("abcdefghij6lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 5, 2, S("abcdefghij67lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 5, 4, S("abcdefghij6789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 5, 5, S("abcdefghij67890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 5, 6, S("abcdefghij67890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 9, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 9, 1, S("abcdefghij0lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 9, 2, S("abcdefghij0lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 10, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 10, 1, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 0, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 0, 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 1, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 1, 1, S("abcdefghij2lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 10, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 10, 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 10, 5, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 19, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 19, 1, S("abcdefghij0lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 19, 2, S("abcdefghij0lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 20, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 20, 1, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 0, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 0, 1, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 0, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 0, 1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 0, 2, S("abcdefghij12pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 0, 4, S("abcdefghij1234pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 0, 5, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 0, 6, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 1, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 1, 1, S("abcdefghij2pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 1, 2, S("abcdefghij23pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 1, 3, S("abcdefghij234pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 1, 4, S("abcdefghij2345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 1, 5, S("abcdefghij2345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 2, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 2, 1, S("abcdefghij3pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 2, 2, S("abcdefghij34pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 2, 3, S("abcdefghij345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 2, 4, S("abcdefghij345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 4, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 4, 1, S("abcdefghij5pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 4, 2, S("abcdefghij5pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 5, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 5, 1, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 0, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 0, 1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 0, 5, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 0, 9, S("abcdefghij123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 0, 10, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 0, 11, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 1, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 1, 1, S("abcdefghij2pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 1, 4, S("abcdefghij2345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 1, 8, S("abcdefghij23456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 1, 9, S("abcdefghij234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 1, 10, S("abcdefghij234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 5, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 5, 1, S("abcdefghij6pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 5, 2, S("abcdefghij67pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 5, 4, S("abcdefghij6789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 5, 5, S("abcdefghij67890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 5, 6, S("abcdefghij67890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 9, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 9, 1, S("abcdefghij0pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 9, 2, S("abcdefghij0pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 10, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 10, 1, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 0, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 0, 1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 1, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 1, 1, S("abcdefghij2pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 10, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 10, 1, S("abcdefghij1pqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test47() {
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 5, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 5, 1, S("abcdefghij6lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 5, 2, S("abcdefghij67lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 5, 4, S("abcdefghij6789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 5, 5, S("abcdefghij67890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 5, 6, S("abcdefghij67890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 9, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 9, 1, S("abcdefghij0lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 9, 2, S("abcdefghij0lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 10, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 10, 1, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 0, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 0, 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890lmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       10,
+       1,
+       SV("12345678901234567890"),
+       0,
+       20,
+       S("abcdefghij12345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       10,
+       1,
+       SV("12345678901234567890"),
+       0,
+       21,
+       S("abcdefghij12345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 1, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 1, 1, S("abcdefghij2lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789lmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890lmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 10, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 10, 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 10, 5, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 19, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 19, 1, S("abcdefghij0lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 19, 2, S("abcdefghij0lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 20, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 20, 1, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 0, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 0, 1, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 0, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 0, 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 0, 2, S("abcdefghij12pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 0, 4, S("abcdefghij1234pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 0, 5, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 0, 6, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 1, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 1, 1, S("abcdefghij2pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 1, 2, S("abcdefghij23pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 1, 3, S("abcdefghij234pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 1, 4, S("abcdefghij2345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 1, 5, S("abcdefghij2345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 2, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 2, 1, S("abcdefghij3pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 2, 2, S("abcdefghij34pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 2, 3, S("abcdefghij345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 2, 4, S("abcdefghij345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 4, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 4, 1, S("abcdefghij5pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 4, 2, S("abcdefghij5pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 5, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 5, 1, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 0, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 0, 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 0, 5, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 0, 9, S("abcdefghij123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 0, 10, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 0, 11, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 1, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 1, 1, S("abcdefghij2pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 1, 4, S("abcdefghij2345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 1, 8, S("abcdefghij23456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 1, 9, S("abcdefghij234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 1, 10, S("abcdefghij234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 5, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 5, 1, S("abcdefghij6pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 5, 2, S("abcdefghij67pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 5, 4, S("abcdefghij6789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 5, 5, S("abcdefghij67890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 5, 6, S("abcdefghij67890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 9, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 9, 1, S("abcdefghij0pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 9, 2, S("abcdefghij0pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 10, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 10, 1, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 0, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 0, 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 1, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 1, 1, S("abcdefghij2pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 10, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 10, 1, S("abcdefghij1pqrst"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test48()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 10, 5, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 19, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 19, 1, S("abcdefghij0pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 19, 2, S("abcdefghij0pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 20, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 20, 1, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 0, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 0, 1, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 0, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 0, 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 0, 2, S("abcdefghij12t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 0, 4, S("abcdefghij1234t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 0, 5, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 0, 6, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 1, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 1, 1, S("abcdefghij2t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 1, 2, S("abcdefghij23t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 1, 3, S("abcdefghij234t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 1, 4, S("abcdefghij2345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 1, 5, S("abcdefghij2345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 2, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 2, 1, S("abcdefghij3t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 2, 2, S("abcdefghij34t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 2, 3, S("abcdefghij345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 2, 4, S("abcdefghij345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 4, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 4, 1, S("abcdefghij5t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 4, 2, S("abcdefghij5t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 5, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 5, 1, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 0, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 0, 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 0, 5, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 0, 9, S("abcdefghij123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 0, 10, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 0, 11, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 1, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 1, 1, S("abcdefghij2t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 1, 4, S("abcdefghij2345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 1, 8, S("abcdefghij23456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 1, 9, S("abcdefghij234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 1, 10, S("abcdefghij234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 5, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 5, 1, S("abcdefghij6t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 5, 2, S("abcdefghij67t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 5, 4, S("abcdefghij6789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 5, 5, S("abcdefghij67890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 5, 6, S("abcdefghij67890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 9, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 9, 1, S("abcdefghij0t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 9, 2, S("abcdefghij0t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 10, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 10, 1, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 0, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 0, 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 1, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 1, 1, S("abcdefghij2t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 10, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 10, 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 10, 5, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 19, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 19, 1, S("abcdefghij0t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 19, 2, S("abcdefghij0t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 20, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 20, 1, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 0, 2, S("abcdefghij12"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 0, 4, S("abcdefghij1234"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 0, 6, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 1, 2, S("abcdefghij23"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 1, 3, S("abcdefghij234"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 1, 5, S("abcdefghij2345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 2, 0, S("abcdefghij"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test48() {
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 10, 5, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 19, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 19, 1, S("abcdefghij0pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 19, 2, S("abcdefghij0pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 20, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 20, 1, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 0, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 0, 1, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 0, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 0, 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 0, 2, S("abcdefghij12t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 0, 4, S("abcdefghij1234t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 0, 5, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 0, 6, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 1, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 1, 1, S("abcdefghij2t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 1, 2, S("abcdefghij23t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 1, 3, S("abcdefghij234t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 1, 4, S("abcdefghij2345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 1, 5, S("abcdefghij2345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 2, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 2, 1, S("abcdefghij3t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 2, 2, S("abcdefghij34t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 2, 3, S("abcdefghij345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 2, 4, S("abcdefghij345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 4, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 4, 1, S("abcdefghij5t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 4, 2, S("abcdefghij5t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 5, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 5, 1, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 0, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 0, 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 0, 5, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 0, 9, S("abcdefghij123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 0, 10, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 0, 11, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 1, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 1, 1, S("abcdefghij2t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 1, 4, S("abcdefghij2345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 1, 8, S("abcdefghij23456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 1, 9, S("abcdefghij234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 1, 10, S("abcdefghij234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 5, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 5, 1, S("abcdefghij6t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 5, 2, S("abcdefghij67t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 5, 4, S("abcdefghij6789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 5, 5, S("abcdefghij67890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 5, 6, S("abcdefghij67890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 9, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 9, 1, S("abcdefghij0t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 9, 2, S("abcdefghij0t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 10, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 10, 1, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 0, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 0, 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 1, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 1, 1, S("abcdefghij2t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 10, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 10, 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 10, 5, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 19, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 19, 1, S("abcdefghij0t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 19, 2, S("abcdefghij0t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 20, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 20, 1, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 0, 2, S("abcdefghij12"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 0, 4, S("abcdefghij1234"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 0, 6, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 1, 2, S("abcdefghij23"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 1, 3, S("abcdefghij234"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 1, 5, S("abcdefghij2345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 2, 0, S("abcdefghij"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test49()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 2, 1, S("abcdefghij3"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 2, 2, S("abcdefghij34"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 2, 3, S("abcdefghij345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 2, 4, S("abcdefghij345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 4, 1, S("abcdefghij5"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 4, 2, S("abcdefghij5"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 0, 9, S("abcdefghij123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 0, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 1, 8, S("abcdefghij23456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 1, 10, S("abcdefghij234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 5, 1, S("abcdefghij6"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 5, 2, S("abcdefghij67"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 5, 4, S("abcdefghij6789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 5, 5, S("abcdefghij67890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 5, 6, S("abcdefghij67890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 9, 1, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 9, 2, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 10, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 10, 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 19, 1, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 19, 2, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 0, 2, S("abcdefghij12"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 0, 4, S("abcdefghij1234"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 0, 6, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 1, 2, S("abcdefghij23"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 1, 3, S("abcdefghij234"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 1, 5, S("abcdefghij2345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 2, 1, S("abcdefghij3"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 2, 2, S("abcdefghij34"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 2, 3, S("abcdefghij345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 2, 4, S("abcdefghij345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 4, 1, S("abcdefghij5"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 4, 2, S("abcdefghij5"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 0, 9, S("abcdefghij123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 0, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 1, 8, S("abcdefghij23456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 1, 10, S("abcdefghij234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 5, 1, S("abcdefghij6"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 5, 2, S("abcdefghij67"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 5, 4, S("abcdefghij6789"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test49() {
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 2, 1, S("abcdefghij3"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 2, 2, S("abcdefghij34"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 2, 3, S("abcdefghij345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 2, 4, S("abcdefghij345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 4, 1, S("abcdefghij5"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 4, 2, S("abcdefghij5"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 0, 9, S("abcdefghij123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 0, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 1, 8, S("abcdefghij23456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 1, 10, S("abcdefghij234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 5, 1, S("abcdefghij6"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 5, 2, S("abcdefghij67"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 5, 4, S("abcdefghij6789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 5, 5, S("abcdefghij67890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 5, 6, S("abcdefghij67890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 9, 1, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 9, 2, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 10, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 10, 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 19, 1, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 19, 2, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 0, 2, S("abcdefghij12"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 0, 4, S("abcdefghij1234"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 0, 6, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 1, 2, S("abcdefghij23"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 1, 3, S("abcdefghij234"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 1, 5, S("abcdefghij2345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 2, 1, S("abcdefghij3"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 2, 2, S("abcdefghij34"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 2, 3, S("abcdefghij345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 2, 4, S("abcdefghij345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 4, 1, S("abcdefghij5"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 4, 2, S("abcdefghij5"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 0, 9, S("abcdefghij123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 0, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 1, 8, S("abcdefghij23456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 1, 10, S("abcdefghij234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 5, 1, S("abcdefghij6"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 5, 2, S("abcdefghij67"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 5, 4, S("abcdefghij6789"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test50()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 5, 5, S("abcdefghij67890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 5, 6, S("abcdefghij67890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 9, 1, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 9, 2, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 10, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 10, 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 19, 1, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 19, 2, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 0, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 0, 2, S("abcdefghijklmnopqrs12t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 0, 4, S("abcdefghijklmnopqrs1234t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 0, 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 0, 6, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 1, 1, S("abcdefghijklmnopqrs2t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 1, 2, S("abcdefghijklmnopqrs23t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 1, 3, S("abcdefghijklmnopqrs234t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 1, 4, S("abcdefghijklmnopqrs2345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 1, 5, S("abcdefghijklmnopqrs2345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 2, 1, S("abcdefghijklmnopqrs3t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 2, 2, S("abcdefghijklmnopqrs34t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 2, 3, S("abcdefghijklmnopqrs345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 2, 4, S("abcdefghijklmnopqrs345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 4, 1, S("abcdefghijklmnopqrs5t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 4, 2, S("abcdefghijklmnopqrs5t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrs6t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrs67t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890t"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test50() {
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 5, 5, S("abcdefghij67890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 5, 6, S("abcdefghij67890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 9, 1, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 9, 2, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 10, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 10, 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 19, 1, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 19, 2, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 0, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 0, 2, S("abcdefghijklmnopqrs12t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 0, 4, S("abcdefghijklmnopqrs1234t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 0, 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 0, 6, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 1, 1, S("abcdefghijklmnopqrs2t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 1, 2, S("abcdefghijklmnopqrs23t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 1, 3, S("abcdefghijklmnopqrs234t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 1, 4, S("abcdefghijklmnopqrs2345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 1, 5, S("abcdefghijklmnopqrs2345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 2, 1, S("abcdefghijklmnopqrs3t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 2, 2, S("abcdefghijklmnopqrs34t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 2, 3, S("abcdefghijklmnopqrs345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 2, 4, S("abcdefghijklmnopqrs345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 4, 1, S("abcdefghijklmnopqrs5t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 4, 2, S("abcdefghijklmnopqrs5t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrs6t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrs67t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"),
+       19,
+       0,
+       SV("12345678901234567890"),
+       0,
+       19,
+       S("abcdefghijklmnopqrs1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"),
+       19,
+       0,
+       SV("12345678901234567890"),
+       0,
+       20,
+       S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"),
+       19,
+       0,
+       SV("12345678901234567890"),
+       0,
+       21,
+       S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"),
+       19,
+       0,
+       SV("12345678901234567890"),
+       1,
+       19,
+       S("abcdefghijklmnopqrs2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"),
+       19,
+       0,
+       SV("12345678901234567890"),
+       1,
+       20,
+       S("abcdefghijklmnopqrs2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890t"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test51()
-{
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 0, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 0, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 0, 2, S("abcdefghijklmnopqrs12"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 0, 4, S("abcdefghijklmnopqrs1234"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 0, 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 0, 6, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 1, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 1, 1, S("abcdefghijklmnopqrs2"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 1, 2, S("abcdefghijklmnopqrs23"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 1, 3, S("abcdefghijklmnopqrs234"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 1, 4, S("abcdefghijklmnopqrs2345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 1, 5, S("abcdefghijklmnopqrs2345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 2, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 2, 1, S("abcdefghijklmnopqrs3"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 2, 2, S("abcdefghijklmnopqrs34"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 2, 3, S("abcdefghijklmnopqrs345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 2, 4, S("abcdefghijklmnopqrs345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 4, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 4, 1, S("abcdefghijklmnopqrs5"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 4, 2, S("abcdefghijklmnopqrs5"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 5, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 5, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrs6"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrs67"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 0, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 0, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 0, 2, S("abcdefghijklmnopqrs12"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 0, 4, S("abcdefghijklmnopqrs1234"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 0, 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 0, 6, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 1, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 1, 1, S("abcdefghijklmnopqrs2"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 1, 2, S("abcdefghijklmnopqrs23"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 1, 3, S("abcdefghijklmnopqrs234"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 1, 4, S("abcdefghijklmnopqrs2345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 1, 5, S("abcdefghijklmnopqrs2345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 2, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 2, 1, S("abcdefghijklmnopqrs3"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 2, 2, S("abcdefghijklmnopqrs34"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 2, 3, S("abcdefghijklmnopqrs345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 2, 4, S("abcdefghijklmnopqrs345"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test51() {
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 0, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 0, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 0, 2, S("abcdefghijklmnopqrs12"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 0, 4, S("abcdefghijklmnopqrs1234"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 0, 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 0, 6, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 1, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 1, 1, S("abcdefghijklmnopqrs2"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 1, 2, S("abcdefghijklmnopqrs23"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 1, 3, S("abcdefghijklmnopqrs234"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 1, 4, S("abcdefghijklmnopqrs2345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 1, 5, S("abcdefghijklmnopqrs2345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 2, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 2, 1, S("abcdefghijklmnopqrs3"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 2, 2, S("abcdefghijklmnopqrs34"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 2, 3, S("abcdefghijklmnopqrs345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 2, 4, S("abcdefghijklmnopqrs345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 4, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 4, 1, S("abcdefghijklmnopqrs5"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 4, 2, S("abcdefghijklmnopqrs5"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 5, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 5, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrs6"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrs67"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"),
+       19,
+       1,
+       SV("12345678901234567890"),
+       0,
+       20,
+       S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"),
+       19,
+       1,
+       SV("12345678901234567890"),
+       0,
+       21,
+       S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 0, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 0, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 0, 2, S("abcdefghijklmnopqrs12"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 0, 4, S("abcdefghijklmnopqrs1234"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 0, 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 0, 6, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 1, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 1, 1, S("abcdefghijklmnopqrs2"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 1, 2, S("abcdefghijklmnopqrs23"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 1, 3, S("abcdefghijklmnopqrs234"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 1, 4, S("abcdefghijklmnopqrs2345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 1, 5, S("abcdefghijklmnopqrs2345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 2, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 2, 1, S("abcdefghijklmnopqrs3"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 2, 2, S("abcdefghijklmnopqrs34"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 2, 3, S("abcdefghijklmnopqrs345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 2, 4, S("abcdefghijklmnopqrs345"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test52()
-{
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 4, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 4, 1, S("abcdefghijklmnopqrs5"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 4, 2, S("abcdefghijklmnopqrs5"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 5, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 5, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrs6"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrs67"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 0, 2, S("abcdefghijklmnopqrst12"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 0, 4, S("abcdefghijklmnopqrst1234"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 0, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 0, 6, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 1, 2, S("abcdefghijklmnopqrst23"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 1, 3, S("abcdefghijklmnopqrst234"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 1, 4, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 1, 5, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 2, 1, S("abcdefghijklmnopqrst3"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 2, 2, S("abcdefghijklmnopqrst34"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 2, 3, S("abcdefghijklmnopqrst345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 2, 4, S("abcdefghijklmnopqrst345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 4, 1, S("abcdefghijklmnopqrst5"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 4, 2, S("abcdefghijklmnopqrst5"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrst23456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrst6"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrst67"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrst6789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrst67890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrst67890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrst0"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test52() {
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 4, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 4, 1, S("abcdefghijklmnopqrs5"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 4, 2, S("abcdefghijklmnopqrs5"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 5, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 5, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrs6"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrs67"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"),
+       19,
+       2,
+       SV("12345678901234567890"),
+       0,
+       20,
+       S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"),
+       19,
+       2,
+       SV("12345678901234567890"),
+       0,
+       21,
+       S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 0, 2, S("abcdefghijklmnopqrst12"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 0, 4, S("abcdefghijklmnopqrst1234"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 0, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 0, 6, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 1, 2, S("abcdefghijklmnopqrst23"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 1, 3, S("abcdefghijklmnopqrst234"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 1, 4, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 1, 5, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 2, 1, S("abcdefghijklmnopqrst3"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 2, 2, S("abcdefghijklmnopqrst34"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 2, 3, S("abcdefghijklmnopqrst345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 2, 4, S("abcdefghijklmnopqrst345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 4, 1, S("abcdefghijklmnopqrst5"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 4, 2, S("abcdefghijklmnopqrst5"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrst23456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrst6"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrst67"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrst6789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrst67890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrst67890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrst0"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test53()
-{
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrst1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrst234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrst2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrst2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 0, 2, S("abcdefghijklmnopqrst12"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 0, 4, S("abcdefghijklmnopqrst1234"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 0, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 0, 6, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 1, 2, S("abcdefghijklmnopqrst23"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 1, 3, S("abcdefghijklmnopqrst234"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 1, 4, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 1, 5, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 2, 1, S("abcdefghijklmnopqrst3"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 2, 2, S("abcdefghijklmnopqrst34"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 2, 3, S("abcdefghijklmnopqrst345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 2, 4, S("abcdefghijklmnopqrst345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 4, 1, S("abcdefghijklmnopqrst5"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 4, 2, S("abcdefghijklmnopqrst5"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrst23456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrst6"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrst67"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrst6789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrst67890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrst67890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrst1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrst234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrst2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrst2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test53() {
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       0,
+       SV("12345678901234567890"),
+       0,
+       19,
+       S("abcdefghijklmnopqrst1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       0,
+       SV("12345678901234567890"),
+       0,
+       20,
+       S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       0,
+       SV("12345678901234567890"),
+       0,
+       21,
+       S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
+  test(
+      S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrst234567890123456789"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       0,
+       SV("12345678901234567890"),
+       1,
+       19,
+       S("abcdefghijklmnopqrst2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       0,
+       SV("12345678901234567890"),
+       1,
+       20,
+       S("abcdefghijklmnopqrst2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 0, 2, S("abcdefghijklmnopqrst12"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 0, 4, S("abcdefghijklmnopqrst1234"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 0, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 0, 6, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 1, 2, S("abcdefghijklmnopqrst23"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 1, 3, S("abcdefghijklmnopqrst234"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 1, 4, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 1, 5, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 2, 1, S("abcdefghijklmnopqrst3"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 2, 2, S("abcdefghijklmnopqrst34"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 2, 3, S("abcdefghijklmnopqrst345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 2, 4, S("abcdefghijklmnopqrst345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 4, 1, S("abcdefghijklmnopqrst5"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 4, 2, S("abcdefghijklmnopqrst5"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 0, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 0, 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 0, 11, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 1, 4, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 1, 8, S("abcdefghijklmnopqrst23456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 1, 10, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 5, 1, S("abcdefghijklmnopqrst6"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 5, 2, S("abcdefghijklmnopqrst67"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 5, 4, S("abcdefghijklmnopqrst6789"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 5, 5, S("abcdefghijklmnopqrst67890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 5, 6, S("abcdefghijklmnopqrst67890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 9, 1, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 9, 2, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       1,
+       SV("12345678901234567890"),
+       0,
+       19,
+       S("abcdefghijklmnopqrst1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       1,
+       SV("12345678901234567890"),
+       0,
+       20,
+       S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       1,
+       SV("12345678901234567890"),
+       0,
+       21,
+       S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
+  test(
+      S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrst234567890123456789"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       1,
+       SV("12345678901234567890"),
+       1,
+       19,
+       S("abcdefghijklmnopqrst2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       1,
+       SV("12345678901234567890"),
+       1,
+       20,
+       S("abcdefghijklmnopqrst2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test54()
-{
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 0, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 0, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 0, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 0, 6, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 1, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 1, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 1, 3, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 1, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 1, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 2, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 2, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 2, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 2, 3, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 2, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 4, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 4, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 4, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 5, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 5, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 0, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 0, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 0, 11, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 1, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 1, 8, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 1, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 5, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 5, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 5, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 5, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 5, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 5, 6, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 9, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 9, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 9, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test54() {
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 0, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 0, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 0, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 0, 6, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 1, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 1, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 1, 3, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 1, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 1, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 2, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 2, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 2, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 2, 3, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 2, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 4, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 4, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 4, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 5, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 5, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 0, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 0, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 0, 11, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 1, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 1, 8, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 1, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 5, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 5, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 5, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 5, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 5, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 5, 6, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 9, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 9, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 9, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), 21, 0, S("can't happen"));
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test55()
-{
-    test_npos(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, S("abcdefghi1234567890"));
-    test_npos(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 19, S("abcdefghi0"));
-    test_npos(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 20, S("abcdefghi"));
-    test_npos(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 20, S("abcdefghi"));
-    test_npos(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 21, S("can't happen"));
-    test_npos(S("abcdefghij"), 9, 2, SV(""), 0, S("abcdefghi"));
-    test_npos(S("abcdefghij"), 9, 2, SV(""), 1, S("can't happen"));
-    test_npos(S("abcdefghij"), 9, 2, SV("12345"), 0, S("abcdefghi12345"));
-    test_npos(S("abcdefghij"), 9, 2, SV("12345"), 1, S("abcdefghi2345"));
-    test_npos(S("abcdefghij"), 9, 2, SV("12345"), 2, S("abcdefghi345"));
-    test_npos(S("abcdefghij"), 9, 2, SV("12345"), 4, S("abcdefghi5"));
-    test_npos(S("abcdefghij"), 9, 2, SV("12345"), 5, S("abcdefghi"));
-    test_npos(S("abcdefghij"), 9, 2, SV("12345"), 6, S("can't happen"));
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test55() {
+  test_npos(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 10, S("abcdefghi1234567890"));
+  test_npos(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 19, S("abcdefghi0"));
+  test_npos(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 20, S("abcdefghi"));
+  test_npos(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 20, S("abcdefghi"));
+  test_npos(S("abcdefghij"), 9, 1, SV("12345678901234567890"), 21, S("can't happen"));
+  test_npos(S("abcdefghij"), 9, 2, SV(""), 0, S("abcdefghi"));
+  test_npos(S("abcdefghij"), 9, 2, SV(""), 1, S("can't happen"));
+  test_npos(S("abcdefghij"), 9, 2, SV("12345"), 0, S("abcdefghi12345"));
+  test_npos(S("abcdefghij"), 9, 2, SV("12345"), 1, S("abcdefghi2345"));
+  test_npos(S("abcdefghij"), 9, 2, SV("12345"), 2, S("abcdefghi345"));
+  test_npos(S("abcdefghij"), 9, 2, SV("12345"), 4, S("abcdefghi5"));
+  test_npos(S("abcdefghij"), 9, 2, SV("12345"), 5, S("abcdefghi"));
+  test_npos(S("abcdefghij"), 9, 2, SV("12345"), 6, S("can't happen"));
+
+  return true;
 }
 
 TEST_CONSTEXPR_CXX20 bool test56() {
-    typedef std::string S;
-    typedef std::string_view SV;
-    S s0 = "ABCD";
-    S s;
-    SV sv = "EFGH";
-    char arr[] = "IJKL";
-
-    s = s0;
-    s.replace(0, 4, "CDEF", 0);    // calls replace(pos1, n1, const char *, len)
-    assert(s == "");
-
-    s = s0;
-    s.replace(0, 4, "QRST", 0, std::string::npos); // calls replace(pos1, n1, string("QRST"), pos, npos)
-    assert(s == "QRST");
-
-    s = s0;
-    s.replace(0, 4, sv, 0);  // calls replace(pos1, n1, T, pos, npos)
-    assert(s == sv);
-
-    s = s0;
-    s.replace(0, 4, sv, 0, std::string::npos);   // calls replace(pos1, n1, T, pos, npos)
-    assert(s == sv);
-
-    s = s0;
-    s.replace(0, 4, arr, 0);     // calls replace(pos1, n1, const char *, len)
-    assert(s == "");
-
-    s = s0;
-    s.replace(0, 4, arr, 0, std::string::npos);    // calls replace(pos1, n1, string("IJKL"), pos, npos)
-    assert(s == "IJKL");
-
-    return true;
+  typedef std::string S;
+  typedef std::string_view SV;
+  S s0 = "ABCD";
+  S s;
+  SV sv      = "EFGH";
+  char arr[] = "IJKL";
+
+  s = s0;
+  s.replace(0, 4, "CDEF", 0); // calls replace(pos1, n1, const char *, len)
+  assert(s == "");
+
+  s = s0;
+  s.replace(0, 4, "QRST", 0, std::string::npos); // calls replace(pos1, n1, string("QRST"), pos, npos)
+  assert(s == "QRST");
+
+  s = s0;
+  s.replace(0, 4, sv, 0); // calls replace(pos1, n1, T, pos, npos)
+  assert(s == sv);
+
+  s = s0;
+  s.replace(0, 4, sv, 0, std::string::npos); // calls replace(pos1, n1, T, pos, npos)
+  assert(s == sv);
+
+  s = s0;
+  s.replace(0, 4, arr, 0); // calls replace(pos1, n1, const char *, len)
+  assert(s == "");
+
+  s = s0;
+  s.replace(0, 4, arr, 0, std::string::npos); // calls replace(pos1, n1, string("IJKL"), pos, npos)
+  assert(s == "IJKL");
+
+  return true;
 }
 
 template <class S, class SV>
@@ -6139,8 +6275,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string, std::string_view>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>,

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer.pass.cpp
index 672a984edf10337..a7282615e485541 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer.pass.cpp
@@ -21,352 +21,342 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos, typename S::size_type n1,
-     const typename S::value_type* str, S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos <= old_size)
-    {
-        s.replace(pos, n1, str);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-        typename S::size_type xlen = std::min(n1, old_size - pos);
-        typename S::size_type rlen = S::traits_type::length(str);
-        assert(s.size() == old_size - xlen + rlen);
-    }
+test(S s, typename S::size_type pos, typename S::size_type n1, const typename S::value_type* str, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos <= old_size) {
+    s.replace(pos, n1, str);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+    typename S::size_type xlen = std::min(n1, old_size - pos);
+    typename S::size_type rlen = S::traits_type::length(str);
+    assert(s.size() == old_size - xlen + rlen);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.replace(pos, n1, str);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > old_size);
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.replace(pos, n1, str);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > old_size);
+      assert(s == s0);
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, "", S(""));
-    test(S(""), 0, 0, "12345", S("12345"));
-    test(S(""), 0, 0, "1234567890", S("1234567890"));
-    test(S(""), 0, 0, "12345678901234567890", S("12345678901234567890"));
-    test(S(""), 0, 1, "", S(""));
-    test(S(""), 0, 1, "12345", S("12345"));
-    test(S(""), 0, 1, "1234567890", S("1234567890"));
-    test(S(""), 0, 1, "12345678901234567890", S("12345678901234567890"));
-    test(S(""), 1, 0, "", S("can't happen"));
-    test(S(""), 1, 0, "12345", S("can't happen"));
-    test(S(""), 1, 0, "1234567890", S("can't happen"));
-    test(S(""), 1, 0, "12345678901234567890", S("can't happen"));
-    test(S("abcde"), 0, 0, "", S("abcde"));
-    test(S("abcde"), 0, 0, "12345", S("12345abcde"));
-    test(S("abcde"), 0, 0, "1234567890", S("1234567890abcde"));
-    test(S("abcde"), 0, 0, "12345678901234567890", S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 1, "", S("bcde"));
-    test(S("abcde"), 0, 1, "12345", S("12345bcde"));
-    test(S("abcde"), 0, 1, "1234567890", S("1234567890bcde"));
-    test(S("abcde"), 0, 1, "12345678901234567890", S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 2, "", S("cde"));
-    test(S("abcde"), 0, 2, "12345", S("12345cde"));
-    test(S("abcde"), 0, 2, "1234567890", S("1234567890cde"));
-    test(S("abcde"), 0, 2, "12345678901234567890", S("12345678901234567890cde"));
-    test(S("abcde"), 0, 4, "", S("e"));
-    test(S("abcde"), 0, 4, "12345", S("12345e"));
-    test(S("abcde"), 0, 4, "1234567890", S("1234567890e"));
-    test(S("abcde"), 0, 4, "12345678901234567890", S("12345678901234567890e"));
-    test(S("abcde"), 0, 5, "", S(""));
-    test(S("abcde"), 0, 5, "12345", S("12345"));
-    test(S("abcde"), 0, 5, "1234567890", S("1234567890"));
-    test(S("abcde"), 0, 5, "12345678901234567890", S("12345678901234567890"));
-    test(S("abcde"), 0, 6, "", S(""));
-    test(S("abcde"), 0, 6, "12345", S("12345"));
-    test(S("abcde"), 0, 6, "1234567890", S("1234567890"));
-    test(S("abcde"), 0, 6, "12345678901234567890", S("12345678901234567890"));
-    test(S("abcde"), 1, 0, "", S("abcde"));
-    test(S("abcde"), 1, 0, "12345", S("a12345bcde"));
-    test(S("abcde"), 1, 0, "1234567890", S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, "12345678901234567890", S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 1, "", S("acde"));
-    test(S("abcde"), 1, 1, "12345", S("a12345cde"));
-    test(S("abcde"), 1, 1, "1234567890", S("a1234567890cde"));
-    test(S("abcde"), 1, 1, "12345678901234567890", S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 2, "", S("ade"));
-    test(S("abcde"), 1, 2, "12345", S("a12345de"));
-    test(S("abcde"), 1, 2, "1234567890", S("a1234567890de"));
-    test(S("abcde"), 1, 2, "12345678901234567890", S("a12345678901234567890de"));
-    test(S("abcde"), 1, 3, "", S("ae"));
-    test(S("abcde"), 1, 3, "12345", S("a12345e"));
-    test(S("abcde"), 1, 3, "1234567890", S("a1234567890e"));
-    test(S("abcde"), 1, 3, "12345678901234567890", S("a12345678901234567890e"));
-    test(S("abcde"), 1, 4, "", S("a"));
-    test(S("abcde"), 1, 4, "12345", S("a12345"));
-    test(S("abcde"), 1, 4, "1234567890", S("a1234567890"));
-    test(S("abcde"), 1, 4, "12345678901234567890", S("a12345678901234567890"));
-    test(S("abcde"), 1, 5, "", S("a"));
-    test(S("abcde"), 1, 5, "12345", S("a12345"));
-    test(S("abcde"), 1, 5, "1234567890", S("a1234567890"));
-    test(S("abcde"), 1, 5, "12345678901234567890", S("a12345678901234567890"));
-    test(S("abcde"), 2, 0, "", S("abcde"));
-    test(S("abcde"), 2, 0, "12345", S("ab12345cde"));
-    test(S("abcde"), 2, 0, "1234567890", S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, "12345678901234567890", S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 1, "", S("abde"));
-    test(S("abcde"), 2, 1, "12345", S("ab12345de"));
-    test(S("abcde"), 2, 1, "1234567890", S("ab1234567890de"));
-    test(S("abcde"), 2, 1, "12345678901234567890", S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 2, "", S("abe"));
-    test(S("abcde"), 2, 2, "12345", S("ab12345e"));
-    test(S("abcde"), 2, 2, "1234567890", S("ab1234567890e"));
-    test(S("abcde"), 2, 2, "12345678901234567890", S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 3, "", S("ab"));
-    test(S("abcde"), 2, 3, "12345", S("ab12345"));
-    test(S("abcde"), 2, 3, "1234567890", S("ab1234567890"));
-    test(S("abcde"), 2, 3, "12345678901234567890", S("ab12345678901234567890"));
-    test(S("abcde"), 2, 4, "", S("ab"));
-    test(S("abcde"), 2, 4, "12345", S("ab12345"));
-    test(S("abcde"), 2, 4, "1234567890", S("ab1234567890"));
-    test(S("abcde"), 2, 4, "12345678901234567890", S("ab12345678901234567890"));
-    test(S("abcde"), 4, 0, "", S("abcde"));
-    test(S("abcde"), 4, 0, "12345", S("abcd12345e"));
-    test(S("abcde"), 4, 0, "1234567890", S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, "12345678901234567890", S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 1, "", S("abcd"));
-    test(S("abcde"), 4, 1, "12345", S("abcd12345"));
-    test(S("abcde"), 4, 1, "1234567890", S("abcd1234567890"));
-    test(S("abcde"), 4, 1, "12345678901234567890", S("abcd12345678901234567890"));
-    test(S("abcde"), 4, 2, "", S("abcd"));
-    test(S("abcde"), 4, 2, "12345", S("abcd12345"));
-    test(S("abcde"), 4, 2, "1234567890", S("abcd1234567890"));
-    test(S("abcde"), 4, 2, "12345678901234567890", S("abcd12345678901234567890"));
-    test(S("abcde"), 5, 0, "", S("abcde"));
-    test(S("abcde"), 5, 0, "12345", S("abcde12345"));
-    test(S("abcde"), 5, 0, "1234567890", S("abcde1234567890"));
-    test(S("abcde"), 5, 0, "12345678901234567890", S("abcde12345678901234567890"));
-    test(S("abcde"), 5, 1, "", S("abcde"));
-    test(S("abcde"), 5, 1, "12345", S("abcde12345"));
-    test(S("abcde"), 5, 1, "1234567890", S("abcde1234567890"));
-    test(S("abcde"), 5, 1, "12345678901234567890", S("abcde12345678901234567890"));
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, "", S(""));
+  test(S(""), 0, 0, "12345", S("12345"));
+  test(S(""), 0, 0, "1234567890", S("1234567890"));
+  test(S(""), 0, 0, "12345678901234567890", S("12345678901234567890"));
+  test(S(""), 0, 1, "", S(""));
+  test(S(""), 0, 1, "12345", S("12345"));
+  test(S(""), 0, 1, "1234567890", S("1234567890"));
+  test(S(""), 0, 1, "12345678901234567890", S("12345678901234567890"));
+  test(S(""), 1, 0, "", S("can't happen"));
+  test(S(""), 1, 0, "12345", S("can't happen"));
+  test(S(""), 1, 0, "1234567890", S("can't happen"));
+  test(S(""), 1, 0, "12345678901234567890", S("can't happen"));
+  test(S("abcde"), 0, 0, "", S("abcde"));
+  test(S("abcde"), 0, 0, "12345", S("12345abcde"));
+  test(S("abcde"), 0, 0, "1234567890", S("1234567890abcde"));
+  test(S("abcde"), 0, 0, "12345678901234567890", S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 1, "", S("bcde"));
+  test(S("abcde"), 0, 1, "12345", S("12345bcde"));
+  test(S("abcde"), 0, 1, "1234567890", S("1234567890bcde"));
+  test(S("abcde"), 0, 1, "12345678901234567890", S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 2, "", S("cde"));
+  test(S("abcde"), 0, 2, "12345", S("12345cde"));
+  test(S("abcde"), 0, 2, "1234567890", S("1234567890cde"));
+  test(S("abcde"), 0, 2, "12345678901234567890", S("12345678901234567890cde"));
+  test(S("abcde"), 0, 4, "", S("e"));
+  test(S("abcde"), 0, 4, "12345", S("12345e"));
+  test(S("abcde"), 0, 4, "1234567890", S("1234567890e"));
+  test(S("abcde"), 0, 4, "12345678901234567890", S("12345678901234567890e"));
+  test(S("abcde"), 0, 5, "", S(""));
+  test(S("abcde"), 0, 5, "12345", S("12345"));
+  test(S("abcde"), 0, 5, "1234567890", S("1234567890"));
+  test(S("abcde"), 0, 5, "12345678901234567890", S("12345678901234567890"));
+  test(S("abcde"), 0, 6, "", S(""));
+  test(S("abcde"), 0, 6, "12345", S("12345"));
+  test(S("abcde"), 0, 6, "1234567890", S("1234567890"));
+  test(S("abcde"), 0, 6, "12345678901234567890", S("12345678901234567890"));
+  test(S("abcde"), 1, 0, "", S("abcde"));
+  test(S("abcde"), 1, 0, "12345", S("a12345bcde"));
+  test(S("abcde"), 1, 0, "1234567890", S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, "12345678901234567890", S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 1, "", S("acde"));
+  test(S("abcde"), 1, 1, "12345", S("a12345cde"));
+  test(S("abcde"), 1, 1, "1234567890", S("a1234567890cde"));
+  test(S("abcde"), 1, 1, "12345678901234567890", S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 2, "", S("ade"));
+  test(S("abcde"), 1, 2, "12345", S("a12345de"));
+  test(S("abcde"), 1, 2, "1234567890", S("a1234567890de"));
+  test(S("abcde"), 1, 2, "12345678901234567890", S("a12345678901234567890de"));
+  test(S("abcde"), 1, 3, "", S("ae"));
+  test(S("abcde"), 1, 3, "12345", S("a12345e"));
+  test(S("abcde"), 1, 3, "1234567890", S("a1234567890e"));
+  test(S("abcde"), 1, 3, "12345678901234567890", S("a12345678901234567890e"));
+  test(S("abcde"), 1, 4, "", S("a"));
+  test(S("abcde"), 1, 4, "12345", S("a12345"));
+  test(S("abcde"), 1, 4, "1234567890", S("a1234567890"));
+  test(S("abcde"), 1, 4, "12345678901234567890", S("a12345678901234567890"));
+  test(S("abcde"), 1, 5, "", S("a"));
+  test(S("abcde"), 1, 5, "12345", S("a12345"));
+  test(S("abcde"), 1, 5, "1234567890", S("a1234567890"));
+  test(S("abcde"), 1, 5, "12345678901234567890", S("a12345678901234567890"));
+  test(S("abcde"), 2, 0, "", S("abcde"));
+  test(S("abcde"), 2, 0, "12345", S("ab12345cde"));
+  test(S("abcde"), 2, 0, "1234567890", S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, "12345678901234567890", S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 1, "", S("abde"));
+  test(S("abcde"), 2, 1, "12345", S("ab12345de"));
+  test(S("abcde"), 2, 1, "1234567890", S("ab1234567890de"));
+  test(S("abcde"), 2, 1, "12345678901234567890", S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 2, "", S("abe"));
+  test(S("abcde"), 2, 2, "12345", S("ab12345e"));
+  test(S("abcde"), 2, 2, "1234567890", S("ab1234567890e"));
+  test(S("abcde"), 2, 2, "12345678901234567890", S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 3, "", S("ab"));
+  test(S("abcde"), 2, 3, "12345", S("ab12345"));
+  test(S("abcde"), 2, 3, "1234567890", S("ab1234567890"));
+  test(S("abcde"), 2, 3, "12345678901234567890", S("ab12345678901234567890"));
+  test(S("abcde"), 2, 4, "", S("ab"));
+  test(S("abcde"), 2, 4, "12345", S("ab12345"));
+  test(S("abcde"), 2, 4, "1234567890", S("ab1234567890"));
+  test(S("abcde"), 2, 4, "12345678901234567890", S("ab12345678901234567890"));
+  test(S("abcde"), 4, 0, "", S("abcde"));
+  test(S("abcde"), 4, 0, "12345", S("abcd12345e"));
+  test(S("abcde"), 4, 0, "1234567890", S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, "12345678901234567890", S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 1, "", S("abcd"));
+  test(S("abcde"), 4, 1, "12345", S("abcd12345"));
+  test(S("abcde"), 4, 1, "1234567890", S("abcd1234567890"));
+  test(S("abcde"), 4, 1, "12345678901234567890", S("abcd12345678901234567890"));
+  test(S("abcde"), 4, 2, "", S("abcd"));
+  test(S("abcde"), 4, 2, "12345", S("abcd12345"));
+  test(S("abcde"), 4, 2, "1234567890", S("abcd1234567890"));
+  test(S("abcde"), 4, 2, "12345678901234567890", S("abcd12345678901234567890"));
+  test(S("abcde"), 5, 0, "", S("abcde"));
+  test(S("abcde"), 5, 0, "12345", S("abcde12345"));
+  test(S("abcde"), 5, 0, "1234567890", S("abcde1234567890"));
+  test(S("abcde"), 5, 0, "12345678901234567890", S("abcde12345678901234567890"));
+  test(S("abcde"), 5, 1, "", S("abcde"));
+  test(S("abcde"), 5, 1, "12345", S("abcde12345"));
+  test(S("abcde"), 5, 1, "1234567890", S("abcde1234567890"));
+  test(S("abcde"), 5, 1, "12345678901234567890", S("abcde12345678901234567890"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S("abcde"), 6, 0, "", S("can't happen"));
-    test(S("abcde"), 6, 0, "12345", S("can't happen"));
-    test(S("abcde"), 6, 0, "1234567890", S("can't happen"));
-    test(S("abcde"), 6, 0, "12345678901234567890", S("can't happen"));
-    test(S("abcdefghij"), 0, 0, "", S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345", S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "1234567890", S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345678901234567890", S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 1, "", S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345", S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "1234567890", S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345678901234567890", S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 5, "", S("fghij"));
-    test(S("abcdefghij"), 0, 5, "12345", S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, "1234567890", S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, "12345678901234567890", S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 9, "", S("j"));
-    test(S("abcdefghij"), 0, 9, "12345", S("12345j"));
-    test(S("abcdefghij"), 0, 9, "1234567890", S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, "12345678901234567890", S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 10, "", S(""));
-    test(S("abcdefghij"), 0, 10, "12345", S("12345"));
-    test(S("abcdefghij"), 0, 10, "1234567890", S("1234567890"));
-    test(S("abcdefghij"), 0, 10, "12345678901234567890", S("12345678901234567890"));
-    test(S("abcdefghij"), 0, 11, "", S(""));
-    test(S("abcdefghij"), 0, 11, "12345", S("12345"));
-    test(S("abcdefghij"), 0, 11, "1234567890", S("1234567890"));
-    test(S("abcdefghij"), 0, 11, "12345678901234567890", S("12345678901234567890"));
-    test(S("abcdefghij"), 1, 0, "", S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345", S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "1234567890", S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345678901234567890", S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 1, "", S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345", S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, "1234567890", S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345678901234567890", S("a12345678901234567890cdefghij"));
-    test(S("abcdefghij"), 1, 4, "", S("afghij"));
-    test(S("abcdefghij"), 1, 4, "12345", S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, "1234567890", S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, "12345678901234567890", S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 8, "", S("aj"));
-    test(S("abcdefghij"), 1, 8, "12345", S("a12345j"));
-    test(S("abcdefghij"), 1, 8, "1234567890", S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, "12345678901234567890", S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 9, "", S("a"));
-    test(S("abcdefghij"), 1, 9, "12345", S("a12345"));
-    test(S("abcdefghij"), 1, 9, "1234567890", S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, "12345678901234567890", S("a12345678901234567890"));
-    test(S("abcdefghij"), 1, 10, "", S("a"));
-    test(S("abcdefghij"), 1, 10, "12345", S("a12345"));
-    test(S("abcdefghij"), 1, 10, "1234567890", S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, "12345678901234567890", S("a12345678901234567890"));
-    test(S("abcdefghij"), 5, 0, "", S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, "12345", S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, "1234567890", S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, "12345678901234567890", S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 1, "", S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, "12345", S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, "1234567890", S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, "12345678901234567890", S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 2, "", S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, "12345", S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, "1234567890", S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, "12345678901234567890", S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 4, "", S("abcdej"));
-    test(S("abcdefghij"), 5, 4, "12345", S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, "1234567890", S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, "12345678901234567890", S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 5, "", S("abcde"));
-    test(S("abcdefghij"), 5, 5, "12345", S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, "1234567890", S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, "12345678901234567890", S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 5, 6, "", S("abcde"));
-    test(S("abcdefghij"), 5, 6, "12345", S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, "1234567890", S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, "12345678901234567890", S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 9, 0, "", S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, "12345", S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, "1234567890", S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, "12345678901234567890", S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 1, "", S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, "12345", S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, "1234567890", S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, "12345678901234567890", S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 9, 2, "", S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, "12345", S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, "1234567890", S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, "12345678901234567890", S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, "", S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, "12345", S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, "1234567890", S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, "12345678901234567890", S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, 1, "", S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, "12345", S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, "1234567890", S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, "12345678901234567890", S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 11, 0, "", S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "12345", S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "1234567890", S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "12345678901234567890", S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S("abcde"), 6, 0, "", S("can't happen"));
+  test(S("abcde"), 6, 0, "12345", S("can't happen"));
+  test(S("abcde"), 6, 0, "1234567890", S("can't happen"));
+  test(S("abcde"), 6, 0, "12345678901234567890", S("can't happen"));
+  test(S("abcdefghij"), 0, 0, "", S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345", S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "1234567890", S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345678901234567890", S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 1, "", S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345", S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "1234567890", S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345678901234567890", S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 5, "", S("fghij"));
+  test(S("abcdefghij"), 0, 5, "12345", S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, "1234567890", S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, "12345678901234567890", S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 9, "", S("j"));
+  test(S("abcdefghij"), 0, 9, "12345", S("12345j"));
+  test(S("abcdefghij"), 0, 9, "1234567890", S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, "12345678901234567890", S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 10, "", S(""));
+  test(S("abcdefghij"), 0, 10, "12345", S("12345"));
+  test(S("abcdefghij"), 0, 10, "1234567890", S("1234567890"));
+  test(S("abcdefghij"), 0, 10, "12345678901234567890", S("12345678901234567890"));
+  test(S("abcdefghij"), 0, 11, "", S(""));
+  test(S("abcdefghij"), 0, 11, "12345", S("12345"));
+  test(S("abcdefghij"), 0, 11, "1234567890", S("1234567890"));
+  test(S("abcdefghij"), 0, 11, "12345678901234567890", S("12345678901234567890"));
+  test(S("abcdefghij"), 1, 0, "", S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345", S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "1234567890", S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345678901234567890", S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 1, "", S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345", S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, "1234567890", S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345678901234567890", S("a12345678901234567890cdefghij"));
+  test(S("abcdefghij"), 1, 4, "", S("afghij"));
+  test(S("abcdefghij"), 1, 4, "12345", S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, "1234567890", S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, "12345678901234567890", S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 8, "", S("aj"));
+  test(S("abcdefghij"), 1, 8, "12345", S("a12345j"));
+  test(S("abcdefghij"), 1, 8, "1234567890", S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, "12345678901234567890", S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 9, "", S("a"));
+  test(S("abcdefghij"), 1, 9, "12345", S("a12345"));
+  test(S("abcdefghij"), 1, 9, "1234567890", S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, "12345678901234567890", S("a12345678901234567890"));
+  test(S("abcdefghij"), 1, 10, "", S("a"));
+  test(S("abcdefghij"), 1, 10, "12345", S("a12345"));
+  test(S("abcdefghij"), 1, 10, "1234567890", S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, "12345678901234567890", S("a12345678901234567890"));
+  test(S("abcdefghij"), 5, 0, "", S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, "12345", S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, "1234567890", S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, "12345678901234567890", S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 1, "", S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, "12345", S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, "1234567890", S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, "12345678901234567890", S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 2, "", S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, "12345", S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, "1234567890", S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, "12345678901234567890", S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 4, "", S("abcdej"));
+  test(S("abcdefghij"), 5, 4, "12345", S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, "1234567890", S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, "12345678901234567890", S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 5, "", S("abcde"));
+  test(S("abcdefghij"), 5, 5, "12345", S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, "1234567890", S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, "12345678901234567890", S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 5, 6, "", S("abcde"));
+  test(S("abcdefghij"), 5, 6, "12345", S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, "1234567890", S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, "12345678901234567890", S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 9, 0, "", S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, "12345", S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, "1234567890", S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, "12345678901234567890", S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 1, "", S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, "12345", S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, "1234567890", S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, "12345678901234567890", S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 9, 2, "", S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, "12345", S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, "1234567890", S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, "12345678901234567890", S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, "", S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, "12345", S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, "1234567890", S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, "12345678901234567890", S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, 1, "", S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, "12345", S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, "1234567890", S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, "12345678901234567890", S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 11, 0, "", S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "12345", S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "1234567890", S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "12345678901234567890", S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, "", S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345", S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "", S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345", S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "", S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345", S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "", S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345", S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "", S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345", S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "", S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "12345", S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "", S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345", S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "", S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345", S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "", S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345", S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "", S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345", S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "", S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345", S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "", S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "12345", S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "", S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345", S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "", S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345", S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "", S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345", S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "", S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345", S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", S("abcdefghij12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "", S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345", S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "", S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "12345", S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "", S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345", S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "", S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345", S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "", S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "12345", S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "", S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345", S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "", S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "12345", S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "", S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "12345", S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, "", S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345", S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "", S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345", S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", S("12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "", S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345", S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "", S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345", S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "", S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345", S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "", S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "12345", S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "", S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345", S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "", S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345", S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", S("a12345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "", S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345", S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "", S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345", S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "", S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345", S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "", S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "12345", S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "", S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345", S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "", S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345", S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", S("abcdefghij12345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "", S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345", S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "", S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345", S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", S("abcdefghij12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "", S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345", S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "", S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "12345", S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "", S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345", S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "", S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345", S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "", S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "12345", S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "", S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345", S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "", S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "12345", S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "", S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "12345", S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
@@ -383,8 +373,7 @@ void test() {
   }
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer_size.pass.cpp
index 352ce5763433960..7ef63bdf313ddaf 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_pointer_size.pass.cpp
@@ -21,1304 +21,1289 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos, typename S::size_type n1,
-     const typename S::value_type* str, typename S::size_type n2,
-     S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos <= old_size)
-    {
-        s.replace(pos, n1, str, n2);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-        typename S::size_type xlen = std::min(n1, old_size - pos);
-        typename S::size_type rlen = n2;
-        assert(s.size() == old_size - xlen + rlen);
-    }
+test(S s,
+     typename S::size_type pos,
+     typename S::size_type n1,
+     const typename S::value_type* str,
+     typename S::size_type n2,
+     S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos <= old_size) {
+    s.replace(pos, n1, str, n2);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+    typename S::size_type xlen = std::min(n1, old_size - pos);
+    typename S::size_type rlen = n2;
+    assert(s.size() == old_size - xlen + rlen);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.replace(pos, n1, str, n2);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > old_size);
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.replace(pos, n1, str, n2);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > old_size);
+      assert(s == s0);
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, "", 0, S(""));
-    test(S(""), 0, 0, "12345", 0, S(""));
-    test(S(""), 0, 0, "12345", 1, S("1"));
-    test(S(""), 0, 0, "12345", 2, S("12"));
-    test(S(""), 0, 0, "12345", 4, S("1234"));
-    test(S(""), 0, 0, "12345", 5, S("12345"));
-    test(S(""), 0, 0, "1234567890", 0, S(""));
-    test(S(""), 0, 0, "1234567890", 1, S("1"));
-    test(S(""), 0, 0, "1234567890", 5, S("12345"));
-    test(S(""), 0, 0, "1234567890", 9, S("123456789"));
-    test(S(""), 0, 0, "1234567890", 10, S("1234567890"));
-    test(S(""), 0, 0, "12345678901234567890", 0, S(""));
-    test(S(""), 0, 0, "12345678901234567890", 1, S("1"));
-    test(S(""), 0, 0, "12345678901234567890", 10, S("1234567890"));
-    test(S(""), 0, 0, "12345678901234567890", 19, S("1234567890123456789"));
-    test(S(""), 0, 0, "12345678901234567890", 20, S("12345678901234567890"));
-    test(S(""), 0, 1, "", 0, S(""));
-    test(S(""), 0, 1, "12345", 0, S(""));
-    test(S(""), 0, 1, "12345", 1, S("1"));
-    test(S(""), 0, 1, "12345", 2, S("12"));
-    test(S(""), 0, 1, "12345", 4, S("1234"));
-    test(S(""), 0, 1, "12345", 5, S("12345"));
-    test(S(""), 0, 1, "1234567890", 0, S(""));
-    test(S(""), 0, 1, "1234567890", 1, S("1"));
-    test(S(""), 0, 1, "1234567890", 5, S("12345"));
-    test(S(""), 0, 1, "1234567890", 9, S("123456789"));
-    test(S(""), 0, 1, "1234567890", 10, S("1234567890"));
-    test(S(""), 0, 1, "12345678901234567890", 0, S(""));
-    test(S(""), 0, 1, "12345678901234567890", 1, S("1"));
-    test(S(""), 0, 1, "12345678901234567890", 10, S("1234567890"));
-    test(S(""), 0, 1, "12345678901234567890", 19, S("1234567890123456789"));
-    test(S(""), 0, 1, "12345678901234567890", 20, S("12345678901234567890"));
-    test(S(""), 1, 0, "", 0, S("can't happen"));
-    test(S(""), 1, 0, "12345", 0, S("can't happen"));
-    test(S(""), 1, 0, "12345", 1, S("can't happen"));
-    test(S(""), 1, 0, "12345", 2, S("can't happen"));
-    test(S(""), 1, 0, "12345", 4, S("can't happen"));
-    test(S(""), 1, 0, "12345", 5, S("can't happen"));
-    test(S(""), 1, 0, "1234567890", 0, S("can't happen"));
-    test(S(""), 1, 0, "1234567890", 1, S("can't happen"));
-    test(S(""), 1, 0, "1234567890", 5, S("can't happen"));
-    test(S(""), 1, 0, "1234567890", 9, S("can't happen"));
-    test(S(""), 1, 0, "1234567890", 10, S("can't happen"));
-    test(S(""), 1, 0, "12345678901234567890", 0, S("can't happen"));
-    test(S(""), 1, 0, "12345678901234567890", 1, S("can't happen"));
-    test(S(""), 1, 0, "12345678901234567890", 10, S("can't happen"));
-    test(S(""), 1, 0, "12345678901234567890", 19, S("can't happen"));
-    test(S(""), 1, 0, "12345678901234567890", 20, S("can't happen"));
-    test(S("abcde"), 0, 0, "", 0, S("abcde"));
-    test(S("abcde"), 0, 0, "12345", 0, S("abcde"));
-    test(S("abcde"), 0, 0, "12345", 1, S("1abcde"));
-    test(S("abcde"), 0, 0, "12345", 2, S("12abcde"));
-    test(S("abcde"), 0, 0, "12345", 4, S("1234abcde"));
-    test(S("abcde"), 0, 0, "12345", 5, S("12345abcde"));
-    test(S("abcde"), 0, 0, "1234567890", 0, S("abcde"));
-    test(S("abcde"), 0, 0, "1234567890", 1, S("1abcde"));
-    test(S("abcde"), 0, 0, "1234567890", 5, S("12345abcde"));
-    test(S("abcde"), 0, 0, "1234567890", 9, S("123456789abcde"));
-    test(S("abcde"), 0, 0, "1234567890", 10, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, "12345678901234567890", 0, S("abcde"));
-    test(S("abcde"), 0, 0, "12345678901234567890", 1, S("1abcde"));
-    test(S("abcde"), 0, 0, "12345678901234567890", 10, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcde"));
-    test(S("abcde"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 1, "", 0, S("bcde"));
-    test(S("abcde"), 0, 1, "12345", 0, S("bcde"));
-    test(S("abcde"), 0, 1, "12345", 1, S("1bcde"));
-    test(S("abcde"), 0, 1, "12345", 2, S("12bcde"));
-    test(S("abcde"), 0, 1, "12345", 4, S("1234bcde"));
-    test(S("abcde"), 0, 1, "12345", 5, S("12345bcde"));
-    test(S("abcde"), 0, 1, "1234567890", 0, S("bcde"));
-    test(S("abcde"), 0, 1, "1234567890", 1, S("1bcde"));
-    test(S("abcde"), 0, 1, "1234567890", 5, S("12345bcde"));
-    test(S("abcde"), 0, 1, "1234567890", 9, S("123456789bcde"));
-    test(S("abcde"), 0, 1, "1234567890", 10, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, "12345678901234567890", 0, S("bcde"));
-    test(S("abcde"), 0, 1, "12345678901234567890", 1, S("1bcde"));
-    test(S("abcde"), 0, 1, "12345678901234567890", 10, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcde"));
-    test(S("abcde"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 2, "", 0, S("cde"));
-    test(S("abcde"), 0, 2, "12345", 0, S("cde"));
-    test(S("abcde"), 0, 2, "12345", 1, S("1cde"));
-    test(S("abcde"), 0, 2, "12345", 2, S("12cde"));
-    test(S("abcde"), 0, 2, "12345", 4, S("1234cde"));
-    test(S("abcde"), 0, 2, "12345", 5, S("12345cde"));
-    test(S("abcde"), 0, 2, "1234567890", 0, S("cde"));
-    test(S("abcde"), 0, 2, "1234567890", 1, S("1cde"));
-    test(S("abcde"), 0, 2, "1234567890", 5, S("12345cde"));
-    test(S("abcde"), 0, 2, "1234567890", 9, S("123456789cde"));
-    test(S("abcde"), 0, 2, "1234567890", 10, S("1234567890cde"));
-    test(S("abcde"), 0, 2, "12345678901234567890", 0, S("cde"));
-    test(S("abcde"), 0, 2, "12345678901234567890", 1, S("1cde"));
-    test(S("abcde"), 0, 2, "12345678901234567890", 10, S("1234567890cde"));
-    test(S("abcde"), 0, 2, "12345678901234567890", 19, S("1234567890123456789cde"));
-    test(S("abcde"), 0, 2, "12345678901234567890", 20, S("12345678901234567890cde"));
-    test(S("abcde"), 0, 4, "", 0, S("e"));
-    test(S("abcde"), 0, 4, "12345", 0, S("e"));
-    test(S("abcde"), 0, 4, "12345", 1, S("1e"));
-    test(S("abcde"), 0, 4, "12345", 2, S("12e"));
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, "", 0, S(""));
+  test(S(""), 0, 0, "12345", 0, S(""));
+  test(S(""), 0, 0, "12345", 1, S("1"));
+  test(S(""), 0, 0, "12345", 2, S("12"));
+  test(S(""), 0, 0, "12345", 4, S("1234"));
+  test(S(""), 0, 0, "12345", 5, S("12345"));
+  test(S(""), 0, 0, "1234567890", 0, S(""));
+  test(S(""), 0, 0, "1234567890", 1, S("1"));
+  test(S(""), 0, 0, "1234567890", 5, S("12345"));
+  test(S(""), 0, 0, "1234567890", 9, S("123456789"));
+  test(S(""), 0, 0, "1234567890", 10, S("1234567890"));
+  test(S(""), 0, 0, "12345678901234567890", 0, S(""));
+  test(S(""), 0, 0, "12345678901234567890", 1, S("1"));
+  test(S(""), 0, 0, "12345678901234567890", 10, S("1234567890"));
+  test(S(""), 0, 0, "12345678901234567890", 19, S("1234567890123456789"));
+  test(S(""), 0, 0, "12345678901234567890", 20, S("12345678901234567890"));
+  test(S(""), 0, 1, "", 0, S(""));
+  test(S(""), 0, 1, "12345", 0, S(""));
+  test(S(""), 0, 1, "12345", 1, S("1"));
+  test(S(""), 0, 1, "12345", 2, S("12"));
+  test(S(""), 0, 1, "12345", 4, S("1234"));
+  test(S(""), 0, 1, "12345", 5, S("12345"));
+  test(S(""), 0, 1, "1234567890", 0, S(""));
+  test(S(""), 0, 1, "1234567890", 1, S("1"));
+  test(S(""), 0, 1, "1234567890", 5, S("12345"));
+  test(S(""), 0, 1, "1234567890", 9, S("123456789"));
+  test(S(""), 0, 1, "1234567890", 10, S("1234567890"));
+  test(S(""), 0, 1, "12345678901234567890", 0, S(""));
+  test(S(""), 0, 1, "12345678901234567890", 1, S("1"));
+  test(S(""), 0, 1, "12345678901234567890", 10, S("1234567890"));
+  test(S(""), 0, 1, "12345678901234567890", 19, S("1234567890123456789"));
+  test(S(""), 0, 1, "12345678901234567890", 20, S("12345678901234567890"));
+  test(S(""), 1, 0, "", 0, S("can't happen"));
+  test(S(""), 1, 0, "12345", 0, S("can't happen"));
+  test(S(""), 1, 0, "12345", 1, S("can't happen"));
+  test(S(""), 1, 0, "12345", 2, S("can't happen"));
+  test(S(""), 1, 0, "12345", 4, S("can't happen"));
+  test(S(""), 1, 0, "12345", 5, S("can't happen"));
+  test(S(""), 1, 0, "1234567890", 0, S("can't happen"));
+  test(S(""), 1, 0, "1234567890", 1, S("can't happen"));
+  test(S(""), 1, 0, "1234567890", 5, S("can't happen"));
+  test(S(""), 1, 0, "1234567890", 9, S("can't happen"));
+  test(S(""), 1, 0, "1234567890", 10, S("can't happen"));
+  test(S(""), 1, 0, "12345678901234567890", 0, S("can't happen"));
+  test(S(""), 1, 0, "12345678901234567890", 1, S("can't happen"));
+  test(S(""), 1, 0, "12345678901234567890", 10, S("can't happen"));
+  test(S(""), 1, 0, "12345678901234567890", 19, S("can't happen"));
+  test(S(""), 1, 0, "12345678901234567890", 20, S("can't happen"));
+  test(S("abcde"), 0, 0, "", 0, S("abcde"));
+  test(S("abcde"), 0, 0, "12345", 0, S("abcde"));
+  test(S("abcde"), 0, 0, "12345", 1, S("1abcde"));
+  test(S("abcde"), 0, 0, "12345", 2, S("12abcde"));
+  test(S("abcde"), 0, 0, "12345", 4, S("1234abcde"));
+  test(S("abcde"), 0, 0, "12345", 5, S("12345abcde"));
+  test(S("abcde"), 0, 0, "1234567890", 0, S("abcde"));
+  test(S("abcde"), 0, 0, "1234567890", 1, S("1abcde"));
+  test(S("abcde"), 0, 0, "1234567890", 5, S("12345abcde"));
+  test(S("abcde"), 0, 0, "1234567890", 9, S("123456789abcde"));
+  test(S("abcde"), 0, 0, "1234567890", 10, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, "12345678901234567890", 0, S("abcde"));
+  test(S("abcde"), 0, 0, "12345678901234567890", 1, S("1abcde"));
+  test(S("abcde"), 0, 0, "12345678901234567890", 10, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcde"));
+  test(S("abcde"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 1, "", 0, S("bcde"));
+  test(S("abcde"), 0, 1, "12345", 0, S("bcde"));
+  test(S("abcde"), 0, 1, "12345", 1, S("1bcde"));
+  test(S("abcde"), 0, 1, "12345", 2, S("12bcde"));
+  test(S("abcde"), 0, 1, "12345", 4, S("1234bcde"));
+  test(S("abcde"), 0, 1, "12345", 5, S("12345bcde"));
+  test(S("abcde"), 0, 1, "1234567890", 0, S("bcde"));
+  test(S("abcde"), 0, 1, "1234567890", 1, S("1bcde"));
+  test(S("abcde"), 0, 1, "1234567890", 5, S("12345bcde"));
+  test(S("abcde"), 0, 1, "1234567890", 9, S("123456789bcde"));
+  test(S("abcde"), 0, 1, "1234567890", 10, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, "12345678901234567890", 0, S("bcde"));
+  test(S("abcde"), 0, 1, "12345678901234567890", 1, S("1bcde"));
+  test(S("abcde"), 0, 1, "12345678901234567890", 10, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcde"));
+  test(S("abcde"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 2, "", 0, S("cde"));
+  test(S("abcde"), 0, 2, "12345", 0, S("cde"));
+  test(S("abcde"), 0, 2, "12345", 1, S("1cde"));
+  test(S("abcde"), 0, 2, "12345", 2, S("12cde"));
+  test(S("abcde"), 0, 2, "12345", 4, S("1234cde"));
+  test(S("abcde"), 0, 2, "12345", 5, S("12345cde"));
+  test(S("abcde"), 0, 2, "1234567890", 0, S("cde"));
+  test(S("abcde"), 0, 2, "1234567890", 1, S("1cde"));
+  test(S("abcde"), 0, 2, "1234567890", 5, S("12345cde"));
+  test(S("abcde"), 0, 2, "1234567890", 9, S("123456789cde"));
+  test(S("abcde"), 0, 2, "1234567890", 10, S("1234567890cde"));
+  test(S("abcde"), 0, 2, "12345678901234567890", 0, S("cde"));
+  test(S("abcde"), 0, 2, "12345678901234567890", 1, S("1cde"));
+  test(S("abcde"), 0, 2, "12345678901234567890", 10, S("1234567890cde"));
+  test(S("abcde"), 0, 2, "12345678901234567890", 19, S("1234567890123456789cde"));
+  test(S("abcde"), 0, 2, "12345678901234567890", 20, S("12345678901234567890cde"));
+  test(S("abcde"), 0, 4, "", 0, S("e"));
+  test(S("abcde"), 0, 4, "12345", 0, S("e"));
+  test(S("abcde"), 0, 4, "12345", 1, S("1e"));
+  test(S("abcde"), 0, 4, "12345", 2, S("12e"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S("abcde"), 0, 4, "12345", 4, S("1234e"));
-    test(S("abcde"), 0, 4, "12345", 5, S("12345e"));
-    test(S("abcde"), 0, 4, "1234567890", 0, S("e"));
-    test(S("abcde"), 0, 4, "1234567890", 1, S("1e"));
-    test(S("abcde"), 0, 4, "1234567890", 5, S("12345e"));
-    test(S("abcde"), 0, 4, "1234567890", 9, S("123456789e"));
-    test(S("abcde"), 0, 4, "1234567890", 10, S("1234567890e"));
-    test(S("abcde"), 0, 4, "12345678901234567890", 0, S("e"));
-    test(S("abcde"), 0, 4, "12345678901234567890", 1, S("1e"));
-    test(S("abcde"), 0, 4, "12345678901234567890", 10, S("1234567890e"));
-    test(S("abcde"), 0, 4, "12345678901234567890", 19, S("1234567890123456789e"));
-    test(S("abcde"), 0, 4, "12345678901234567890", 20, S("12345678901234567890e"));
-    test(S("abcde"), 0, 5, "", 0, S(""));
-    test(S("abcde"), 0, 5, "12345", 0, S(""));
-    test(S("abcde"), 0, 5, "12345", 1, S("1"));
-    test(S("abcde"), 0, 5, "12345", 2, S("12"));
-    test(S("abcde"), 0, 5, "12345", 4, S("1234"));
-    test(S("abcde"), 0, 5, "12345", 5, S("12345"));
-    test(S("abcde"), 0, 5, "1234567890", 0, S(""));
-    test(S("abcde"), 0, 5, "1234567890", 1, S("1"));
-    test(S("abcde"), 0, 5, "1234567890", 5, S("12345"));
-    test(S("abcde"), 0, 5, "1234567890", 9, S("123456789"));
-    test(S("abcde"), 0, 5, "1234567890", 10, S("1234567890"));
-    test(S("abcde"), 0, 5, "12345678901234567890", 0, S(""));
-    test(S("abcde"), 0, 5, "12345678901234567890", 1, S("1"));
-    test(S("abcde"), 0, 5, "12345678901234567890", 10, S("1234567890"));
-    test(S("abcde"), 0, 5, "12345678901234567890", 19, S("1234567890123456789"));
-    test(S("abcde"), 0, 5, "12345678901234567890", 20, S("12345678901234567890"));
-    test(S("abcde"), 0, 6, "", 0, S(""));
-    test(S("abcde"), 0, 6, "12345", 0, S(""));
-    test(S("abcde"), 0, 6, "12345", 1, S("1"));
-    test(S("abcde"), 0, 6, "12345", 2, S("12"));
-    test(S("abcde"), 0, 6, "12345", 4, S("1234"));
-    test(S("abcde"), 0, 6, "12345", 5, S("12345"));
-    test(S("abcde"), 0, 6, "1234567890", 0, S(""));
-    test(S("abcde"), 0, 6, "1234567890", 1, S("1"));
-    test(S("abcde"), 0, 6, "1234567890", 5, S("12345"));
-    test(S("abcde"), 0, 6, "1234567890", 9, S("123456789"));
-    test(S("abcde"), 0, 6, "1234567890", 10, S("1234567890"));
-    test(S("abcde"), 0, 6, "12345678901234567890", 0, S(""));
-    test(S("abcde"), 0, 6, "12345678901234567890", 1, S("1"));
-    test(S("abcde"), 0, 6, "12345678901234567890", 10, S("1234567890"));
-    test(S("abcde"), 0, 6, "12345678901234567890", 19, S("1234567890123456789"));
-    test(S("abcde"), 0, 6, "12345678901234567890", 20, S("12345678901234567890"));
-    test(S("abcde"), 1, 0, "", 0, S("abcde"));
-    test(S("abcde"), 1, 0, "12345", 0, S("abcde"));
-    test(S("abcde"), 1, 0, "12345", 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, "12345", 2, S("a12bcde"));
-    test(S("abcde"), 1, 0, "12345", 4, S("a1234bcde"));
-    test(S("abcde"), 1, 0, "12345", 5, S("a12345bcde"));
-    test(S("abcde"), 1, 0, "1234567890", 0, S("abcde"));
-    test(S("abcde"), 1, 0, "1234567890", 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, "1234567890", 5, S("a12345bcde"));
-    test(S("abcde"), 1, 0, "1234567890", 9, S("a123456789bcde"));
-    test(S("abcde"), 1, 0, "1234567890", 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, "12345678901234567890", 0, S("abcde"));
-    test(S("abcde"), 1, 0, "12345678901234567890", 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, "12345678901234567890", 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcde"));
-    test(S("abcde"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 1, "", 0, S("acde"));
-    test(S("abcde"), 1, 1, "12345", 0, S("acde"));
-    test(S("abcde"), 1, 1, "12345", 1, S("a1cde"));
-    test(S("abcde"), 1, 1, "12345", 2, S("a12cde"));
-    test(S("abcde"), 1, 1, "12345", 4, S("a1234cde"));
-    test(S("abcde"), 1, 1, "12345", 5, S("a12345cde"));
-    test(S("abcde"), 1, 1, "1234567890", 0, S("acde"));
-    test(S("abcde"), 1, 1, "1234567890", 1, S("a1cde"));
-    test(S("abcde"), 1, 1, "1234567890", 5, S("a12345cde"));
-    test(S("abcde"), 1, 1, "1234567890", 9, S("a123456789cde"));
-    test(S("abcde"), 1, 1, "1234567890", 10, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, "12345678901234567890", 0, S("acde"));
-    test(S("abcde"), 1, 1, "12345678901234567890", 1, S("a1cde"));
-    test(S("abcde"), 1, 1, "12345678901234567890", 10, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cde"));
-    test(S("abcde"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 2, "", 0, S("ade"));
-    test(S("abcde"), 1, 2, "12345", 0, S("ade"));
-    test(S("abcde"), 1, 2, "12345", 1, S("a1de"));
-    test(S("abcde"), 1, 2, "12345", 2, S("a12de"));
-    test(S("abcde"), 1, 2, "12345", 4, S("a1234de"));
-    test(S("abcde"), 1, 2, "12345", 5, S("a12345de"));
-    test(S("abcde"), 1, 2, "1234567890", 0, S("ade"));
-    test(S("abcde"), 1, 2, "1234567890", 1, S("a1de"));
-    test(S("abcde"), 1, 2, "1234567890", 5, S("a12345de"));
-    test(S("abcde"), 1, 2, "1234567890", 9, S("a123456789de"));
-    test(S("abcde"), 1, 2, "1234567890", 10, S("a1234567890de"));
-    test(S("abcde"), 1, 2, "12345678901234567890", 0, S("ade"));
-    test(S("abcde"), 1, 2, "12345678901234567890", 1, S("a1de"));
-    test(S("abcde"), 1, 2, "12345678901234567890", 10, S("a1234567890de"));
-    test(S("abcde"), 1, 2, "12345678901234567890", 19, S("a1234567890123456789de"));
-    test(S("abcde"), 1, 2, "12345678901234567890", 20, S("a12345678901234567890de"));
-    test(S("abcde"), 1, 3, "", 0, S("ae"));
-    test(S("abcde"), 1, 3, "12345", 0, S("ae"));
-    test(S("abcde"), 1, 3, "12345", 1, S("a1e"));
-    test(S("abcde"), 1, 3, "12345", 2, S("a12e"));
-    test(S("abcde"), 1, 3, "12345", 4, S("a1234e"));
-    test(S("abcde"), 1, 3, "12345", 5, S("a12345e"));
-    test(S("abcde"), 1, 3, "1234567890", 0, S("ae"));
-    test(S("abcde"), 1, 3, "1234567890", 1, S("a1e"));
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S("abcde"), 0, 4, "12345", 4, S("1234e"));
+  test(S("abcde"), 0, 4, "12345", 5, S("12345e"));
+  test(S("abcde"), 0, 4, "1234567890", 0, S("e"));
+  test(S("abcde"), 0, 4, "1234567890", 1, S("1e"));
+  test(S("abcde"), 0, 4, "1234567890", 5, S("12345e"));
+  test(S("abcde"), 0, 4, "1234567890", 9, S("123456789e"));
+  test(S("abcde"), 0, 4, "1234567890", 10, S("1234567890e"));
+  test(S("abcde"), 0, 4, "12345678901234567890", 0, S("e"));
+  test(S("abcde"), 0, 4, "12345678901234567890", 1, S("1e"));
+  test(S("abcde"), 0, 4, "12345678901234567890", 10, S("1234567890e"));
+  test(S("abcde"), 0, 4, "12345678901234567890", 19, S("1234567890123456789e"));
+  test(S("abcde"), 0, 4, "12345678901234567890", 20, S("12345678901234567890e"));
+  test(S("abcde"), 0, 5, "", 0, S(""));
+  test(S("abcde"), 0, 5, "12345", 0, S(""));
+  test(S("abcde"), 0, 5, "12345", 1, S("1"));
+  test(S("abcde"), 0, 5, "12345", 2, S("12"));
+  test(S("abcde"), 0, 5, "12345", 4, S("1234"));
+  test(S("abcde"), 0, 5, "12345", 5, S("12345"));
+  test(S("abcde"), 0, 5, "1234567890", 0, S(""));
+  test(S("abcde"), 0, 5, "1234567890", 1, S("1"));
+  test(S("abcde"), 0, 5, "1234567890", 5, S("12345"));
+  test(S("abcde"), 0, 5, "1234567890", 9, S("123456789"));
+  test(S("abcde"), 0, 5, "1234567890", 10, S("1234567890"));
+  test(S("abcde"), 0, 5, "12345678901234567890", 0, S(""));
+  test(S("abcde"), 0, 5, "12345678901234567890", 1, S("1"));
+  test(S("abcde"), 0, 5, "12345678901234567890", 10, S("1234567890"));
+  test(S("abcde"), 0, 5, "12345678901234567890", 19, S("1234567890123456789"));
+  test(S("abcde"), 0, 5, "12345678901234567890", 20, S("12345678901234567890"));
+  test(S("abcde"), 0, 6, "", 0, S(""));
+  test(S("abcde"), 0, 6, "12345", 0, S(""));
+  test(S("abcde"), 0, 6, "12345", 1, S("1"));
+  test(S("abcde"), 0, 6, "12345", 2, S("12"));
+  test(S("abcde"), 0, 6, "12345", 4, S("1234"));
+  test(S("abcde"), 0, 6, "12345", 5, S("12345"));
+  test(S("abcde"), 0, 6, "1234567890", 0, S(""));
+  test(S("abcde"), 0, 6, "1234567890", 1, S("1"));
+  test(S("abcde"), 0, 6, "1234567890", 5, S("12345"));
+  test(S("abcde"), 0, 6, "1234567890", 9, S("123456789"));
+  test(S("abcde"), 0, 6, "1234567890", 10, S("1234567890"));
+  test(S("abcde"), 0, 6, "12345678901234567890", 0, S(""));
+  test(S("abcde"), 0, 6, "12345678901234567890", 1, S("1"));
+  test(S("abcde"), 0, 6, "12345678901234567890", 10, S("1234567890"));
+  test(S("abcde"), 0, 6, "12345678901234567890", 19, S("1234567890123456789"));
+  test(S("abcde"), 0, 6, "12345678901234567890", 20, S("12345678901234567890"));
+  test(S("abcde"), 1, 0, "", 0, S("abcde"));
+  test(S("abcde"), 1, 0, "12345", 0, S("abcde"));
+  test(S("abcde"), 1, 0, "12345", 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, "12345", 2, S("a12bcde"));
+  test(S("abcde"), 1, 0, "12345", 4, S("a1234bcde"));
+  test(S("abcde"), 1, 0, "12345", 5, S("a12345bcde"));
+  test(S("abcde"), 1, 0, "1234567890", 0, S("abcde"));
+  test(S("abcde"), 1, 0, "1234567890", 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, "1234567890", 5, S("a12345bcde"));
+  test(S("abcde"), 1, 0, "1234567890", 9, S("a123456789bcde"));
+  test(S("abcde"), 1, 0, "1234567890", 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, "12345678901234567890", 0, S("abcde"));
+  test(S("abcde"), 1, 0, "12345678901234567890", 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, "12345678901234567890", 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcde"));
+  test(S("abcde"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 1, "", 0, S("acde"));
+  test(S("abcde"), 1, 1, "12345", 0, S("acde"));
+  test(S("abcde"), 1, 1, "12345", 1, S("a1cde"));
+  test(S("abcde"), 1, 1, "12345", 2, S("a12cde"));
+  test(S("abcde"), 1, 1, "12345", 4, S("a1234cde"));
+  test(S("abcde"), 1, 1, "12345", 5, S("a12345cde"));
+  test(S("abcde"), 1, 1, "1234567890", 0, S("acde"));
+  test(S("abcde"), 1, 1, "1234567890", 1, S("a1cde"));
+  test(S("abcde"), 1, 1, "1234567890", 5, S("a12345cde"));
+  test(S("abcde"), 1, 1, "1234567890", 9, S("a123456789cde"));
+  test(S("abcde"), 1, 1, "1234567890", 10, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, "12345678901234567890", 0, S("acde"));
+  test(S("abcde"), 1, 1, "12345678901234567890", 1, S("a1cde"));
+  test(S("abcde"), 1, 1, "12345678901234567890", 10, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cde"));
+  test(S("abcde"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 2, "", 0, S("ade"));
+  test(S("abcde"), 1, 2, "12345", 0, S("ade"));
+  test(S("abcde"), 1, 2, "12345", 1, S("a1de"));
+  test(S("abcde"), 1, 2, "12345", 2, S("a12de"));
+  test(S("abcde"), 1, 2, "12345", 4, S("a1234de"));
+  test(S("abcde"), 1, 2, "12345", 5, S("a12345de"));
+  test(S("abcde"), 1, 2, "1234567890", 0, S("ade"));
+  test(S("abcde"), 1, 2, "1234567890", 1, S("a1de"));
+  test(S("abcde"), 1, 2, "1234567890", 5, S("a12345de"));
+  test(S("abcde"), 1, 2, "1234567890", 9, S("a123456789de"));
+  test(S("abcde"), 1, 2, "1234567890", 10, S("a1234567890de"));
+  test(S("abcde"), 1, 2, "12345678901234567890", 0, S("ade"));
+  test(S("abcde"), 1, 2, "12345678901234567890", 1, S("a1de"));
+  test(S("abcde"), 1, 2, "12345678901234567890", 10, S("a1234567890de"));
+  test(S("abcde"), 1, 2, "12345678901234567890", 19, S("a1234567890123456789de"));
+  test(S("abcde"), 1, 2, "12345678901234567890", 20, S("a12345678901234567890de"));
+  test(S("abcde"), 1, 3, "", 0, S("ae"));
+  test(S("abcde"), 1, 3, "12345", 0, S("ae"));
+  test(S("abcde"), 1, 3, "12345", 1, S("a1e"));
+  test(S("abcde"), 1, 3, "12345", 2, S("a12e"));
+  test(S("abcde"), 1, 3, "12345", 4, S("a1234e"));
+  test(S("abcde"), 1, 3, "12345", 5, S("a12345e"));
+  test(S("abcde"), 1, 3, "1234567890", 0, S("ae"));
+  test(S("abcde"), 1, 3, "1234567890", 1, S("a1e"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S("abcde"), 1, 3, "1234567890", 5, S("a12345e"));
-    test(S("abcde"), 1, 3, "1234567890", 9, S("a123456789e"));
-    test(S("abcde"), 1, 3, "1234567890", 10, S("a1234567890e"));
-    test(S("abcde"), 1, 3, "12345678901234567890", 0, S("ae"));
-    test(S("abcde"), 1, 3, "12345678901234567890", 1, S("a1e"));
-    test(S("abcde"), 1, 3, "12345678901234567890", 10, S("a1234567890e"));
-    test(S("abcde"), 1, 3, "12345678901234567890", 19, S("a1234567890123456789e"));
-    test(S("abcde"), 1, 3, "12345678901234567890", 20, S("a12345678901234567890e"));
-    test(S("abcde"), 1, 4, "", 0, S("a"));
-    test(S("abcde"), 1, 4, "12345", 0, S("a"));
-    test(S("abcde"), 1, 4, "12345", 1, S("a1"));
-    test(S("abcde"), 1, 4, "12345", 2, S("a12"));
-    test(S("abcde"), 1, 4, "12345", 4, S("a1234"));
-    test(S("abcde"), 1, 4, "12345", 5, S("a12345"));
-    test(S("abcde"), 1, 4, "1234567890", 0, S("a"));
-    test(S("abcde"), 1, 4, "1234567890", 1, S("a1"));
-    test(S("abcde"), 1, 4, "1234567890", 5, S("a12345"));
-    test(S("abcde"), 1, 4, "1234567890", 9, S("a123456789"));
-    test(S("abcde"), 1, 4, "1234567890", 10, S("a1234567890"));
-    test(S("abcde"), 1, 4, "12345678901234567890", 0, S("a"));
-    test(S("abcde"), 1, 4, "12345678901234567890", 1, S("a1"));
-    test(S("abcde"), 1, 4, "12345678901234567890", 10, S("a1234567890"));
-    test(S("abcde"), 1, 4, "12345678901234567890", 19, S("a1234567890123456789"));
-    test(S("abcde"), 1, 4, "12345678901234567890", 20, S("a12345678901234567890"));
-    test(S("abcde"), 1, 5, "", 0, S("a"));
-    test(S("abcde"), 1, 5, "12345", 0, S("a"));
-    test(S("abcde"), 1, 5, "12345", 1, S("a1"));
-    test(S("abcde"), 1, 5, "12345", 2, S("a12"));
-    test(S("abcde"), 1, 5, "12345", 4, S("a1234"));
-    test(S("abcde"), 1, 5, "12345", 5, S("a12345"));
-    test(S("abcde"), 1, 5, "1234567890", 0, S("a"));
-    test(S("abcde"), 1, 5, "1234567890", 1, S("a1"));
-    test(S("abcde"), 1, 5, "1234567890", 5, S("a12345"));
-    test(S("abcde"), 1, 5, "1234567890", 9, S("a123456789"));
-    test(S("abcde"), 1, 5, "1234567890", 10, S("a1234567890"));
-    test(S("abcde"), 1, 5, "12345678901234567890", 0, S("a"));
-    test(S("abcde"), 1, 5, "12345678901234567890", 1, S("a1"));
-    test(S("abcde"), 1, 5, "12345678901234567890", 10, S("a1234567890"));
-    test(S("abcde"), 1, 5, "12345678901234567890", 19, S("a1234567890123456789"));
-    test(S("abcde"), 1, 5, "12345678901234567890", 20, S("a12345678901234567890"));
-    test(S("abcde"), 2, 0, "", 0, S("abcde"));
-    test(S("abcde"), 2, 0, "12345", 0, S("abcde"));
-    test(S("abcde"), 2, 0, "12345", 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, "12345", 2, S("ab12cde"));
-    test(S("abcde"), 2, 0, "12345", 4, S("ab1234cde"));
-    test(S("abcde"), 2, 0, "12345", 5, S("ab12345cde"));
-    test(S("abcde"), 2, 0, "1234567890", 0, S("abcde"));
-    test(S("abcde"), 2, 0, "1234567890", 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, "1234567890", 5, S("ab12345cde"));
-    test(S("abcde"), 2, 0, "1234567890", 9, S("ab123456789cde"));
-    test(S("abcde"), 2, 0, "1234567890", 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, "12345678901234567890", 0, S("abcde"));
-    test(S("abcde"), 2, 0, "12345678901234567890", 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, "12345678901234567890", 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, "12345678901234567890", 19, S("ab1234567890123456789cde"));
-    test(S("abcde"), 2, 0, "12345678901234567890", 20, S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 1, "", 0, S("abde"));
-    test(S("abcde"), 2, 1, "12345", 0, S("abde"));
-    test(S("abcde"), 2, 1, "12345", 1, S("ab1de"));
-    test(S("abcde"), 2, 1, "12345", 2, S("ab12de"));
-    test(S("abcde"), 2, 1, "12345", 4, S("ab1234de"));
-    test(S("abcde"), 2, 1, "12345", 5, S("ab12345de"));
-    test(S("abcde"), 2, 1, "1234567890", 0, S("abde"));
-    test(S("abcde"), 2, 1, "1234567890", 1, S("ab1de"));
-    test(S("abcde"), 2, 1, "1234567890", 5, S("ab12345de"));
-    test(S("abcde"), 2, 1, "1234567890", 9, S("ab123456789de"));
-    test(S("abcde"), 2, 1, "1234567890", 10, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, "12345678901234567890", 0, S("abde"));
-    test(S("abcde"), 2, 1, "12345678901234567890", 1, S("ab1de"));
-    test(S("abcde"), 2, 1, "12345678901234567890", 10, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, "12345678901234567890", 19, S("ab1234567890123456789de"));
-    test(S("abcde"), 2, 1, "12345678901234567890", 20, S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 2, "", 0, S("abe"));
-    test(S("abcde"), 2, 2, "12345", 0, S("abe"));
-    test(S("abcde"), 2, 2, "12345", 1, S("ab1e"));
-    test(S("abcde"), 2, 2, "12345", 2, S("ab12e"));
-    test(S("abcde"), 2, 2, "12345", 4, S("ab1234e"));
-    test(S("abcde"), 2, 2, "12345", 5, S("ab12345e"));
-    test(S("abcde"), 2, 2, "1234567890", 0, S("abe"));
-    test(S("abcde"), 2, 2, "1234567890", 1, S("ab1e"));
-    test(S("abcde"), 2, 2, "1234567890", 5, S("ab12345e"));
-    test(S("abcde"), 2, 2, "1234567890", 9, S("ab123456789e"));
-    test(S("abcde"), 2, 2, "1234567890", 10, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, "12345678901234567890", 0, S("abe"));
-    test(S("abcde"), 2, 2, "12345678901234567890", 1, S("ab1e"));
-    test(S("abcde"), 2, 2, "12345678901234567890", 10, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, "12345678901234567890", 19, S("ab1234567890123456789e"));
-    test(S("abcde"), 2, 2, "12345678901234567890", 20, S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 3, "", 0, S("ab"));
-    test(S("abcde"), 2, 3, "12345", 0, S("ab"));
-    test(S("abcde"), 2, 3, "12345", 1, S("ab1"));
-    test(S("abcde"), 2, 3, "12345", 2, S("ab12"));
-    test(S("abcde"), 2, 3, "12345", 4, S("ab1234"));
-    test(S("abcde"), 2, 3, "12345", 5, S("ab12345"));
-    test(S("abcde"), 2, 3, "1234567890", 0, S("ab"));
-    test(S("abcde"), 2, 3, "1234567890", 1, S("ab1"));
-    test(S("abcde"), 2, 3, "1234567890", 5, S("ab12345"));
-    test(S("abcde"), 2, 3, "1234567890", 9, S("ab123456789"));
-    test(S("abcde"), 2, 3, "1234567890", 10, S("ab1234567890"));
-    test(S("abcde"), 2, 3, "12345678901234567890", 0, S("ab"));
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S("abcde"), 1, 3, "1234567890", 5, S("a12345e"));
+  test(S("abcde"), 1, 3, "1234567890", 9, S("a123456789e"));
+  test(S("abcde"), 1, 3, "1234567890", 10, S("a1234567890e"));
+  test(S("abcde"), 1, 3, "12345678901234567890", 0, S("ae"));
+  test(S("abcde"), 1, 3, "12345678901234567890", 1, S("a1e"));
+  test(S("abcde"), 1, 3, "12345678901234567890", 10, S("a1234567890e"));
+  test(S("abcde"), 1, 3, "12345678901234567890", 19, S("a1234567890123456789e"));
+  test(S("abcde"), 1, 3, "12345678901234567890", 20, S("a12345678901234567890e"));
+  test(S("abcde"), 1, 4, "", 0, S("a"));
+  test(S("abcde"), 1, 4, "12345", 0, S("a"));
+  test(S("abcde"), 1, 4, "12345", 1, S("a1"));
+  test(S("abcde"), 1, 4, "12345", 2, S("a12"));
+  test(S("abcde"), 1, 4, "12345", 4, S("a1234"));
+  test(S("abcde"), 1, 4, "12345", 5, S("a12345"));
+  test(S("abcde"), 1, 4, "1234567890", 0, S("a"));
+  test(S("abcde"), 1, 4, "1234567890", 1, S("a1"));
+  test(S("abcde"), 1, 4, "1234567890", 5, S("a12345"));
+  test(S("abcde"), 1, 4, "1234567890", 9, S("a123456789"));
+  test(S("abcde"), 1, 4, "1234567890", 10, S("a1234567890"));
+  test(S("abcde"), 1, 4, "12345678901234567890", 0, S("a"));
+  test(S("abcde"), 1, 4, "12345678901234567890", 1, S("a1"));
+  test(S("abcde"), 1, 4, "12345678901234567890", 10, S("a1234567890"));
+  test(S("abcde"), 1, 4, "12345678901234567890", 19, S("a1234567890123456789"));
+  test(S("abcde"), 1, 4, "12345678901234567890", 20, S("a12345678901234567890"));
+  test(S("abcde"), 1, 5, "", 0, S("a"));
+  test(S("abcde"), 1, 5, "12345", 0, S("a"));
+  test(S("abcde"), 1, 5, "12345", 1, S("a1"));
+  test(S("abcde"), 1, 5, "12345", 2, S("a12"));
+  test(S("abcde"), 1, 5, "12345", 4, S("a1234"));
+  test(S("abcde"), 1, 5, "12345", 5, S("a12345"));
+  test(S("abcde"), 1, 5, "1234567890", 0, S("a"));
+  test(S("abcde"), 1, 5, "1234567890", 1, S("a1"));
+  test(S("abcde"), 1, 5, "1234567890", 5, S("a12345"));
+  test(S("abcde"), 1, 5, "1234567890", 9, S("a123456789"));
+  test(S("abcde"), 1, 5, "1234567890", 10, S("a1234567890"));
+  test(S("abcde"), 1, 5, "12345678901234567890", 0, S("a"));
+  test(S("abcde"), 1, 5, "12345678901234567890", 1, S("a1"));
+  test(S("abcde"), 1, 5, "12345678901234567890", 10, S("a1234567890"));
+  test(S("abcde"), 1, 5, "12345678901234567890", 19, S("a1234567890123456789"));
+  test(S("abcde"), 1, 5, "12345678901234567890", 20, S("a12345678901234567890"));
+  test(S("abcde"), 2, 0, "", 0, S("abcde"));
+  test(S("abcde"), 2, 0, "12345", 0, S("abcde"));
+  test(S("abcde"), 2, 0, "12345", 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, "12345", 2, S("ab12cde"));
+  test(S("abcde"), 2, 0, "12345", 4, S("ab1234cde"));
+  test(S("abcde"), 2, 0, "12345", 5, S("ab12345cde"));
+  test(S("abcde"), 2, 0, "1234567890", 0, S("abcde"));
+  test(S("abcde"), 2, 0, "1234567890", 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, "1234567890", 5, S("ab12345cde"));
+  test(S("abcde"), 2, 0, "1234567890", 9, S("ab123456789cde"));
+  test(S("abcde"), 2, 0, "1234567890", 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, "12345678901234567890", 0, S("abcde"));
+  test(S("abcde"), 2, 0, "12345678901234567890", 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, "12345678901234567890", 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, "12345678901234567890", 19, S("ab1234567890123456789cde"));
+  test(S("abcde"), 2, 0, "12345678901234567890", 20, S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 1, "", 0, S("abde"));
+  test(S("abcde"), 2, 1, "12345", 0, S("abde"));
+  test(S("abcde"), 2, 1, "12345", 1, S("ab1de"));
+  test(S("abcde"), 2, 1, "12345", 2, S("ab12de"));
+  test(S("abcde"), 2, 1, "12345", 4, S("ab1234de"));
+  test(S("abcde"), 2, 1, "12345", 5, S("ab12345de"));
+  test(S("abcde"), 2, 1, "1234567890", 0, S("abde"));
+  test(S("abcde"), 2, 1, "1234567890", 1, S("ab1de"));
+  test(S("abcde"), 2, 1, "1234567890", 5, S("ab12345de"));
+  test(S("abcde"), 2, 1, "1234567890", 9, S("ab123456789de"));
+  test(S("abcde"), 2, 1, "1234567890", 10, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, "12345678901234567890", 0, S("abde"));
+  test(S("abcde"), 2, 1, "12345678901234567890", 1, S("ab1de"));
+  test(S("abcde"), 2, 1, "12345678901234567890", 10, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, "12345678901234567890", 19, S("ab1234567890123456789de"));
+  test(S("abcde"), 2, 1, "12345678901234567890", 20, S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 2, "", 0, S("abe"));
+  test(S("abcde"), 2, 2, "12345", 0, S("abe"));
+  test(S("abcde"), 2, 2, "12345", 1, S("ab1e"));
+  test(S("abcde"), 2, 2, "12345", 2, S("ab12e"));
+  test(S("abcde"), 2, 2, "12345", 4, S("ab1234e"));
+  test(S("abcde"), 2, 2, "12345", 5, S("ab12345e"));
+  test(S("abcde"), 2, 2, "1234567890", 0, S("abe"));
+  test(S("abcde"), 2, 2, "1234567890", 1, S("ab1e"));
+  test(S("abcde"), 2, 2, "1234567890", 5, S("ab12345e"));
+  test(S("abcde"), 2, 2, "1234567890", 9, S("ab123456789e"));
+  test(S("abcde"), 2, 2, "1234567890", 10, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, "12345678901234567890", 0, S("abe"));
+  test(S("abcde"), 2, 2, "12345678901234567890", 1, S("ab1e"));
+  test(S("abcde"), 2, 2, "12345678901234567890", 10, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, "12345678901234567890", 19, S("ab1234567890123456789e"));
+  test(S("abcde"), 2, 2, "12345678901234567890", 20, S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 3, "", 0, S("ab"));
+  test(S("abcde"), 2, 3, "12345", 0, S("ab"));
+  test(S("abcde"), 2, 3, "12345", 1, S("ab1"));
+  test(S("abcde"), 2, 3, "12345", 2, S("ab12"));
+  test(S("abcde"), 2, 3, "12345", 4, S("ab1234"));
+  test(S("abcde"), 2, 3, "12345", 5, S("ab12345"));
+  test(S("abcde"), 2, 3, "1234567890", 0, S("ab"));
+  test(S("abcde"), 2, 3, "1234567890", 1, S("ab1"));
+  test(S("abcde"), 2, 3, "1234567890", 5, S("ab12345"));
+  test(S("abcde"), 2, 3, "1234567890", 9, S("ab123456789"));
+  test(S("abcde"), 2, 3, "1234567890", 10, S("ab1234567890"));
+  test(S("abcde"), 2, 3, "12345678901234567890", 0, S("ab"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test3()
-{
-    test(S("abcde"), 2, 3, "12345678901234567890", 1, S("ab1"));
-    test(S("abcde"), 2, 3, "12345678901234567890", 10, S("ab1234567890"));
-    test(S("abcde"), 2, 3, "12345678901234567890", 19, S("ab1234567890123456789"));
-    test(S("abcde"), 2, 3, "12345678901234567890", 20, S("ab12345678901234567890"));
-    test(S("abcde"), 2, 4, "", 0, S("ab"));
-    test(S("abcde"), 2, 4, "12345", 0, S("ab"));
-    test(S("abcde"), 2, 4, "12345", 1, S("ab1"));
-    test(S("abcde"), 2, 4, "12345", 2, S("ab12"));
-    test(S("abcde"), 2, 4, "12345", 4, S("ab1234"));
-    test(S("abcde"), 2, 4, "12345", 5, S("ab12345"));
-    test(S("abcde"), 2, 4, "1234567890", 0, S("ab"));
-    test(S("abcde"), 2, 4, "1234567890", 1, S("ab1"));
-    test(S("abcde"), 2, 4, "1234567890", 5, S("ab12345"));
-    test(S("abcde"), 2, 4, "1234567890", 9, S("ab123456789"));
-    test(S("abcde"), 2, 4, "1234567890", 10, S("ab1234567890"));
-    test(S("abcde"), 2, 4, "12345678901234567890", 0, S("ab"));
-    test(S("abcde"), 2, 4, "12345678901234567890", 1, S("ab1"));
-    test(S("abcde"), 2, 4, "12345678901234567890", 10, S("ab1234567890"));
-    test(S("abcde"), 2, 4, "12345678901234567890", 19, S("ab1234567890123456789"));
-    test(S("abcde"), 2, 4, "12345678901234567890", 20, S("ab12345678901234567890"));
-    test(S("abcde"), 4, 0, "", 0, S("abcde"));
-    test(S("abcde"), 4, 0, "12345", 0, S("abcde"));
-    test(S("abcde"), 4, 0, "12345", 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, "12345", 2, S("abcd12e"));
-    test(S("abcde"), 4, 0, "12345", 4, S("abcd1234e"));
-    test(S("abcde"), 4, 0, "12345", 5, S("abcd12345e"));
-    test(S("abcde"), 4, 0, "1234567890", 0, S("abcde"));
-    test(S("abcde"), 4, 0, "1234567890", 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, "1234567890", 5, S("abcd12345e"));
-    test(S("abcde"), 4, 0, "1234567890", 9, S("abcd123456789e"));
-    test(S("abcde"), 4, 0, "1234567890", 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, "12345678901234567890", 0, S("abcde"));
-    test(S("abcde"), 4, 0, "12345678901234567890", 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, "12345678901234567890", 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, "12345678901234567890", 19, S("abcd1234567890123456789e"));
-    test(S("abcde"), 4, 0, "12345678901234567890", 20, S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 1, "", 0, S("abcd"));
-    test(S("abcde"), 4, 1, "12345", 0, S("abcd"));
-    test(S("abcde"), 4, 1, "12345", 1, S("abcd1"));
-    test(S("abcde"), 4, 1, "12345", 2, S("abcd12"));
-    test(S("abcde"), 4, 1, "12345", 4, S("abcd1234"));
-    test(S("abcde"), 4, 1, "12345", 5, S("abcd12345"));
-    test(S("abcde"), 4, 1, "1234567890", 0, S("abcd"));
-    test(S("abcde"), 4, 1, "1234567890", 1, S("abcd1"));
-    test(S("abcde"), 4, 1, "1234567890", 5, S("abcd12345"));
-    test(S("abcde"), 4, 1, "1234567890", 9, S("abcd123456789"));
-    test(S("abcde"), 4, 1, "1234567890", 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, "12345678901234567890", 0, S("abcd"));
-    test(S("abcde"), 4, 1, "12345678901234567890", 1, S("abcd1"));
-    test(S("abcde"), 4, 1, "12345678901234567890", 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, "12345678901234567890", 19, S("abcd1234567890123456789"));
-    test(S("abcde"), 4, 1, "12345678901234567890", 20, S("abcd12345678901234567890"));
-    test(S("abcde"), 4, 2, "", 0, S("abcd"));
-    test(S("abcde"), 4, 2, "12345", 0, S("abcd"));
-    test(S("abcde"), 4, 2, "12345", 1, S("abcd1"));
-    test(S("abcde"), 4, 2, "12345", 2, S("abcd12"));
-    test(S("abcde"), 4, 2, "12345", 4, S("abcd1234"));
-    test(S("abcde"), 4, 2, "12345", 5, S("abcd12345"));
-    test(S("abcde"), 4, 2, "1234567890", 0, S("abcd"));
-    test(S("abcde"), 4, 2, "1234567890", 1, S("abcd1"));
-    test(S("abcde"), 4, 2, "1234567890", 5, S("abcd12345"));
-    test(S("abcde"), 4, 2, "1234567890", 9, S("abcd123456789"));
-    test(S("abcde"), 4, 2, "1234567890", 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 2, "12345678901234567890", 0, S("abcd"));
-    test(S("abcde"), 4, 2, "12345678901234567890", 1, S("abcd1"));
-    test(S("abcde"), 4, 2, "12345678901234567890", 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 2, "12345678901234567890", 19, S("abcd1234567890123456789"));
-    test(S("abcde"), 4, 2, "12345678901234567890", 20, S("abcd12345678901234567890"));
-    test(S("abcde"), 5, 0, "", 0, S("abcde"));
-    test(S("abcde"), 5, 0, "12345", 0, S("abcde"));
-    test(S("abcde"), 5, 0, "12345", 1, S("abcde1"));
-    test(S("abcde"), 5, 0, "12345", 2, S("abcde12"));
-    test(S("abcde"), 5, 0, "12345", 4, S("abcde1234"));
-    test(S("abcde"), 5, 0, "12345", 5, S("abcde12345"));
-    test(S("abcde"), 5, 0, "1234567890", 0, S("abcde"));
-    test(S("abcde"), 5, 0, "1234567890", 1, S("abcde1"));
-    test(S("abcde"), 5, 0, "1234567890", 5, S("abcde12345"));
-    test(S("abcde"), 5, 0, "1234567890", 9, S("abcde123456789"));
-    test(S("abcde"), 5, 0, "1234567890", 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, "12345678901234567890", 0, S("abcde"));
-    test(S("abcde"), 5, 0, "12345678901234567890", 1, S("abcde1"));
-    test(S("abcde"), 5, 0, "12345678901234567890", 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, "12345678901234567890", 19, S("abcde1234567890123456789"));
-    test(S("abcde"), 5, 0, "12345678901234567890", 20, S("abcde12345678901234567890"));
-    test(S("abcde"), 5, 1, "", 0, S("abcde"));
-    test(S("abcde"), 5, 1, "12345", 0, S("abcde"));
-    test(S("abcde"), 5, 1, "12345", 1, S("abcde1"));
-    test(S("abcde"), 5, 1, "12345", 2, S("abcde12"));
-    test(S("abcde"), 5, 1, "12345", 4, S("abcde1234"));
-    test(S("abcde"), 5, 1, "12345", 5, S("abcde12345"));
-    test(S("abcde"), 5, 1, "1234567890", 0, S("abcde"));
-    test(S("abcde"), 5, 1, "1234567890", 1, S("abcde1"));
-    test(S("abcde"), 5, 1, "1234567890", 5, S("abcde12345"));
-    test(S("abcde"), 5, 1, "1234567890", 9, S("abcde123456789"));
-    test(S("abcde"), 5, 1, "1234567890", 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 1, "12345678901234567890", 0, S("abcde"));
-    test(S("abcde"), 5, 1, "12345678901234567890", 1, S("abcde1"));
-    test(S("abcde"), 5, 1, "12345678901234567890", 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 1, "12345678901234567890", 19, S("abcde1234567890123456789"));
-    test(S("abcde"), 5, 1, "12345678901234567890", 20, S("abcde12345678901234567890"));
+TEST_CONSTEXPR_CXX20 bool test3() {
+  test(S("abcde"), 2, 3, "12345678901234567890", 1, S("ab1"));
+  test(S("abcde"), 2, 3, "12345678901234567890", 10, S("ab1234567890"));
+  test(S("abcde"), 2, 3, "12345678901234567890", 19, S("ab1234567890123456789"));
+  test(S("abcde"), 2, 3, "12345678901234567890", 20, S("ab12345678901234567890"));
+  test(S("abcde"), 2, 4, "", 0, S("ab"));
+  test(S("abcde"), 2, 4, "12345", 0, S("ab"));
+  test(S("abcde"), 2, 4, "12345", 1, S("ab1"));
+  test(S("abcde"), 2, 4, "12345", 2, S("ab12"));
+  test(S("abcde"), 2, 4, "12345", 4, S("ab1234"));
+  test(S("abcde"), 2, 4, "12345", 5, S("ab12345"));
+  test(S("abcde"), 2, 4, "1234567890", 0, S("ab"));
+  test(S("abcde"), 2, 4, "1234567890", 1, S("ab1"));
+  test(S("abcde"), 2, 4, "1234567890", 5, S("ab12345"));
+  test(S("abcde"), 2, 4, "1234567890", 9, S("ab123456789"));
+  test(S("abcde"), 2, 4, "1234567890", 10, S("ab1234567890"));
+  test(S("abcde"), 2, 4, "12345678901234567890", 0, S("ab"));
+  test(S("abcde"), 2, 4, "12345678901234567890", 1, S("ab1"));
+  test(S("abcde"), 2, 4, "12345678901234567890", 10, S("ab1234567890"));
+  test(S("abcde"), 2, 4, "12345678901234567890", 19, S("ab1234567890123456789"));
+  test(S("abcde"), 2, 4, "12345678901234567890", 20, S("ab12345678901234567890"));
+  test(S("abcde"), 4, 0, "", 0, S("abcde"));
+  test(S("abcde"), 4, 0, "12345", 0, S("abcde"));
+  test(S("abcde"), 4, 0, "12345", 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, "12345", 2, S("abcd12e"));
+  test(S("abcde"), 4, 0, "12345", 4, S("abcd1234e"));
+  test(S("abcde"), 4, 0, "12345", 5, S("abcd12345e"));
+  test(S("abcde"), 4, 0, "1234567890", 0, S("abcde"));
+  test(S("abcde"), 4, 0, "1234567890", 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, "1234567890", 5, S("abcd12345e"));
+  test(S("abcde"), 4, 0, "1234567890", 9, S("abcd123456789e"));
+  test(S("abcde"), 4, 0, "1234567890", 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, "12345678901234567890", 0, S("abcde"));
+  test(S("abcde"), 4, 0, "12345678901234567890", 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, "12345678901234567890", 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, "12345678901234567890", 19, S("abcd1234567890123456789e"));
+  test(S("abcde"), 4, 0, "12345678901234567890", 20, S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 1, "", 0, S("abcd"));
+  test(S("abcde"), 4, 1, "12345", 0, S("abcd"));
+  test(S("abcde"), 4, 1, "12345", 1, S("abcd1"));
+  test(S("abcde"), 4, 1, "12345", 2, S("abcd12"));
+  test(S("abcde"), 4, 1, "12345", 4, S("abcd1234"));
+  test(S("abcde"), 4, 1, "12345", 5, S("abcd12345"));
+  test(S("abcde"), 4, 1, "1234567890", 0, S("abcd"));
+  test(S("abcde"), 4, 1, "1234567890", 1, S("abcd1"));
+  test(S("abcde"), 4, 1, "1234567890", 5, S("abcd12345"));
+  test(S("abcde"), 4, 1, "1234567890", 9, S("abcd123456789"));
+  test(S("abcde"), 4, 1, "1234567890", 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, "12345678901234567890", 0, S("abcd"));
+  test(S("abcde"), 4, 1, "12345678901234567890", 1, S("abcd1"));
+  test(S("abcde"), 4, 1, "12345678901234567890", 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, "12345678901234567890", 19, S("abcd1234567890123456789"));
+  test(S("abcde"), 4, 1, "12345678901234567890", 20, S("abcd12345678901234567890"));
+  test(S("abcde"), 4, 2, "", 0, S("abcd"));
+  test(S("abcde"), 4, 2, "12345", 0, S("abcd"));
+  test(S("abcde"), 4, 2, "12345", 1, S("abcd1"));
+  test(S("abcde"), 4, 2, "12345", 2, S("abcd12"));
+  test(S("abcde"), 4, 2, "12345", 4, S("abcd1234"));
+  test(S("abcde"), 4, 2, "12345", 5, S("abcd12345"));
+  test(S("abcde"), 4, 2, "1234567890", 0, S("abcd"));
+  test(S("abcde"), 4, 2, "1234567890", 1, S("abcd1"));
+  test(S("abcde"), 4, 2, "1234567890", 5, S("abcd12345"));
+  test(S("abcde"), 4, 2, "1234567890", 9, S("abcd123456789"));
+  test(S("abcde"), 4, 2, "1234567890", 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 2, "12345678901234567890", 0, S("abcd"));
+  test(S("abcde"), 4, 2, "12345678901234567890", 1, S("abcd1"));
+  test(S("abcde"), 4, 2, "12345678901234567890", 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 2, "12345678901234567890", 19, S("abcd1234567890123456789"));
+  test(S("abcde"), 4, 2, "12345678901234567890", 20, S("abcd12345678901234567890"));
+  test(S("abcde"), 5, 0, "", 0, S("abcde"));
+  test(S("abcde"), 5, 0, "12345", 0, S("abcde"));
+  test(S("abcde"), 5, 0, "12345", 1, S("abcde1"));
+  test(S("abcde"), 5, 0, "12345", 2, S("abcde12"));
+  test(S("abcde"), 5, 0, "12345", 4, S("abcde1234"));
+  test(S("abcde"), 5, 0, "12345", 5, S("abcde12345"));
+  test(S("abcde"), 5, 0, "1234567890", 0, S("abcde"));
+  test(S("abcde"), 5, 0, "1234567890", 1, S("abcde1"));
+  test(S("abcde"), 5, 0, "1234567890", 5, S("abcde12345"));
+  test(S("abcde"), 5, 0, "1234567890", 9, S("abcde123456789"));
+  test(S("abcde"), 5, 0, "1234567890", 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, "12345678901234567890", 0, S("abcde"));
+  test(S("abcde"), 5, 0, "12345678901234567890", 1, S("abcde1"));
+  test(S("abcde"), 5, 0, "12345678901234567890", 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, "12345678901234567890", 19, S("abcde1234567890123456789"));
+  test(S("abcde"), 5, 0, "12345678901234567890", 20, S("abcde12345678901234567890"));
+  test(S("abcde"), 5, 1, "", 0, S("abcde"));
+  test(S("abcde"), 5, 1, "12345", 0, S("abcde"));
+  test(S("abcde"), 5, 1, "12345", 1, S("abcde1"));
+  test(S("abcde"), 5, 1, "12345", 2, S("abcde12"));
+  test(S("abcde"), 5, 1, "12345", 4, S("abcde1234"));
+  test(S("abcde"), 5, 1, "12345", 5, S("abcde12345"));
+  test(S("abcde"), 5, 1, "1234567890", 0, S("abcde"));
+  test(S("abcde"), 5, 1, "1234567890", 1, S("abcde1"));
+  test(S("abcde"), 5, 1, "1234567890", 5, S("abcde12345"));
+  test(S("abcde"), 5, 1, "1234567890", 9, S("abcde123456789"));
+  test(S("abcde"), 5, 1, "1234567890", 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 1, "12345678901234567890", 0, S("abcde"));
+  test(S("abcde"), 5, 1, "12345678901234567890", 1, S("abcde1"));
+  test(S("abcde"), 5, 1, "12345678901234567890", 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 1, "12345678901234567890", 19, S("abcde1234567890123456789"));
+  test(S("abcde"), 5, 1, "12345678901234567890", 20, S("abcde12345678901234567890"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test4()
-{
-    test(S("abcde"), 6, 0, "", 0, S("can't happen"));
-    test(S("abcde"), 6, 0, "12345", 0, S("can't happen"));
-    test(S("abcde"), 6, 0, "12345", 1, S("can't happen"));
-    test(S("abcde"), 6, 0, "12345", 2, S("can't happen"));
-    test(S("abcde"), 6, 0, "12345", 4, S("can't happen"));
-    test(S("abcde"), 6, 0, "12345", 5, S("can't happen"));
-    test(S("abcde"), 6, 0, "1234567890", 0, S("can't happen"));
-    test(S("abcde"), 6, 0, "1234567890", 1, S("can't happen"));
-    test(S("abcde"), 6, 0, "1234567890", 5, S("can't happen"));
-    test(S("abcde"), 6, 0, "1234567890", 9, S("can't happen"));
-    test(S("abcde"), 6, 0, "1234567890", 10, S("can't happen"));
-    test(S("abcde"), 6, 0, "12345678901234567890", 0, S("can't happen"));
-    test(S("abcde"), 6, 0, "12345678901234567890", 1, S("can't happen"));
-    test(S("abcde"), 6, 0, "12345678901234567890", 10, S("can't happen"));
-    test(S("abcde"), 6, 0, "12345678901234567890", 19, S("can't happen"));
-    test(S("abcde"), 6, 0, "12345678901234567890", 20, S("can't happen"));
-    test(S("abcdefghij"), 0, 0, "", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345", 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345", 2, S("12abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345", 4, S("1234abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345", 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "1234567890", 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "1234567890", 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "1234567890", 9, S("123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "1234567890", 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345678901234567890", 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345678901234567890", 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 1, "", 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345", 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345", 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345", 2, S("12bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345", 4, S("1234bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345", 5, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "1234567890", 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "1234567890", 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "1234567890", 5, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "1234567890", 9, S("123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "1234567890", 10, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345678901234567890", 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345678901234567890", 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345678901234567890", 10, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 5, "", 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, "12345", 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, "12345", 1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, "12345", 2, S("12fghij"));
-    test(S("abcdefghij"), 0, 5, "12345", 4, S("1234fghij"));
-    test(S("abcdefghij"), 0, 5, "12345", 5, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, "1234567890", 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, "1234567890", 1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, "1234567890", 5, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, "1234567890", 9, S("123456789fghij"));
-    test(S("abcdefghij"), 0, 5, "1234567890", 10, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, "12345678901234567890", 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, "12345678901234567890", 1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, "12345678901234567890", 10, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, "12345678901234567890", 19, S("1234567890123456789fghij"));
-    test(S("abcdefghij"), 0, 5, "12345678901234567890", 20, S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 9, "", 0, S("j"));
-    test(S("abcdefghij"), 0, 9, "12345", 0, S("j"));
-    test(S("abcdefghij"), 0, 9, "12345", 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, "12345", 2, S("12j"));
-    test(S("abcdefghij"), 0, 9, "12345", 4, S("1234j"));
-    test(S("abcdefghij"), 0, 9, "12345", 5, S("12345j"));
-    test(S("abcdefghij"), 0, 9, "1234567890", 0, S("j"));
-    test(S("abcdefghij"), 0, 9, "1234567890", 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, "1234567890", 5, S("12345j"));
-    test(S("abcdefghij"), 0, 9, "1234567890", 9, S("123456789j"));
-    test(S("abcdefghij"), 0, 9, "1234567890", 10, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, "12345678901234567890", 0, S("j"));
-    test(S("abcdefghij"), 0, 9, "12345678901234567890", 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, "12345678901234567890", 10, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, "12345678901234567890", 19, S("1234567890123456789j"));
-    test(S("abcdefghij"), 0, 9, "12345678901234567890", 20, S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 10, "", 0, S(""));
-    test(S("abcdefghij"), 0, 10, "12345", 0, S(""));
-    test(S("abcdefghij"), 0, 10, "12345", 1, S("1"));
-    test(S("abcdefghij"), 0, 10, "12345", 2, S("12"));
-    test(S("abcdefghij"), 0, 10, "12345", 4, S("1234"));
-    test(S("abcdefghij"), 0, 10, "12345", 5, S("12345"));
-    test(S("abcdefghij"), 0, 10, "1234567890", 0, S(""));
-    test(S("abcdefghij"), 0, 10, "1234567890", 1, S("1"));
-    test(S("abcdefghij"), 0, 10, "1234567890", 5, S("12345"));
-    test(S("abcdefghij"), 0, 10, "1234567890", 9, S("123456789"));
-    test(S("abcdefghij"), 0, 10, "1234567890", 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, "12345678901234567890", 0, S(""));
-    test(S("abcdefghij"), 0, 10, "12345678901234567890", 1, S("1"));
-    test(S("abcdefghij"), 0, 10, "12345678901234567890", 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, "12345678901234567890", 19, S("1234567890123456789"));
-    test(S("abcdefghij"), 0, 10, "12345678901234567890", 20, S("12345678901234567890"));
-    test(S("abcdefghij"), 0, 11, "", 0, S(""));
-    test(S("abcdefghij"), 0, 11, "12345", 0, S(""));
-    test(S("abcdefghij"), 0, 11, "12345", 1, S("1"));
-    test(S("abcdefghij"), 0, 11, "12345", 2, S("12"));
+TEST_CONSTEXPR_CXX20 bool test4() {
+  test(S("abcde"), 6, 0, "", 0, S("can't happen"));
+  test(S("abcde"), 6, 0, "12345", 0, S("can't happen"));
+  test(S("abcde"), 6, 0, "12345", 1, S("can't happen"));
+  test(S("abcde"), 6, 0, "12345", 2, S("can't happen"));
+  test(S("abcde"), 6, 0, "12345", 4, S("can't happen"));
+  test(S("abcde"), 6, 0, "12345", 5, S("can't happen"));
+  test(S("abcde"), 6, 0, "1234567890", 0, S("can't happen"));
+  test(S("abcde"), 6, 0, "1234567890", 1, S("can't happen"));
+  test(S("abcde"), 6, 0, "1234567890", 5, S("can't happen"));
+  test(S("abcde"), 6, 0, "1234567890", 9, S("can't happen"));
+  test(S("abcde"), 6, 0, "1234567890", 10, S("can't happen"));
+  test(S("abcde"), 6, 0, "12345678901234567890", 0, S("can't happen"));
+  test(S("abcde"), 6, 0, "12345678901234567890", 1, S("can't happen"));
+  test(S("abcde"), 6, 0, "12345678901234567890", 10, S("can't happen"));
+  test(S("abcde"), 6, 0, "12345678901234567890", 19, S("can't happen"));
+  test(S("abcde"), 6, 0, "12345678901234567890", 20, S("can't happen"));
+  test(S("abcdefghij"), 0, 0, "", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345", 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345", 2, S("12abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345", 4, S("1234abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345", 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "1234567890", 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "1234567890", 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "1234567890", 9, S("123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "1234567890", 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345678901234567890", 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345678901234567890", 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 1, "", 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345", 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345", 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345", 2, S("12bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345", 4, S("1234bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345", 5, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "1234567890", 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "1234567890", 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "1234567890", 5, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "1234567890", 9, S("123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "1234567890", 10, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345678901234567890", 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345678901234567890", 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345678901234567890", 10, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 5, "", 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, "12345", 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, "12345", 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, "12345", 2, S("12fghij"));
+  test(S("abcdefghij"), 0, 5, "12345", 4, S("1234fghij"));
+  test(S("abcdefghij"), 0, 5, "12345", 5, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, "1234567890", 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, "1234567890", 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, "1234567890", 5, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, "1234567890", 9, S("123456789fghij"));
+  test(S("abcdefghij"), 0, 5, "1234567890", 10, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, "12345678901234567890", 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, "12345678901234567890", 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, "12345678901234567890", 10, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, "12345678901234567890", 19, S("1234567890123456789fghij"));
+  test(S("abcdefghij"), 0, 5, "12345678901234567890", 20, S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 9, "", 0, S("j"));
+  test(S("abcdefghij"), 0, 9, "12345", 0, S("j"));
+  test(S("abcdefghij"), 0, 9, "12345", 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, "12345", 2, S("12j"));
+  test(S("abcdefghij"), 0, 9, "12345", 4, S("1234j"));
+  test(S("abcdefghij"), 0, 9, "12345", 5, S("12345j"));
+  test(S("abcdefghij"), 0, 9, "1234567890", 0, S("j"));
+  test(S("abcdefghij"), 0, 9, "1234567890", 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, "1234567890", 5, S("12345j"));
+  test(S("abcdefghij"), 0, 9, "1234567890", 9, S("123456789j"));
+  test(S("abcdefghij"), 0, 9, "1234567890", 10, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, "12345678901234567890", 0, S("j"));
+  test(S("abcdefghij"), 0, 9, "12345678901234567890", 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, "12345678901234567890", 10, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, "12345678901234567890", 19, S("1234567890123456789j"));
+  test(S("abcdefghij"), 0, 9, "12345678901234567890", 20, S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 10, "", 0, S(""));
+  test(S("abcdefghij"), 0, 10, "12345", 0, S(""));
+  test(S("abcdefghij"), 0, 10, "12345", 1, S("1"));
+  test(S("abcdefghij"), 0, 10, "12345", 2, S("12"));
+  test(S("abcdefghij"), 0, 10, "12345", 4, S("1234"));
+  test(S("abcdefghij"), 0, 10, "12345", 5, S("12345"));
+  test(S("abcdefghij"), 0, 10, "1234567890", 0, S(""));
+  test(S("abcdefghij"), 0, 10, "1234567890", 1, S("1"));
+  test(S("abcdefghij"), 0, 10, "1234567890", 5, S("12345"));
+  test(S("abcdefghij"), 0, 10, "1234567890", 9, S("123456789"));
+  test(S("abcdefghij"), 0, 10, "1234567890", 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, "12345678901234567890", 0, S(""));
+  test(S("abcdefghij"), 0, 10, "12345678901234567890", 1, S("1"));
+  test(S("abcdefghij"), 0, 10, "12345678901234567890", 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, "12345678901234567890", 19, S("1234567890123456789"));
+  test(S("abcdefghij"), 0, 10, "12345678901234567890", 20, S("12345678901234567890"));
+  test(S("abcdefghij"), 0, 11, "", 0, S(""));
+  test(S("abcdefghij"), 0, 11, "12345", 0, S(""));
+  test(S("abcdefghij"), 0, 11, "12345", 1, S("1"));
+  test(S("abcdefghij"), 0, 11, "12345", 2, S("12"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test5()
-{
-    test(S("abcdefghij"), 0, 11, "12345", 4, S("1234"));
-    test(S("abcdefghij"), 0, 11, "12345", 5, S("12345"));
-    test(S("abcdefghij"), 0, 11, "1234567890", 0, S(""));
-    test(S("abcdefghij"), 0, 11, "1234567890", 1, S("1"));
-    test(S("abcdefghij"), 0, 11, "1234567890", 5, S("12345"));
-    test(S("abcdefghij"), 0, 11, "1234567890", 9, S("123456789"));
-    test(S("abcdefghij"), 0, 11, "1234567890", 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 11, "12345678901234567890", 0, S(""));
-    test(S("abcdefghij"), 0, 11, "12345678901234567890", 1, S("1"));
-    test(S("abcdefghij"), 0, 11, "12345678901234567890", 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 11, "12345678901234567890", 19, S("1234567890123456789"));
-    test(S("abcdefghij"), 0, 11, "12345678901234567890", 20, S("12345678901234567890"));
-    test(S("abcdefghij"), 1, 0, "", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345", 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345", 2, S("a12bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345", 4, S("a1234bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345", 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, "1234567890", 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "1234567890", 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "1234567890", 9, S("a123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "1234567890", 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345678901234567890", 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345678901234567890", 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 1, "", 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345", 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345", 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345", 2, S("a12cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345", 4, S("a1234cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345", 5, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, "1234567890", 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, "1234567890", 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, "1234567890", 5, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, "1234567890", 9, S("a123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, "1234567890", 10, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345678901234567890", 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345678901234567890", 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345678901234567890", 10, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cdefghij"));
-    test(S("abcdefghij"), 1, 4, "", 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, "12345", 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, "12345", 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, "12345", 2, S("a12fghij"));
-    test(S("abcdefghij"), 1, 4, "12345", 4, S("a1234fghij"));
-    test(S("abcdefghij"), 1, 4, "12345", 5, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, "1234567890", 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, "1234567890", 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, "1234567890", 5, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, "1234567890", 9, S("a123456789fghij"));
-    test(S("abcdefghij"), 1, 4, "1234567890", 10, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, "12345678901234567890", 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, "12345678901234567890", 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, "12345678901234567890", 10, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, "12345678901234567890", 19, S("a1234567890123456789fghij"));
-    test(S("abcdefghij"), 1, 4, "12345678901234567890", 20, S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 8, "", 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, "12345", 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, "12345", 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, "12345", 2, S("a12j"));
-    test(S("abcdefghij"), 1, 8, "12345", 4, S("a1234j"));
-    test(S("abcdefghij"), 1, 8, "12345", 5, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, "1234567890", 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, "1234567890", 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, "1234567890", 5, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, "1234567890", 9, S("a123456789j"));
-    test(S("abcdefghij"), 1, 8, "1234567890", 10, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, "12345678901234567890", 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, "12345678901234567890", 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, "12345678901234567890", 10, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, "12345678901234567890", 19, S("a1234567890123456789j"));
-    test(S("abcdefghij"), 1, 8, "12345678901234567890", 20, S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 9, "", 0, S("a"));
-    test(S("abcdefghij"), 1, 9, "12345", 0, S("a"));
-    test(S("abcdefghij"), 1, 9, "12345", 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, "12345", 2, S("a12"));
-    test(S("abcdefghij"), 1, 9, "12345", 4, S("a1234"));
-    test(S("abcdefghij"), 1, 9, "12345", 5, S("a12345"));
-    test(S("abcdefghij"), 1, 9, "1234567890", 0, S("a"));
-    test(S("abcdefghij"), 1, 9, "1234567890", 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, "1234567890", 5, S("a12345"));
-    test(S("abcdefghij"), 1, 9, "1234567890", 9, S("a123456789"));
-    test(S("abcdefghij"), 1, 9, "1234567890", 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, "12345678901234567890", 0, S("a"));
-    test(S("abcdefghij"), 1, 9, "12345678901234567890", 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, "12345678901234567890", 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, "12345678901234567890", 19, S("a1234567890123456789"));
-    test(S("abcdefghij"), 1, 9, "12345678901234567890", 20, S("a12345678901234567890"));
-    test(S("abcdefghij"), 1, 10, "", 0, S("a"));
-    test(S("abcdefghij"), 1, 10, "12345", 0, S("a"));
-    test(S("abcdefghij"), 1, 10, "12345", 1, S("a1"));
-    test(S("abcdefghij"), 1, 10, "12345", 2, S("a12"));
-    test(S("abcdefghij"), 1, 10, "12345", 4, S("a1234"));
-    test(S("abcdefghij"), 1, 10, "12345", 5, S("a12345"));
-    test(S("abcdefghij"), 1, 10, "1234567890", 0, S("a"));
-    test(S("abcdefghij"), 1, 10, "1234567890", 1, S("a1"));
+TEST_CONSTEXPR_CXX20 bool test5() {
+  test(S("abcdefghij"), 0, 11, "12345", 4, S("1234"));
+  test(S("abcdefghij"), 0, 11, "12345", 5, S("12345"));
+  test(S("abcdefghij"), 0, 11, "1234567890", 0, S(""));
+  test(S("abcdefghij"), 0, 11, "1234567890", 1, S("1"));
+  test(S("abcdefghij"), 0, 11, "1234567890", 5, S("12345"));
+  test(S("abcdefghij"), 0, 11, "1234567890", 9, S("123456789"));
+  test(S("abcdefghij"), 0, 11, "1234567890", 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 11, "12345678901234567890", 0, S(""));
+  test(S("abcdefghij"), 0, 11, "12345678901234567890", 1, S("1"));
+  test(S("abcdefghij"), 0, 11, "12345678901234567890", 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 11, "12345678901234567890", 19, S("1234567890123456789"));
+  test(S("abcdefghij"), 0, 11, "12345678901234567890", 20, S("12345678901234567890"));
+  test(S("abcdefghij"), 1, 0, "", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345", 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345", 2, S("a12bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345", 4, S("a1234bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345", 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, "1234567890", 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "1234567890", 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "1234567890", 9, S("a123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "1234567890", 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345678901234567890", 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345678901234567890", 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 1, "", 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345", 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345", 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345", 2, S("a12cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345", 4, S("a1234cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345", 5, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, "1234567890", 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, "1234567890", 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, "1234567890", 5, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, "1234567890", 9, S("a123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, "1234567890", 10, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345678901234567890", 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345678901234567890", 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345678901234567890", 10, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cdefghij"));
+  test(S("abcdefghij"), 1, 4, "", 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, "12345", 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, "12345", 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, "12345", 2, S("a12fghij"));
+  test(S("abcdefghij"), 1, 4, "12345", 4, S("a1234fghij"));
+  test(S("abcdefghij"), 1, 4, "12345", 5, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, "1234567890", 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, "1234567890", 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, "1234567890", 5, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, "1234567890", 9, S("a123456789fghij"));
+  test(S("abcdefghij"), 1, 4, "1234567890", 10, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, "12345678901234567890", 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, "12345678901234567890", 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, "12345678901234567890", 10, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, "12345678901234567890", 19, S("a1234567890123456789fghij"));
+  test(S("abcdefghij"), 1, 4, "12345678901234567890", 20, S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 8, "", 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, "12345", 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, "12345", 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, "12345", 2, S("a12j"));
+  test(S("abcdefghij"), 1, 8, "12345", 4, S("a1234j"));
+  test(S("abcdefghij"), 1, 8, "12345", 5, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, "1234567890", 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, "1234567890", 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, "1234567890", 5, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, "1234567890", 9, S("a123456789j"));
+  test(S("abcdefghij"), 1, 8, "1234567890", 10, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, "12345678901234567890", 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, "12345678901234567890", 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, "12345678901234567890", 10, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, "12345678901234567890", 19, S("a1234567890123456789j"));
+  test(S("abcdefghij"), 1, 8, "12345678901234567890", 20, S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 9, "", 0, S("a"));
+  test(S("abcdefghij"), 1, 9, "12345", 0, S("a"));
+  test(S("abcdefghij"), 1, 9, "12345", 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, "12345", 2, S("a12"));
+  test(S("abcdefghij"), 1, 9, "12345", 4, S("a1234"));
+  test(S("abcdefghij"), 1, 9, "12345", 5, S("a12345"));
+  test(S("abcdefghij"), 1, 9, "1234567890", 0, S("a"));
+  test(S("abcdefghij"), 1, 9, "1234567890", 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, "1234567890", 5, S("a12345"));
+  test(S("abcdefghij"), 1, 9, "1234567890", 9, S("a123456789"));
+  test(S("abcdefghij"), 1, 9, "1234567890", 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, "12345678901234567890", 0, S("a"));
+  test(S("abcdefghij"), 1, 9, "12345678901234567890", 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, "12345678901234567890", 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, "12345678901234567890", 19, S("a1234567890123456789"));
+  test(S("abcdefghij"), 1, 9, "12345678901234567890", 20, S("a12345678901234567890"));
+  test(S("abcdefghij"), 1, 10, "", 0, S("a"));
+  test(S("abcdefghij"), 1, 10, "12345", 0, S("a"));
+  test(S("abcdefghij"), 1, 10, "12345", 1, S("a1"));
+  test(S("abcdefghij"), 1, 10, "12345", 2, S("a12"));
+  test(S("abcdefghij"), 1, 10, "12345", 4, S("a1234"));
+  test(S("abcdefghij"), 1, 10, "12345", 5, S("a12345"));
+  test(S("abcdefghij"), 1, 10, "1234567890", 0, S("a"));
+  test(S("abcdefghij"), 1, 10, "1234567890", 1, S("a1"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test6()
-{
-    test(S("abcdefghij"), 1, 10, "1234567890", 5, S("a12345"));
-    test(S("abcdefghij"), 1, 10, "1234567890", 9, S("a123456789"));
-    test(S("abcdefghij"), 1, 10, "1234567890", 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, "12345678901234567890", 0, S("a"));
-    test(S("abcdefghij"), 1, 10, "12345678901234567890", 1, S("a1"));
-    test(S("abcdefghij"), 1, 10, "12345678901234567890", 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, "12345678901234567890", 19, S("a1234567890123456789"));
-    test(S("abcdefghij"), 1, 10, "12345678901234567890", 20, S("a12345678901234567890"));
-    test(S("abcdefghij"), 5, 0, "", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, "12345", 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, "12345", 2, S("abcde12fghij"));
-    test(S("abcdefghij"), 5, 0, "12345", 4, S("abcde1234fghij"));
-    test(S("abcdefghij"), 5, 0, "12345", 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, "1234567890", 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, "1234567890", 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, "1234567890", 9, S("abcde123456789fghij"));
-    test(S("abcdefghij"), 5, 0, "1234567890", 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, "12345678901234567890", 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, "12345678901234567890", 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, "12345678901234567890", 19, S("abcde1234567890123456789fghij"));
-    test(S("abcdefghij"), 5, 0, "12345678901234567890", 20, S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 1, "", 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, "12345", 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, "12345", 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, "12345", 2, S("abcde12ghij"));
-    test(S("abcdefghij"), 5, 1, "12345", 4, S("abcde1234ghij"));
-    test(S("abcdefghij"), 5, 1, "12345", 5, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, "1234567890", 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, "1234567890", 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, "1234567890", 5, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, "1234567890", 9, S("abcde123456789ghij"));
-    test(S("abcdefghij"), 5, 1, "1234567890", 10, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, "12345678901234567890", 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, "12345678901234567890", 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, "12345678901234567890", 10, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, "12345678901234567890", 19, S("abcde1234567890123456789ghij"));
-    test(S("abcdefghij"), 5, 1, "12345678901234567890", 20, S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 2, "", 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, "12345", 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, "12345", 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, "12345", 2, S("abcde12hij"));
-    test(S("abcdefghij"), 5, 2, "12345", 4, S("abcde1234hij"));
-    test(S("abcdefghij"), 5, 2, "12345", 5, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, "1234567890", 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, "1234567890", 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, "1234567890", 5, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, "1234567890", 9, S("abcde123456789hij"));
-    test(S("abcdefghij"), 5, 2, "1234567890", 10, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, "12345678901234567890", 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, "12345678901234567890", 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, "12345678901234567890", 10, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, "12345678901234567890", 19, S("abcde1234567890123456789hij"));
-    test(S("abcdefghij"), 5, 2, "12345678901234567890", 20, S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 4, "", 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, "12345", 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, "12345", 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, "12345", 2, S("abcde12j"));
-    test(S("abcdefghij"), 5, 4, "12345", 4, S("abcde1234j"));
-    test(S("abcdefghij"), 5, 4, "12345", 5, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, "1234567890", 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, "1234567890", 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, "1234567890", 5, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, "1234567890", 9, S("abcde123456789j"));
-    test(S("abcdefghij"), 5, 4, "1234567890", 10, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, "12345678901234567890", 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, "12345678901234567890", 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, "12345678901234567890", 10, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, "12345678901234567890", 19, S("abcde1234567890123456789j"));
-    test(S("abcdefghij"), 5, 4, "12345678901234567890", 20, S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 5, "", 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, "12345", 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, "12345", 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, "12345", 2, S("abcde12"));
-    test(S("abcdefghij"), 5, 5, "12345", 4, S("abcde1234"));
-    test(S("abcdefghij"), 5, 5, "12345", 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, "1234567890", 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, "1234567890", 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, "1234567890", 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, "1234567890", 9, S("abcde123456789"));
-    test(S("abcdefghij"), 5, 5, "1234567890", 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, "12345678901234567890", 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, "12345678901234567890", 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, "12345678901234567890", 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, "12345678901234567890", 19, S("abcde1234567890123456789"));
-    test(S("abcdefghij"), 5, 5, "12345678901234567890", 20, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 5, 6, "", 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, "12345", 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, "12345", 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 6, "12345", 2, S("abcde12"));
-    test(S("abcdefghij"), 5, 6, "12345", 4, S("abcde1234"));
-    test(S("abcdefghij"), 5, 6, "12345", 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, "1234567890", 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, "1234567890", 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 6, "1234567890", 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, "1234567890", 9, S("abcde123456789"));
-    test(S("abcdefghij"), 5, 6, "1234567890", 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, "12345678901234567890", 0, S("abcde"));
+TEST_CONSTEXPR_CXX20 bool test6() {
+  test(S("abcdefghij"), 1, 10, "1234567890", 5, S("a12345"));
+  test(S("abcdefghij"), 1, 10, "1234567890", 9, S("a123456789"));
+  test(S("abcdefghij"), 1, 10, "1234567890", 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, "12345678901234567890", 0, S("a"));
+  test(S("abcdefghij"), 1, 10, "12345678901234567890", 1, S("a1"));
+  test(S("abcdefghij"), 1, 10, "12345678901234567890", 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, "12345678901234567890", 19, S("a1234567890123456789"));
+  test(S("abcdefghij"), 1, 10, "12345678901234567890", 20, S("a12345678901234567890"));
+  test(S("abcdefghij"), 5, 0, "", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, "12345", 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, "12345", 2, S("abcde12fghij"));
+  test(S("abcdefghij"), 5, 0, "12345", 4, S("abcde1234fghij"));
+  test(S("abcdefghij"), 5, 0, "12345", 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, "1234567890", 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, "1234567890", 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, "1234567890", 9, S("abcde123456789fghij"));
+  test(S("abcdefghij"), 5, 0, "1234567890", 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, "12345678901234567890", 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, "12345678901234567890", 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, "12345678901234567890", 19, S("abcde1234567890123456789fghij"));
+  test(S("abcdefghij"), 5, 0, "12345678901234567890", 20, S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 1, "", 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, "12345", 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, "12345", 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, "12345", 2, S("abcde12ghij"));
+  test(S("abcdefghij"), 5, 1, "12345", 4, S("abcde1234ghij"));
+  test(S("abcdefghij"), 5, 1, "12345", 5, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, "1234567890", 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, "1234567890", 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, "1234567890", 5, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, "1234567890", 9, S("abcde123456789ghij"));
+  test(S("abcdefghij"), 5, 1, "1234567890", 10, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, "12345678901234567890", 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, "12345678901234567890", 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, "12345678901234567890", 10, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, "12345678901234567890", 19, S("abcde1234567890123456789ghij"));
+  test(S("abcdefghij"), 5, 1, "12345678901234567890", 20, S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 2, "", 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, "12345", 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, "12345", 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, "12345", 2, S("abcde12hij"));
+  test(S("abcdefghij"), 5, 2, "12345", 4, S("abcde1234hij"));
+  test(S("abcdefghij"), 5, 2, "12345", 5, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, "1234567890", 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, "1234567890", 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, "1234567890", 5, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, "1234567890", 9, S("abcde123456789hij"));
+  test(S("abcdefghij"), 5, 2, "1234567890", 10, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, "12345678901234567890", 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, "12345678901234567890", 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, "12345678901234567890", 10, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, "12345678901234567890", 19, S("abcde1234567890123456789hij"));
+  test(S("abcdefghij"), 5, 2, "12345678901234567890", 20, S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 4, "", 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, "12345", 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, "12345", 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, "12345", 2, S("abcde12j"));
+  test(S("abcdefghij"), 5, 4, "12345", 4, S("abcde1234j"));
+  test(S("abcdefghij"), 5, 4, "12345", 5, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, "1234567890", 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, "1234567890", 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, "1234567890", 5, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, "1234567890", 9, S("abcde123456789j"));
+  test(S("abcdefghij"), 5, 4, "1234567890", 10, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, "12345678901234567890", 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, "12345678901234567890", 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, "12345678901234567890", 10, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, "12345678901234567890", 19, S("abcde1234567890123456789j"));
+  test(S("abcdefghij"), 5, 4, "12345678901234567890", 20, S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 5, "", 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, "12345", 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, "12345", 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, "12345", 2, S("abcde12"));
+  test(S("abcdefghij"), 5, 5, "12345", 4, S("abcde1234"));
+  test(S("abcdefghij"), 5, 5, "12345", 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, "1234567890", 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, "1234567890", 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, "1234567890", 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, "1234567890", 9, S("abcde123456789"));
+  test(S("abcdefghij"), 5, 5, "1234567890", 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, "12345678901234567890", 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, "12345678901234567890", 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, "12345678901234567890", 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, "12345678901234567890", 19, S("abcde1234567890123456789"));
+  test(S("abcdefghij"), 5, 5, "12345678901234567890", 20, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 5, 6, "", 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, "12345", 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, "12345", 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 6, "12345", 2, S("abcde12"));
+  test(S("abcdefghij"), 5, 6, "12345", 4, S("abcde1234"));
+  test(S("abcdefghij"), 5, 6, "12345", 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, "1234567890", 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, "1234567890", 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 6, "1234567890", 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, "1234567890", 9, S("abcde123456789"));
+  test(S("abcdefghij"), 5, 6, "1234567890", 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, "12345678901234567890", 0, S("abcde"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test7()
-{
-    test(S("abcdefghij"), 5, 6, "12345678901234567890", 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 6, "12345678901234567890", 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, "12345678901234567890", 19, S("abcde1234567890123456789"));
-    test(S("abcdefghij"), 5, 6, "12345678901234567890", 20, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 9, 0, "", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, "12345", 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, "12345", 2, S("abcdefghi12j"));
-    test(S("abcdefghij"), 9, 0, "12345", 4, S("abcdefghi1234j"));
-    test(S("abcdefghij"), 9, 0, "12345", 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, "1234567890", 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, "1234567890", 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, "1234567890", 9, S("abcdefghi123456789j"));
-    test(S("abcdefghij"), 9, 0, "1234567890", 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, "12345678901234567890", 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, "12345678901234567890", 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, "12345678901234567890", 19, S("abcdefghi1234567890123456789j"));
-    test(S("abcdefghij"), 9, 0, "12345678901234567890", 20, S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 1, "", 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, "12345", 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, "12345", 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, "12345", 2, S("abcdefghi12"));
-    test(S("abcdefghij"), 9, 1, "12345", 4, S("abcdefghi1234"));
-    test(S("abcdefghij"), 9, 1, "12345", 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, "1234567890", 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, "1234567890", 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, "1234567890", 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, "1234567890", 9, S("abcdefghi123456789"));
-    test(S("abcdefghij"), 9, 1, "1234567890", 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, "12345678901234567890", 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, "12345678901234567890", 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, "12345678901234567890", 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, "12345678901234567890", 19, S("abcdefghi1234567890123456789"));
-    test(S("abcdefghij"), 9, 1, "12345678901234567890", 20, S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 9, 2, "", 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, "12345", 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, "12345", 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 2, "12345", 2, S("abcdefghi12"));
-    test(S("abcdefghij"), 9, 2, "12345", 4, S("abcdefghi1234"));
-    test(S("abcdefghij"), 9, 2, "12345", 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, "1234567890", 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, "1234567890", 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 2, "1234567890", 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, "1234567890", 9, S("abcdefghi123456789"));
-    test(S("abcdefghij"), 9, 2, "1234567890", 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, "12345678901234567890", 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, "12345678901234567890", 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 2, "12345678901234567890", 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, "12345678901234567890", 19, S("abcdefghi1234567890123456789"));
-    test(S("abcdefghij"), 9, 2, "12345678901234567890", 20, S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, "", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, "12345", 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, "12345", 2, S("abcdefghij12"));
-    test(S("abcdefghij"), 10, 0, "12345", 4, S("abcdefghij1234"));
-    test(S("abcdefghij"), 10, 0, "12345", 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, "1234567890", 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, "1234567890", 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, "1234567890", 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, 0, "1234567890", 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, "12345678901234567890", 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, "12345678901234567890", 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghij"), 10, 0, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, 1, "", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, "12345", 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 1, "12345", 2, S("abcdefghij12"));
-    test(S("abcdefghij"), 10, 1, "12345", 4, S("abcdefghij1234"));
-    test(S("abcdefghij"), 10, 1, "12345", 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, "1234567890", 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 1, "1234567890", 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, "1234567890", 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, 1, "1234567890", 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, "12345678901234567890", 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 1, "12345678901234567890", 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghij"), 10, 1, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 11, 0, "", 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "12345", 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "12345", 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "12345", 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "12345", 4, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "12345", 5, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "1234567890", 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "1234567890", 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "1234567890", 5, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "1234567890", 9, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "1234567890", 10, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "12345678901234567890", 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "12345678901234567890", 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "12345678901234567890", 10, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "12345678901234567890", 19, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, "12345678901234567890", 20, S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test7() {
+  test(S("abcdefghij"), 5, 6, "12345678901234567890", 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 6, "12345678901234567890", 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, "12345678901234567890", 19, S("abcde1234567890123456789"));
+  test(S("abcdefghij"), 5, 6, "12345678901234567890", 20, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 9, 0, "", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, "12345", 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, "12345", 2, S("abcdefghi12j"));
+  test(S("abcdefghij"), 9, 0, "12345", 4, S("abcdefghi1234j"));
+  test(S("abcdefghij"), 9, 0, "12345", 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, "1234567890", 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, "1234567890", 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, "1234567890", 9, S("abcdefghi123456789j"));
+  test(S("abcdefghij"), 9, 0, "1234567890", 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, "12345678901234567890", 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, "12345678901234567890", 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, "12345678901234567890", 19, S("abcdefghi1234567890123456789j"));
+  test(S("abcdefghij"), 9, 0, "12345678901234567890", 20, S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 1, "", 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, "12345", 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, "12345", 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, "12345", 2, S("abcdefghi12"));
+  test(S("abcdefghij"), 9, 1, "12345", 4, S("abcdefghi1234"));
+  test(S("abcdefghij"), 9, 1, "12345", 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, "1234567890", 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, "1234567890", 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, "1234567890", 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, "1234567890", 9, S("abcdefghi123456789"));
+  test(S("abcdefghij"), 9, 1, "1234567890", 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, "12345678901234567890", 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, "12345678901234567890", 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, "12345678901234567890", 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, "12345678901234567890", 19, S("abcdefghi1234567890123456789"));
+  test(S("abcdefghij"), 9, 1, "12345678901234567890", 20, S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 9, 2, "", 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, "12345", 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, "12345", 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 2, "12345", 2, S("abcdefghi12"));
+  test(S("abcdefghij"), 9, 2, "12345", 4, S("abcdefghi1234"));
+  test(S("abcdefghij"), 9, 2, "12345", 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, "1234567890", 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, "1234567890", 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 2, "1234567890", 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, "1234567890", 9, S("abcdefghi123456789"));
+  test(S("abcdefghij"), 9, 2, "1234567890", 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, "12345678901234567890", 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, "12345678901234567890", 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 2, "12345678901234567890", 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, "12345678901234567890", 19, S("abcdefghi1234567890123456789"));
+  test(S("abcdefghij"), 9, 2, "12345678901234567890", 20, S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, "", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, "12345", 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, "12345", 2, S("abcdefghij12"));
+  test(S("abcdefghij"), 10, 0, "12345", 4, S("abcdefghij1234"));
+  test(S("abcdefghij"), 10, 0, "12345", 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, "1234567890", 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, "1234567890", 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, "1234567890", 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, 0, "1234567890", 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, "12345678901234567890", 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, "12345678901234567890", 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghij"), 10, 0, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, 1, "", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, "12345", 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 1, "12345", 2, S("abcdefghij12"));
+  test(S("abcdefghij"), 10, 1, "12345", 4, S("abcdefghij1234"));
+  test(S("abcdefghij"), 10, 1, "12345", 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, "1234567890", 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 1, "1234567890", 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, "1234567890", 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, 1, "1234567890", 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, "12345678901234567890", 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 1, "12345678901234567890", 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghij"), 10, 1, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 11, 0, "", 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "12345", 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "12345", 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "12345", 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "12345", 4, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "12345", 5, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "1234567890", 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "1234567890", 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "1234567890", 5, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "1234567890", 9, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "1234567890", 10, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "12345678901234567890", 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "12345678901234567890", 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "12345678901234567890", 10, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "12345678901234567890", 19, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, "12345678901234567890", 20, S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test8()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, "", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 2, S("12abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 4, S("1234abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "", 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 2, S("12bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 4, S("1234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 5, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 5, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 9, S("123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 10, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 10, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "", 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 2, S("12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 4, S("1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 5, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 5, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 9, S("123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 10, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 10, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 19, S("1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 20, S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "", 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 2, S("12t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 4, S("1234t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 5, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 5, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 9, S("123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 10, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 10, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 19, S("1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 20, S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "", 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 2, S("12"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 4, S("1234"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 9, S("123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 19, S("1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 20, S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "", 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 2, S("12"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 4, S("1234"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 9, S("123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 19, S("1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 20, S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 2, S("a12bcdefghijklmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test8() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, "", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 2, S("12abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 4, S("1234abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345", 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 9, S("123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "1234567890", 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 19, S("1234567890123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, "12345678901234567890", 20, S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "", 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 2, S("12bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 4, S("1234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345", 5, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 5, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 9, S("123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "1234567890", 10, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 10, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 19, S("1234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, "12345678901234567890", 20, S("12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "", 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 2, S("12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 4, S("1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345", 5, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 5, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 9, S("123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "1234567890", 10, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 10, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 19, S("1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, "12345678901234567890", 20, S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "", 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 2, S("12t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 4, S("1234t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345", 5, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 5, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 9, S("123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "1234567890", 10, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 10, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 19, S("1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, "12345678901234567890", 20, S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "", 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 2, S("12"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 4, S("1234"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345", 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 9, S("123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "1234567890", 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 19, S("1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, "12345678901234567890", 20, S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "", 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 2, S("12"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 4, S("1234"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "12345", 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 9, S("123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "1234567890", 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 19, S("1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, "12345678901234567890", 20, S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 2, S("a12bcdefghijklmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test9()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 4, S("a1234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 9, S("a123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "", 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 2, S("a12cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 4, S("a1234cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 5, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 5, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 9, S("a123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 10, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 10, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "", 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 2, S("a12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 4, S("a1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 5, S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 5, S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 9, S("a123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 10, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 10, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 19, S("a1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 20, S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "", 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 2, S("a12t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 4, S("a1234t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 5, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 5, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 9, S("a123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 10, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 10, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 19, S("a1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 20, S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "", 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 2, S("a12"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 4, S("a1234"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 9, S("a123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 19, S("a1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 20, S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "", 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 2, S("a12"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 4, S("a1234"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 9, S("a123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 19, S("a1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 20, S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 2, S("abcdefghij12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 4, S("abcdefghij1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 1, S("abcdefghij1klmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test9() {
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 4, S("a1234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345", 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 9, S("a123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "1234567890", 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 19, S("a1234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, "12345678901234567890", 20, S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "", 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 2, S("a12cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 4, S("a1234cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345", 5, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 5, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 9, S("a123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "1234567890", 10, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 10, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 19, S("a1234567890123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, "12345678901234567890", 20, S("a12345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "", 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 2, S("a12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 4, S("a1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345", 5, S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 5, S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 9, S("a123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "1234567890", 10, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 10, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 19, S("a1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, "12345678901234567890", 20, S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "", 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 2, S("a12t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 4, S("a1234t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345", 5, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 5, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 9, S("a123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "1234567890", 10, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 10, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 19, S("a1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, "12345678901234567890", 20, S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "", 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 2, S("a12"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 4, S("a1234"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345", 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 9, S("a123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "1234567890", 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 19, S("a1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, "12345678901234567890", 20, S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "", 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 2, S("a12"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 4, S("a1234"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "12345", 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 9, S("a123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "1234567890", 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 19, S("a1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, "12345678901234567890", 20, S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 2, S("abcdefghij12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 4, S("abcdefghij1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345", 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 1, S("abcdefghij1klmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test10()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 9, S("abcdefghij123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "", 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 2, S("abcdefghij12lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 4, S("abcdefghij1234lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 5, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 5, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 9, S("abcdefghij123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 10, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 10, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 19, S("abcdefghij1234567890123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 20, S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "", 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 2, S("abcdefghij12pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 4, S("abcdefghij1234pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 5, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 5, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 9, S("abcdefghij123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 10, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 10, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 19, S("abcdefghij1234567890123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 20, S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "", 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 2, S("abcdefghij12t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 4, S("abcdefghij1234t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 5, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 5, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 9, S("abcdefghij123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 10, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 10, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 19, S("abcdefghij1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 20, S("abcdefghij12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "", 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 2, S("abcdefghij12"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 4, S("abcdefghij1234"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 9, S("abcdefghij123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "", 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 2, S("abcdefghij12"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 4, S("abcdefghij1234"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 9, S("abcdefghij123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 2, S("abcdefghijklmnopqrs12t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 4, S("abcdefghijklmnopqrs1234t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 9, S("abcdefghijklmnopqrs123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test10() {
+  test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 9, S("abcdefghij123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "1234567890", 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 19, S("abcdefghij1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, "12345678901234567890", 20, S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "", 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 2, S("abcdefghij12lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 4, S("abcdefghij1234lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345", 5, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 5, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 9, S("abcdefghij123456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "1234567890", 10, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 10, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 19, S("abcdefghij1234567890123456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, "12345678901234567890", 20, S("abcdefghij12345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "", 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 2, S("abcdefghij12pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 4, S("abcdefghij1234pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345", 5, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 5, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 9, S("abcdefghij123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "1234567890", 10, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 10, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 19, S("abcdefghij1234567890123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, "12345678901234567890", 20, S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "", 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 2, S("abcdefghij12t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 4, S("abcdefghij1234t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345", 5, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 5, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 9, S("abcdefghij123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "1234567890", 10, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 10, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 19, S("abcdefghij1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, "12345678901234567890", 20, S("abcdefghij12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "", 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 2, S("abcdefghij12"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 4, S("abcdefghij1234"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345", 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 9, S("abcdefghij123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "1234567890", 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "", 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 2, S("abcdefghij12"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 4, S("abcdefghij1234"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "12345", 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 9, S("abcdefghij123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "1234567890", 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, "12345678901234567890", 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 2, S("abcdefghijklmnopqrs12t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 4, S("abcdefghijklmnopqrs1234t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345", 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 9, S("abcdefghijklmnopqrs123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "1234567890", 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test11()
-{
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "", 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 2, S("abcdefghijklmnopqrs12"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 4, S("abcdefghijklmnopqrs1234"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 9, S("abcdefghijklmnopqrs123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "", 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 2, S("abcdefghijklmnopqrs12"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 4, S("abcdefghijklmnopqrs1234"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 9, S("abcdefghijklmnopqrs123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 2, S("abcdefghijklmnopqrst12"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 4, S("abcdefghijklmnopqrst1234"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 2, S("abcdefghijklmnopqrst12"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 4, S("abcdefghijklmnopqrst1234"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "", 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 19, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 20, S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test11() {
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "", 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 2, S("abcdefghijklmnopqrs12"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 4, S("abcdefghijklmnopqrs1234"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345", 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 9, S("abcdefghijklmnopqrs123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "1234567890", 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "", 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 2, S("abcdefghijklmnopqrs12"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 4, S("abcdefghijklmnopqrs1234"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "12345", 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 9, S("abcdefghijklmnopqrs123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "1234567890", 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 19, S("abcdefghijklmnopqrs1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, "12345678901234567890", 20, S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 2, S("abcdefghijklmnopqrst12"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 4, S("abcdefghijklmnopqrst1234"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345", 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "1234567890", 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 2, S("abcdefghijklmnopqrst12"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 4, S("abcdefghijklmnopqrst1234"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "12345", 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "1234567890", 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 19, S("abcdefghijklmnopqrst1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, "12345678901234567890", 20, S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "", 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "12345", 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "1234567890", 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 19, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, "12345678901234567890", 20, S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
@@ -1352,8 +1337,7 @@ void test() {
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_size_char.pass.cpp
index f9257cc6a44441f..8841318c1d4df5b 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_size_char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_size_char.pass.cpp
@@ -21,353 +21,347 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos, typename S::size_type n1,
-     typename S::size_type n2, typename S::value_type c,
-     S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos <= old_size)
-    {
-        s.replace(pos, n1, n2, c);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-        typename S::size_type xlen = std::min(n1, old_size - pos);
-        typename S::size_type rlen = n2;
-        assert(s.size() == old_size - xlen + rlen);
-    }
+test(S s,
+     typename S::size_type pos,
+     typename S::size_type n1,
+     typename S::size_type n2,
+     typename S::value_type c,
+     S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos <= old_size) {
+    s.replace(pos, n1, n2, c);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+    typename S::size_type xlen = std::min(n1, old_size - pos);
+    typename S::size_type rlen = n2;
+    assert(s.size() == old_size - xlen + rlen);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.replace(pos, n1, n2, c);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > old_size);
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.replace(pos, n1, n2, c);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > old_size);
+      assert(s == s0);
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, 0, '2', S(""));
-    test(S(""), 0, 0, 5, '2', S("22222"));
-    test(S(""), 0, 0, 10, '2', S("2222222222"));
-    test(S(""), 0, 0, 20, '2', S("22222222222222222222"));
-    test(S(""), 0, 1, 0, '2', S(""));
-    test(S(""), 0, 1, 5, '2', S("22222"));
-    test(S(""), 0, 1, 10, '2', S("2222222222"));
-    test(S(""), 0, 1, 20, '2', S("22222222222222222222"));
-    test(S(""), 1, 0, 0, '2', S("can't happen"));
-    test(S(""), 1, 0, 5, '2', S("can't happen"));
-    test(S(""), 1, 0, 10, '2', S("can't happen"));
-    test(S(""), 1, 0, 20, '2', S("can't happen"));
-    test(S("abcde"), 0, 0, 0, '2', S("abcde"));
-    test(S("abcde"), 0, 0, 5, '2', S("22222abcde"));
-    test(S("abcde"), 0, 0, 10, '2', S("2222222222abcde"));
-    test(S("abcde"), 0, 0, 20, '2', S("22222222222222222222abcde"));
-    test(S("abcde"), 0, 1, 0, '2', S("bcde"));
-    test(S("abcde"), 0, 1, 5, '2', S("22222bcde"));
-    test(S("abcde"), 0, 1, 10, '2', S("2222222222bcde"));
-    test(S("abcde"), 0, 1, 20, '2', S("22222222222222222222bcde"));
-    test(S("abcde"), 0, 2, 0, '2', S("cde"));
-    test(S("abcde"), 0, 2, 5, '2', S("22222cde"));
-    test(S("abcde"), 0, 2, 10, '2', S("2222222222cde"));
-    test(S("abcde"), 0, 2, 20, '2', S("22222222222222222222cde"));
-    test(S("abcde"), 0, 4, 0, '2', S("e"));
-    test(S("abcde"), 0, 4, 5, '2', S("22222e"));
-    test(S("abcde"), 0, 4, 10, '2', S("2222222222e"));
-    test(S("abcde"), 0, 4, 20, '2', S("22222222222222222222e"));
-    test(S("abcde"), 0, 5, 0, '2', S(""));
-    test(S("abcde"), 0, 5, 5, '2', S("22222"));
-    test(S("abcde"), 0, 5, 10, '2', S("2222222222"));
-    test(S("abcde"), 0, 5, 20, '2', S("22222222222222222222"));
-    test(S("abcde"), 0, 6, 0, '2', S(""));
-    test(S("abcde"), 0, 6, 5, '2', S("22222"));
-    test(S("abcde"), 0, 6, 10, '2', S("2222222222"));
-    test(S("abcde"), 0, 6, 20, '2', S("22222222222222222222"));
-    test(S("abcde"), 1, 0, 0, '2', S("abcde"));
-    test(S("abcde"), 1, 0, 5, '2', S("a22222bcde"));
-    test(S("abcde"), 1, 0, 10, '2', S("a2222222222bcde"));
-    test(S("abcde"), 1, 0, 20, '2', S("a22222222222222222222bcde"));
-    test(S("abcde"), 1, 1, 0, '2', S("acde"));
-    test(S("abcde"), 1, 1, 5, '2', S("a22222cde"));
-    test(S("abcde"), 1, 1, 10, '2', S("a2222222222cde"));
-    test(S("abcde"), 1, 1, 20, '2', S("a22222222222222222222cde"));
-    test(S("abcde"), 1, 2, 0, '2', S("ade"));
-    test(S("abcde"), 1, 2, 5, '2', S("a22222de"));
-    test(S("abcde"), 1, 2, 10, '2', S("a2222222222de"));
-    test(S("abcde"), 1, 2, 20, '2', S("a22222222222222222222de"));
-    test(S("abcde"), 1, 3, 0, '2', S("ae"));
-    test(S("abcde"), 1, 3, 5, '2', S("a22222e"));
-    test(S("abcde"), 1, 3, 10, '2', S("a2222222222e"));
-    test(S("abcde"), 1, 3, 20, '2', S("a22222222222222222222e"));
-    test(S("abcde"), 1, 4, 0, '2', S("a"));
-    test(S("abcde"), 1, 4, 5, '2', S("a22222"));
-    test(S("abcde"), 1, 4, 10, '2', S("a2222222222"));
-    test(S("abcde"), 1, 4, 20, '2', S("a22222222222222222222"));
-    test(S("abcde"), 1, 5, 0, '2', S("a"));
-    test(S("abcde"), 1, 5, 5, '2', S("a22222"));
-    test(S("abcde"), 1, 5, 10, '2', S("a2222222222"));
-    test(S("abcde"), 1, 5, 20, '2', S("a22222222222222222222"));
-    test(S("abcde"), 2, 0, 0, '2', S("abcde"));
-    test(S("abcde"), 2, 0, 5, '2', S("ab22222cde"));
-    test(S("abcde"), 2, 0, 10, '2', S("ab2222222222cde"));
-    test(S("abcde"), 2, 0, 20, '2', S("ab22222222222222222222cde"));
-    test(S("abcde"), 2, 1, 0, '2', S("abde"));
-    test(S("abcde"), 2, 1, 5, '2', S("ab22222de"));
-    test(S("abcde"), 2, 1, 10, '2', S("ab2222222222de"));
-    test(S("abcde"), 2, 1, 20, '2', S("ab22222222222222222222de"));
-    test(S("abcde"), 2, 2, 0, '2', S("abe"));
-    test(S("abcde"), 2, 2, 5, '2', S("ab22222e"));
-    test(S("abcde"), 2, 2, 10, '2', S("ab2222222222e"));
-    test(S("abcde"), 2, 2, 20, '2', S("ab22222222222222222222e"));
-    test(S("abcde"), 2, 3, 0, '2', S("ab"));
-    test(S("abcde"), 2, 3, 5, '2', S("ab22222"));
-    test(S("abcde"), 2, 3, 10, '2', S("ab2222222222"));
-    test(S("abcde"), 2, 3, 20, '2', S("ab22222222222222222222"));
-    test(S("abcde"), 2, 4, 0, '2', S("ab"));
-    test(S("abcde"), 2, 4, 5, '2', S("ab22222"));
-    test(S("abcde"), 2, 4, 10, '2', S("ab2222222222"));
-    test(S("abcde"), 2, 4, 20, '2', S("ab22222222222222222222"));
-    test(S("abcde"), 4, 0, 0, '2', S("abcde"));
-    test(S("abcde"), 4, 0, 5, '2', S("abcd22222e"));
-    test(S("abcde"), 4, 0, 10, '2', S("abcd2222222222e"));
-    test(S("abcde"), 4, 0, 20, '2', S("abcd22222222222222222222e"));
-    test(S("abcde"), 4, 1, 0, '2', S("abcd"));
-    test(S("abcde"), 4, 1, 5, '2', S("abcd22222"));
-    test(S("abcde"), 4, 1, 10, '2', S("abcd2222222222"));
-    test(S("abcde"), 4, 1, 20, '2', S("abcd22222222222222222222"));
-    test(S("abcde"), 4, 2, 0, '2', S("abcd"));
-    test(S("abcde"), 4, 2, 5, '2', S("abcd22222"));
-    test(S("abcde"), 4, 2, 10, '2', S("abcd2222222222"));
-    test(S("abcde"), 4, 2, 20, '2', S("abcd22222222222222222222"));
-    test(S("abcde"), 5, 0, 0, '2', S("abcde"));
-    test(S("abcde"), 5, 0, 5, '2', S("abcde22222"));
-    test(S("abcde"), 5, 0, 10, '2', S("abcde2222222222"));
-    test(S("abcde"), 5, 0, 20, '2', S("abcde22222222222222222222"));
-    test(S("abcde"), 5, 1, 0, '2', S("abcde"));
-    test(S("abcde"), 5, 1, 5, '2', S("abcde22222"));
-    test(S("abcde"), 5, 1, 10, '2', S("abcde2222222222"));
-    test(S("abcde"), 5, 1, 20, '2', S("abcde22222222222222222222"));
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, 0, '2', S(""));
+  test(S(""), 0, 0, 5, '2', S("22222"));
+  test(S(""), 0, 0, 10, '2', S("2222222222"));
+  test(S(""), 0, 0, 20, '2', S("22222222222222222222"));
+  test(S(""), 0, 1, 0, '2', S(""));
+  test(S(""), 0, 1, 5, '2', S("22222"));
+  test(S(""), 0, 1, 10, '2', S("2222222222"));
+  test(S(""), 0, 1, 20, '2', S("22222222222222222222"));
+  test(S(""), 1, 0, 0, '2', S("can't happen"));
+  test(S(""), 1, 0, 5, '2', S("can't happen"));
+  test(S(""), 1, 0, 10, '2', S("can't happen"));
+  test(S(""), 1, 0, 20, '2', S("can't happen"));
+  test(S("abcde"), 0, 0, 0, '2', S("abcde"));
+  test(S("abcde"), 0, 0, 5, '2', S("22222abcde"));
+  test(S("abcde"), 0, 0, 10, '2', S("2222222222abcde"));
+  test(S("abcde"), 0, 0, 20, '2', S("22222222222222222222abcde"));
+  test(S("abcde"), 0, 1, 0, '2', S("bcde"));
+  test(S("abcde"), 0, 1, 5, '2', S("22222bcde"));
+  test(S("abcde"), 0, 1, 10, '2', S("2222222222bcde"));
+  test(S("abcde"), 0, 1, 20, '2', S("22222222222222222222bcde"));
+  test(S("abcde"), 0, 2, 0, '2', S("cde"));
+  test(S("abcde"), 0, 2, 5, '2', S("22222cde"));
+  test(S("abcde"), 0, 2, 10, '2', S("2222222222cde"));
+  test(S("abcde"), 0, 2, 20, '2', S("22222222222222222222cde"));
+  test(S("abcde"), 0, 4, 0, '2', S("e"));
+  test(S("abcde"), 0, 4, 5, '2', S("22222e"));
+  test(S("abcde"), 0, 4, 10, '2', S("2222222222e"));
+  test(S("abcde"), 0, 4, 20, '2', S("22222222222222222222e"));
+  test(S("abcde"), 0, 5, 0, '2', S(""));
+  test(S("abcde"), 0, 5, 5, '2', S("22222"));
+  test(S("abcde"), 0, 5, 10, '2', S("2222222222"));
+  test(S("abcde"), 0, 5, 20, '2', S("22222222222222222222"));
+  test(S("abcde"), 0, 6, 0, '2', S(""));
+  test(S("abcde"), 0, 6, 5, '2', S("22222"));
+  test(S("abcde"), 0, 6, 10, '2', S("2222222222"));
+  test(S("abcde"), 0, 6, 20, '2', S("22222222222222222222"));
+  test(S("abcde"), 1, 0, 0, '2', S("abcde"));
+  test(S("abcde"), 1, 0, 5, '2', S("a22222bcde"));
+  test(S("abcde"), 1, 0, 10, '2', S("a2222222222bcde"));
+  test(S("abcde"), 1, 0, 20, '2', S("a22222222222222222222bcde"));
+  test(S("abcde"), 1, 1, 0, '2', S("acde"));
+  test(S("abcde"), 1, 1, 5, '2', S("a22222cde"));
+  test(S("abcde"), 1, 1, 10, '2', S("a2222222222cde"));
+  test(S("abcde"), 1, 1, 20, '2', S("a22222222222222222222cde"));
+  test(S("abcde"), 1, 2, 0, '2', S("ade"));
+  test(S("abcde"), 1, 2, 5, '2', S("a22222de"));
+  test(S("abcde"), 1, 2, 10, '2', S("a2222222222de"));
+  test(S("abcde"), 1, 2, 20, '2', S("a22222222222222222222de"));
+  test(S("abcde"), 1, 3, 0, '2', S("ae"));
+  test(S("abcde"), 1, 3, 5, '2', S("a22222e"));
+  test(S("abcde"), 1, 3, 10, '2', S("a2222222222e"));
+  test(S("abcde"), 1, 3, 20, '2', S("a22222222222222222222e"));
+  test(S("abcde"), 1, 4, 0, '2', S("a"));
+  test(S("abcde"), 1, 4, 5, '2', S("a22222"));
+  test(S("abcde"), 1, 4, 10, '2', S("a2222222222"));
+  test(S("abcde"), 1, 4, 20, '2', S("a22222222222222222222"));
+  test(S("abcde"), 1, 5, 0, '2', S("a"));
+  test(S("abcde"), 1, 5, 5, '2', S("a22222"));
+  test(S("abcde"), 1, 5, 10, '2', S("a2222222222"));
+  test(S("abcde"), 1, 5, 20, '2', S("a22222222222222222222"));
+  test(S("abcde"), 2, 0, 0, '2', S("abcde"));
+  test(S("abcde"), 2, 0, 5, '2', S("ab22222cde"));
+  test(S("abcde"), 2, 0, 10, '2', S("ab2222222222cde"));
+  test(S("abcde"), 2, 0, 20, '2', S("ab22222222222222222222cde"));
+  test(S("abcde"), 2, 1, 0, '2', S("abde"));
+  test(S("abcde"), 2, 1, 5, '2', S("ab22222de"));
+  test(S("abcde"), 2, 1, 10, '2', S("ab2222222222de"));
+  test(S("abcde"), 2, 1, 20, '2', S("ab22222222222222222222de"));
+  test(S("abcde"), 2, 2, 0, '2', S("abe"));
+  test(S("abcde"), 2, 2, 5, '2', S("ab22222e"));
+  test(S("abcde"), 2, 2, 10, '2', S("ab2222222222e"));
+  test(S("abcde"), 2, 2, 20, '2', S("ab22222222222222222222e"));
+  test(S("abcde"), 2, 3, 0, '2', S("ab"));
+  test(S("abcde"), 2, 3, 5, '2', S("ab22222"));
+  test(S("abcde"), 2, 3, 10, '2', S("ab2222222222"));
+  test(S("abcde"), 2, 3, 20, '2', S("ab22222222222222222222"));
+  test(S("abcde"), 2, 4, 0, '2', S("ab"));
+  test(S("abcde"), 2, 4, 5, '2', S("ab22222"));
+  test(S("abcde"), 2, 4, 10, '2', S("ab2222222222"));
+  test(S("abcde"), 2, 4, 20, '2', S("ab22222222222222222222"));
+  test(S("abcde"), 4, 0, 0, '2', S("abcde"));
+  test(S("abcde"), 4, 0, 5, '2', S("abcd22222e"));
+  test(S("abcde"), 4, 0, 10, '2', S("abcd2222222222e"));
+  test(S("abcde"), 4, 0, 20, '2', S("abcd22222222222222222222e"));
+  test(S("abcde"), 4, 1, 0, '2', S("abcd"));
+  test(S("abcde"), 4, 1, 5, '2', S("abcd22222"));
+  test(S("abcde"), 4, 1, 10, '2', S("abcd2222222222"));
+  test(S("abcde"), 4, 1, 20, '2', S("abcd22222222222222222222"));
+  test(S("abcde"), 4, 2, 0, '2', S("abcd"));
+  test(S("abcde"), 4, 2, 5, '2', S("abcd22222"));
+  test(S("abcde"), 4, 2, 10, '2', S("abcd2222222222"));
+  test(S("abcde"), 4, 2, 20, '2', S("abcd22222222222222222222"));
+  test(S("abcde"), 5, 0, 0, '2', S("abcde"));
+  test(S("abcde"), 5, 0, 5, '2', S("abcde22222"));
+  test(S("abcde"), 5, 0, 10, '2', S("abcde2222222222"));
+  test(S("abcde"), 5, 0, 20, '2', S("abcde22222222222222222222"));
+  test(S("abcde"), 5, 1, 0, '2', S("abcde"));
+  test(S("abcde"), 5, 1, 5, '2', S("abcde22222"));
+  test(S("abcde"), 5, 1, 10, '2', S("abcde2222222222"));
+  test(S("abcde"), 5, 1, 20, '2', S("abcde22222222222222222222"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S("abcde"), 6, 0, 0, '2', S("can't happen"));
-    test(S("abcde"), 6, 0, 5, '2', S("can't happen"));
-    test(S("abcde"), 6, 0, 10, '2', S("can't happen"));
-    test(S("abcde"), 6, 0, 20, '2', S("can't happen"));
-    test(S("abcdefghij"), 0, 0, 0, '2', S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, 5, '2', S("22222abcdefghij"));
-    test(S("abcdefghij"), 0, 0, 10, '2', S("2222222222abcdefghij"));
-    test(S("abcdefghij"), 0, 0, 20, '2', S("22222222222222222222abcdefghij"));
-    test(S("abcdefghij"), 0, 1, 0, '2', S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, 5, '2', S("22222bcdefghij"));
-    test(S("abcdefghij"), 0, 1, 10, '2', S("2222222222bcdefghij"));
-    test(S("abcdefghij"), 0, 1, 20, '2', S("22222222222222222222bcdefghij"));
-    test(S("abcdefghij"), 0, 5, 0, '2', S("fghij"));
-    test(S("abcdefghij"), 0, 5, 5, '2', S("22222fghij"));
-    test(S("abcdefghij"), 0, 5, 10, '2', S("2222222222fghij"));
-    test(S("abcdefghij"), 0, 5, 20, '2', S("22222222222222222222fghij"));
-    test(S("abcdefghij"), 0, 9, 0, '2', S("j"));
-    test(S("abcdefghij"), 0, 9, 5, '2', S("22222j"));
-    test(S("abcdefghij"), 0, 9, 10, '2', S("2222222222j"));
-    test(S("abcdefghij"), 0, 9, 20, '2', S("22222222222222222222j"));
-    test(S("abcdefghij"), 0, 10, 0, '2', S(""));
-    test(S("abcdefghij"), 0, 10, 5, '2', S("22222"));
-    test(S("abcdefghij"), 0, 10, 10, '2', S("2222222222"));
-    test(S("abcdefghij"), 0, 10, 20, '2', S("22222222222222222222"));
-    test(S("abcdefghij"), 0, 11, 0, '2', S(""));
-    test(S("abcdefghij"), 0, 11, 5, '2', S("22222"));
-    test(S("abcdefghij"), 0, 11, 10, '2', S("2222222222"));
-    test(S("abcdefghij"), 0, 11, 20, '2', S("22222222222222222222"));
-    test(S("abcdefghij"), 1, 0, 0, '2', S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, 5, '2', S("a22222bcdefghij"));
-    test(S("abcdefghij"), 1, 0, 10, '2', S("a2222222222bcdefghij"));
-    test(S("abcdefghij"), 1, 0, 20, '2', S("a22222222222222222222bcdefghij"));
-    test(S("abcdefghij"), 1, 1, 0, '2', S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, 5, '2', S("a22222cdefghij"));
-    test(S("abcdefghij"), 1, 1, 10, '2', S("a2222222222cdefghij"));
-    test(S("abcdefghij"), 1, 1, 20, '2', S("a22222222222222222222cdefghij"));
-    test(S("abcdefghij"), 1, 4, 0, '2', S("afghij"));
-    test(S("abcdefghij"), 1, 4, 5, '2', S("a22222fghij"));
-    test(S("abcdefghij"), 1, 4, 10, '2', S("a2222222222fghij"));
-    test(S("abcdefghij"), 1, 4, 20, '2', S("a22222222222222222222fghij"));
-    test(S("abcdefghij"), 1, 8, 0, '2', S("aj"));
-    test(S("abcdefghij"), 1, 8, 5, '2', S("a22222j"));
-    test(S("abcdefghij"), 1, 8, 10, '2', S("a2222222222j"));
-    test(S("abcdefghij"), 1, 8, 20, '2', S("a22222222222222222222j"));
-    test(S("abcdefghij"), 1, 9, 0, '2', S("a"));
-    test(S("abcdefghij"), 1, 9, 5, '2', S("a22222"));
-    test(S("abcdefghij"), 1, 9, 10, '2', S("a2222222222"));
-    test(S("abcdefghij"), 1, 9, 20, '2', S("a22222222222222222222"));
-    test(S("abcdefghij"), 1, 10, 0, '2', S("a"));
-    test(S("abcdefghij"), 1, 10, 5, '2', S("a22222"));
-    test(S("abcdefghij"), 1, 10, 10, '2', S("a2222222222"));
-    test(S("abcdefghij"), 1, 10, 20, '2', S("a22222222222222222222"));
-    test(S("abcdefghij"), 5, 0, 0, '2', S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, 5, '2', S("abcde22222fghij"));
-    test(S("abcdefghij"), 5, 0, 10, '2', S("abcde2222222222fghij"));
-    test(S("abcdefghij"), 5, 0, 20, '2', S("abcde22222222222222222222fghij"));
-    test(S("abcdefghij"), 5, 1, 0, '2', S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, 5, '2', S("abcde22222ghij"));
-    test(S("abcdefghij"), 5, 1, 10, '2', S("abcde2222222222ghij"));
-    test(S("abcdefghij"), 5, 1, 20, '2', S("abcde22222222222222222222ghij"));
-    test(S("abcdefghij"), 5, 2, 0, '2', S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, 5, '2', S("abcde22222hij"));
-    test(S("abcdefghij"), 5, 2, 10, '2', S("abcde2222222222hij"));
-    test(S("abcdefghij"), 5, 2, 20, '2', S("abcde22222222222222222222hij"));
-    test(S("abcdefghij"), 5, 4, 0, '2', S("abcdej"));
-    test(S("abcdefghij"), 5, 4, 5, '2', S("abcde22222j"));
-    test(S("abcdefghij"), 5, 4, 10, '2', S("abcde2222222222j"));
-    test(S("abcdefghij"), 5, 4, 20, '2', S("abcde22222222222222222222j"));
-    test(S("abcdefghij"), 5, 5, 0, '2', S("abcde"));
-    test(S("abcdefghij"), 5, 5, 5, '2', S("abcde22222"));
-    test(S("abcdefghij"), 5, 5, 10, '2', S("abcde2222222222"));
-    test(S("abcdefghij"), 5, 5, 20, '2', S("abcde22222222222222222222"));
-    test(S("abcdefghij"), 5, 6, 0, '2', S("abcde"));
-    test(S("abcdefghij"), 5, 6, 5, '2', S("abcde22222"));
-    test(S("abcdefghij"), 5, 6, 10, '2', S("abcde2222222222"));
-    test(S("abcdefghij"), 5, 6, 20, '2', S("abcde22222222222222222222"));
-    test(S("abcdefghij"), 9, 0, 0, '2', S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, 5, '2', S("abcdefghi22222j"));
-    test(S("abcdefghij"), 9, 0, 10, '2', S("abcdefghi2222222222j"));
-    test(S("abcdefghij"), 9, 0, 20, '2', S("abcdefghi22222222222222222222j"));
-    test(S("abcdefghij"), 9, 1, 0, '2', S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, 5, '2', S("abcdefghi22222"));
-    test(S("abcdefghij"), 9, 1, 10, '2', S("abcdefghi2222222222"));
-    test(S("abcdefghij"), 9, 1, 20, '2', S("abcdefghi22222222222222222222"));
-    test(S("abcdefghij"), 9, 2, 0, '2', S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, 5, '2', S("abcdefghi22222"));
-    test(S("abcdefghij"), 9, 2, 10, '2', S("abcdefghi2222222222"));
-    test(S("abcdefghij"), 9, 2, 20, '2', S("abcdefghi22222222222222222222"));
-    test(S("abcdefghij"), 10, 0, 0, '2', S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, 5, '2', S("abcdefghij22222"));
-    test(S("abcdefghij"), 10, 0, 10, '2', S("abcdefghij2222222222"));
-    test(S("abcdefghij"), 10, 0, 20, '2', S("abcdefghij22222222222222222222"));
-    test(S("abcdefghij"), 10, 1, 0, '2', S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, 5, '2', S("abcdefghij22222"));
-    test(S("abcdefghij"), 10, 1, 10, '2', S("abcdefghij2222222222"));
-    test(S("abcdefghij"), 10, 1, 20, '2', S("abcdefghij22222222222222222222"));
-    test(S("abcdefghij"), 11, 0, 0, '2', S("can't happen"));
-    test(S("abcdefghij"), 11, 0, 5, '2', S("can't happen"));
-    test(S("abcdefghij"), 11, 0, 10, '2', S("can't happen"));
-    test(S("abcdefghij"), 11, 0, 20, '2', S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S("abcde"), 6, 0, 0, '2', S("can't happen"));
+  test(S("abcde"), 6, 0, 5, '2', S("can't happen"));
+  test(S("abcde"), 6, 0, 10, '2', S("can't happen"));
+  test(S("abcde"), 6, 0, 20, '2', S("can't happen"));
+  test(S("abcdefghij"), 0, 0, 0, '2', S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, 5, '2', S("22222abcdefghij"));
+  test(S("abcdefghij"), 0, 0, 10, '2', S("2222222222abcdefghij"));
+  test(S("abcdefghij"), 0, 0, 20, '2', S("22222222222222222222abcdefghij"));
+  test(S("abcdefghij"), 0, 1, 0, '2', S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, 5, '2', S("22222bcdefghij"));
+  test(S("abcdefghij"), 0, 1, 10, '2', S("2222222222bcdefghij"));
+  test(S("abcdefghij"), 0, 1, 20, '2', S("22222222222222222222bcdefghij"));
+  test(S("abcdefghij"), 0, 5, 0, '2', S("fghij"));
+  test(S("abcdefghij"), 0, 5, 5, '2', S("22222fghij"));
+  test(S("abcdefghij"), 0, 5, 10, '2', S("2222222222fghij"));
+  test(S("abcdefghij"), 0, 5, 20, '2', S("22222222222222222222fghij"));
+  test(S("abcdefghij"), 0, 9, 0, '2', S("j"));
+  test(S("abcdefghij"), 0, 9, 5, '2', S("22222j"));
+  test(S("abcdefghij"), 0, 9, 10, '2', S("2222222222j"));
+  test(S("abcdefghij"), 0, 9, 20, '2', S("22222222222222222222j"));
+  test(S("abcdefghij"), 0, 10, 0, '2', S(""));
+  test(S("abcdefghij"), 0, 10, 5, '2', S("22222"));
+  test(S("abcdefghij"), 0, 10, 10, '2', S("2222222222"));
+  test(S("abcdefghij"), 0, 10, 20, '2', S("22222222222222222222"));
+  test(S("abcdefghij"), 0, 11, 0, '2', S(""));
+  test(S("abcdefghij"), 0, 11, 5, '2', S("22222"));
+  test(S("abcdefghij"), 0, 11, 10, '2', S("2222222222"));
+  test(S("abcdefghij"), 0, 11, 20, '2', S("22222222222222222222"));
+  test(S("abcdefghij"), 1, 0, 0, '2', S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, 5, '2', S("a22222bcdefghij"));
+  test(S("abcdefghij"), 1, 0, 10, '2', S("a2222222222bcdefghij"));
+  test(S("abcdefghij"), 1, 0, 20, '2', S("a22222222222222222222bcdefghij"));
+  test(S("abcdefghij"), 1, 1, 0, '2', S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, 5, '2', S("a22222cdefghij"));
+  test(S("abcdefghij"), 1, 1, 10, '2', S("a2222222222cdefghij"));
+  test(S("abcdefghij"), 1, 1, 20, '2', S("a22222222222222222222cdefghij"));
+  test(S("abcdefghij"), 1, 4, 0, '2', S("afghij"));
+  test(S("abcdefghij"), 1, 4, 5, '2', S("a22222fghij"));
+  test(S("abcdefghij"), 1, 4, 10, '2', S("a2222222222fghij"));
+  test(S("abcdefghij"), 1, 4, 20, '2', S("a22222222222222222222fghij"));
+  test(S("abcdefghij"), 1, 8, 0, '2', S("aj"));
+  test(S("abcdefghij"), 1, 8, 5, '2', S("a22222j"));
+  test(S("abcdefghij"), 1, 8, 10, '2', S("a2222222222j"));
+  test(S("abcdefghij"), 1, 8, 20, '2', S("a22222222222222222222j"));
+  test(S("abcdefghij"), 1, 9, 0, '2', S("a"));
+  test(S("abcdefghij"), 1, 9, 5, '2', S("a22222"));
+  test(S("abcdefghij"), 1, 9, 10, '2', S("a2222222222"));
+  test(S("abcdefghij"), 1, 9, 20, '2', S("a22222222222222222222"));
+  test(S("abcdefghij"), 1, 10, 0, '2', S("a"));
+  test(S("abcdefghij"), 1, 10, 5, '2', S("a22222"));
+  test(S("abcdefghij"), 1, 10, 10, '2', S("a2222222222"));
+  test(S("abcdefghij"), 1, 10, 20, '2', S("a22222222222222222222"));
+  test(S("abcdefghij"), 5, 0, 0, '2', S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, 5, '2', S("abcde22222fghij"));
+  test(S("abcdefghij"), 5, 0, 10, '2', S("abcde2222222222fghij"));
+  test(S("abcdefghij"), 5, 0, 20, '2', S("abcde22222222222222222222fghij"));
+  test(S("abcdefghij"), 5, 1, 0, '2', S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, 5, '2', S("abcde22222ghij"));
+  test(S("abcdefghij"), 5, 1, 10, '2', S("abcde2222222222ghij"));
+  test(S("abcdefghij"), 5, 1, 20, '2', S("abcde22222222222222222222ghij"));
+  test(S("abcdefghij"), 5, 2, 0, '2', S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, 5, '2', S("abcde22222hij"));
+  test(S("abcdefghij"), 5, 2, 10, '2', S("abcde2222222222hij"));
+  test(S("abcdefghij"), 5, 2, 20, '2', S("abcde22222222222222222222hij"));
+  test(S("abcdefghij"), 5, 4, 0, '2', S("abcdej"));
+  test(S("abcdefghij"), 5, 4, 5, '2', S("abcde22222j"));
+  test(S("abcdefghij"), 5, 4, 10, '2', S("abcde2222222222j"));
+  test(S("abcdefghij"), 5, 4, 20, '2', S("abcde22222222222222222222j"));
+  test(S("abcdefghij"), 5, 5, 0, '2', S("abcde"));
+  test(S("abcdefghij"), 5, 5, 5, '2', S("abcde22222"));
+  test(S("abcdefghij"), 5, 5, 10, '2', S("abcde2222222222"));
+  test(S("abcdefghij"), 5, 5, 20, '2', S("abcde22222222222222222222"));
+  test(S("abcdefghij"), 5, 6, 0, '2', S("abcde"));
+  test(S("abcdefghij"), 5, 6, 5, '2', S("abcde22222"));
+  test(S("abcdefghij"), 5, 6, 10, '2', S("abcde2222222222"));
+  test(S("abcdefghij"), 5, 6, 20, '2', S("abcde22222222222222222222"));
+  test(S("abcdefghij"), 9, 0, 0, '2', S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, 5, '2', S("abcdefghi22222j"));
+  test(S("abcdefghij"), 9, 0, 10, '2', S("abcdefghi2222222222j"));
+  test(S("abcdefghij"), 9, 0, 20, '2', S("abcdefghi22222222222222222222j"));
+  test(S("abcdefghij"), 9, 1, 0, '2', S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, 5, '2', S("abcdefghi22222"));
+  test(S("abcdefghij"), 9, 1, 10, '2', S("abcdefghi2222222222"));
+  test(S("abcdefghij"), 9, 1, 20, '2', S("abcdefghi22222222222222222222"));
+  test(S("abcdefghij"), 9, 2, 0, '2', S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, 5, '2', S("abcdefghi22222"));
+  test(S("abcdefghij"), 9, 2, 10, '2', S("abcdefghi2222222222"));
+  test(S("abcdefghij"), 9, 2, 20, '2', S("abcdefghi22222222222222222222"));
+  test(S("abcdefghij"), 10, 0, 0, '2', S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, 5, '2', S("abcdefghij22222"));
+  test(S("abcdefghij"), 10, 0, 10, '2', S("abcdefghij2222222222"));
+  test(S("abcdefghij"), 10, 0, 20, '2', S("abcdefghij22222222222222222222"));
+  test(S("abcdefghij"), 10, 1, 0, '2', S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, 5, '2', S("abcdefghij22222"));
+  test(S("abcdefghij"), 10, 1, 10, '2', S("abcdefghij2222222222"));
+  test(S("abcdefghij"), 10, 1, 20, '2', S("abcdefghij22222222222222222222"));
+  test(S("abcdefghij"), 11, 0, 0, '2', S("can't happen"));
+  test(S("abcdefghij"), 11, 0, 5, '2', S("can't happen"));
+  test(S("abcdefghij"), 11, 0, 10, '2', S("can't happen"));
+  test(S("abcdefghij"), 11, 0, 20, '2', S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, 0, '2', S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, 5, '2', S("22222abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, 10, '2', S("2222222222abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, 20, '2', S("22222222222222222222abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, 0, '2', S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, 5, '2', S("22222bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, 10, '2', S("2222222222bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, 20, '2', S("22222222222222222222bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, 0, '2', S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, 5, '2', S("22222klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, 10, '2', S("2222222222klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, 20, '2', S("22222222222222222222klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, 0, '2', S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, 5, '2', S("22222t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, 10, '2', S("2222222222t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, 20, '2', S("22222222222222222222t"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, 0, '2', S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, 5, '2', S("22222"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, 10, '2', S("2222222222"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, 20, '2', S("22222222222222222222"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, 0, '2', S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, 5, '2', S("22222"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, 10, '2', S("2222222222"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, 20, '2', S("22222222222222222222"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, 0, '2', S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, 5, '2', S("a22222bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, 10, '2', S("a2222222222bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, 20, '2', S("a22222222222222222222bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, 0, '2', S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, 5, '2', S("a22222cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, 10, '2', S("a2222222222cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, 20, '2', S("a22222222222222222222cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, 0, '2', S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, 5, '2', S("a22222klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, 10, '2', S("a2222222222klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, 20, '2', S("a22222222222222222222klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, 0, '2', S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, 5, '2', S("a22222t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, 10, '2', S("a2222222222t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, 20, '2', S("a22222222222222222222t"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, 0, '2', S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, 5, '2', S("a22222"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, 10, '2', S("a2222222222"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, 20, '2', S("a22222222222222222222"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, 0, '2', S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, 5, '2', S("a22222"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, 10, '2', S("a2222222222"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, 20, '2', S("a22222222222222222222"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, 0, '2', S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, 5, '2', S("abcdefghij22222klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, 10, '2', S("abcdefghij2222222222klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, 20, '2', S("abcdefghij22222222222222222222klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, 0, '2', S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, 5, '2', S("abcdefghij22222lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, 10, '2', S("abcdefghij2222222222lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, 20, '2', S("abcdefghij22222222222222222222lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, 0, '2', S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, 5, '2', S("abcdefghij22222pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, 10, '2', S("abcdefghij2222222222pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, 20, '2', S("abcdefghij22222222222222222222pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, 0, '2', S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, 5, '2', S("abcdefghij22222t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, 10, '2', S("abcdefghij2222222222t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, 20, '2', S("abcdefghij22222222222222222222t"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, 0, '2', S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, 5, '2', S("abcdefghij22222"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, 10, '2', S("abcdefghij2222222222"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, 20, '2', S("abcdefghij22222222222222222222"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, 0, '2', S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, 5, '2', S("abcdefghij22222"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, 10, '2', S("abcdefghij2222222222"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, 20, '2', S("abcdefghij22222222222222222222"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, 0, '2', S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, 5, '2', S("abcdefghijklmnopqrs22222t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, 10, '2', S("abcdefghijklmnopqrs2222222222t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, 20, '2', S("abcdefghijklmnopqrs22222222222222222222t"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, 0, '2', S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, 5, '2', S("abcdefghijklmnopqrs22222"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, 10, '2', S("abcdefghijklmnopqrs2222222222"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, 20, '2', S("abcdefghijklmnopqrs22222222222222222222"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, 0, '2', S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, 5, '2', S("abcdefghijklmnopqrs22222"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, 10, '2', S("abcdefghijklmnopqrs2222222222"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, 20, '2', S("abcdefghijklmnopqrs22222222222222222222"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, 0, '2', S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, 5, '2', S("abcdefghijklmnopqrst22222"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, 10, '2', S("abcdefghijklmnopqrst2222222222"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, 20, '2', S("abcdefghijklmnopqrst22222222222222222222"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, 0, '2', S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, 5, '2', S("abcdefghijklmnopqrst22222"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, 10, '2', S("abcdefghijklmnopqrst2222222222"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, 20, '2', S("abcdefghijklmnopqrst22222222222222222222"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, 0, '2', S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, 5, '2', S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, 10, '2', S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, 20, '2', S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, 0, '2', S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, 5, '2', S("22222abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, 10, '2', S("2222222222abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, 20, '2', S("22222222222222222222abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, 0, '2', S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, 5, '2', S("22222bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, 10, '2', S("2222222222bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, 20, '2', S("22222222222222222222bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, 0, '2', S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, 5, '2', S("22222klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, 10, '2', S("2222222222klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, 20, '2', S("22222222222222222222klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, 0, '2', S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, 5, '2', S("22222t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, 10, '2', S("2222222222t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, 20, '2', S("22222222222222222222t"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, 0, '2', S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, 5, '2', S("22222"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, 10, '2', S("2222222222"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, 20, '2', S("22222222222222222222"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, 0, '2', S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, 5, '2', S("22222"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, 10, '2', S("2222222222"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, 20, '2', S("22222222222222222222"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, 0, '2', S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, 5, '2', S("a22222bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, 10, '2', S("a2222222222bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, 20, '2', S("a22222222222222222222bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, 0, '2', S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, 5, '2', S("a22222cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, 10, '2', S("a2222222222cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, 20, '2', S("a22222222222222222222cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, 0, '2', S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, 5, '2', S("a22222klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, 10, '2', S("a2222222222klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, 20, '2', S("a22222222222222222222klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, 0, '2', S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, 5, '2', S("a22222t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, 10, '2', S("a2222222222t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, 20, '2', S("a22222222222222222222t"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, 0, '2', S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, 5, '2', S("a22222"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, 10, '2', S("a2222222222"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, 20, '2', S("a22222222222222222222"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, 0, '2', S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, 5, '2', S("a22222"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, 10, '2', S("a2222222222"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, 20, '2', S("a22222222222222222222"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, 0, '2', S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, 5, '2', S("abcdefghij22222klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, 10, '2', S("abcdefghij2222222222klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, 20, '2', S("abcdefghij22222222222222222222klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, 0, '2', S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, 5, '2', S("abcdefghij22222lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, 10, '2', S("abcdefghij2222222222lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, 20, '2', S("abcdefghij22222222222222222222lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, 0, '2', S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, 5, '2', S("abcdefghij22222pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, 10, '2', S("abcdefghij2222222222pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, 20, '2', S("abcdefghij22222222222222222222pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, 0, '2', S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, 5, '2', S("abcdefghij22222t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, 10, '2', S("abcdefghij2222222222t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, 20, '2', S("abcdefghij22222222222222222222t"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, 0, '2', S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, 5, '2', S("abcdefghij22222"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, 10, '2', S("abcdefghij2222222222"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, 20, '2', S("abcdefghij22222222222222222222"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, 0, '2', S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, 5, '2', S("abcdefghij22222"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, 10, '2', S("abcdefghij2222222222"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, 20, '2', S("abcdefghij22222222222222222222"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, 0, '2', S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, 5, '2', S("abcdefghijklmnopqrs22222t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, 10, '2', S("abcdefghijklmnopqrs2222222222t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, 20, '2', S("abcdefghijklmnopqrs22222222222222222222t"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, 0, '2', S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, 5, '2', S("abcdefghijklmnopqrs22222"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, 10, '2', S("abcdefghijklmnopqrs2222222222"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, 20, '2', S("abcdefghijklmnopqrs22222222222222222222"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, 0, '2', S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, 5, '2', S("abcdefghijklmnopqrs22222"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, 10, '2', S("abcdefghijklmnopqrs2222222222"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, 20, '2', S("abcdefghijklmnopqrs22222222222222222222"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, 0, '2', S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, 5, '2', S("abcdefghijklmnopqrst22222"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, 10, '2', S("abcdefghijklmnopqrst2222222222"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, 20, '2', S("abcdefghijklmnopqrst22222222222222222222"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, 0, '2', S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, 5, '2', S("abcdefghijklmnopqrst22222"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, 10, '2', S("abcdefghijklmnopqrst2222222222"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, 20, '2', S("abcdefghijklmnopqrst22222222222222222222"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, 0, '2', S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, 5, '2', S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, 10, '2', S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, 20, '2', S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
@@ -383,8 +377,7 @@ void test() {
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string.pass.cpp
index 3e98052e14c443d..fab2beeabd5721a 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string.pass.cpp
@@ -20,352 +20,342 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos1, typename S::size_type n1, S str, S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos1 <= old_size)
-    {
-        s.replace(pos1, n1, str);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-        typename S::size_type xlen = std::min(n1, old_size - pos1);
-        typename S::size_type rlen = str.size();
-        assert(s.size() == old_size - xlen + rlen);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos1, typename S::size_type n1, S str, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos1 <= old_size) {
+    s.replace(pos1, n1, str);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+    typename S::size_type xlen = std::min(n1, old_size - pos1);
+    typename S::size_type rlen = str.size();
+    assert(s.size() == old_size - xlen + rlen);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.replace(pos1, n1, str);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > old_size);
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.replace(pos1, n1, str);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > old_size);
+      assert(s == s0);
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, S(""), S(""));
-    test(S(""), 0, 0, S("12345"), S("12345"));
-    test(S(""), 0, 0, S("1234567890"), S("1234567890"));
-    test(S(""), 0, 0, S("12345678901234567890"), S("12345678901234567890"));
-    test(S(""), 0, 1, S(""), S(""));
-    test(S(""), 0, 1, S("12345"), S("12345"));
-    test(S(""), 0, 1, S("1234567890"), S("1234567890"));
-    test(S(""), 0, 1, S("12345678901234567890"), S("12345678901234567890"));
-    test(S(""), 1, 0, S(""), S("can't happen"));
-    test(S(""), 1, 0, S("12345"), S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), S("can't happen"));
-    test(S("abcde"), 0, 0, S(""), S("abcde"));
-    test(S("abcde"), 0, 0, S("12345"), S("12345abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), S("1234567890abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 1, S(""), S("bcde"));
-    test(S("abcde"), 0, 1, S("12345"), S("12345bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), S("1234567890bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 2, S(""), S("cde"));
-    test(S("abcde"), 0, 2, S("12345"), S("12345cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), S("1234567890cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), S("12345678901234567890cde"));
-    test(S("abcde"), 0, 4, S(""), S("e"));
-    test(S("abcde"), 0, 4, S("12345"), S("12345e"));
-    test(S("abcde"), 0, 4, S("1234567890"), S("1234567890e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), S("12345678901234567890e"));
-    test(S("abcde"), 0, 5, S(""), S(""));
-    test(S("abcde"), 0, 5, S("12345"), S("12345"));
-    test(S("abcde"), 0, 5, S("1234567890"), S("1234567890"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcde"), 0, 6, S(""), S(""));
-    test(S("abcde"), 0, 6, S("12345"), S("12345"));
-    test(S("abcde"), 0, 6, S("1234567890"), S("1234567890"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcde"), 1, 0, S(""), S("abcde"));
-    test(S("abcde"), 1, 0, S("12345"), S("a12345bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 1, S(""), S("acde"));
-    test(S("abcde"), 1, 1, S("12345"), S("a12345cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), S("a1234567890cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 2, S(""), S("ade"));
-    test(S("abcde"), 1, 2, S("12345"), S("a12345de"));
-    test(S("abcde"), 1, 2, S("1234567890"), S("a1234567890de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), S("a12345678901234567890de"));
-    test(S("abcde"), 1, 3, S(""), S("ae"));
-    test(S("abcde"), 1, 3, S("12345"), S("a12345e"));
-    test(S("abcde"), 1, 3, S("1234567890"), S("a1234567890e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), S("a12345678901234567890e"));
-    test(S("abcde"), 1, 4, S(""), S("a"));
-    test(S("abcde"), 1, 4, S("12345"), S("a12345"));
-    test(S("abcde"), 1, 4, S("1234567890"), S("a1234567890"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcde"), 1, 5, S(""), S("a"));
-    test(S("abcde"), 1, 5, S("12345"), S("a12345"));
-    test(S("abcde"), 1, 5, S("1234567890"), S("a1234567890"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcde"), 2, 0, S(""), S("abcde"));
-    test(S("abcde"), 2, 0, S("12345"), S("ab12345cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 1, S(""), S("abde"));
-    test(S("abcde"), 2, 1, S("12345"), S("ab12345de"));
-    test(S("abcde"), 2, 1, S("1234567890"), S("ab1234567890de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 2, S(""), S("abe"));
-    test(S("abcde"), 2, 2, S("12345"), S("ab12345e"));
-    test(S("abcde"), 2, 2, S("1234567890"), S("ab1234567890e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 3, S(""), S("ab"));
-    test(S("abcde"), 2, 3, S("12345"), S("ab12345"));
-    test(S("abcde"), 2, 3, S("1234567890"), S("ab1234567890"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), S("ab12345678901234567890"));
-    test(S("abcde"), 2, 4, S(""), S("ab"));
-    test(S("abcde"), 2, 4, S("12345"), S("ab12345"));
-    test(S("abcde"), 2, 4, S("1234567890"), S("ab1234567890"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), S("ab12345678901234567890"));
-    test(S("abcde"), 4, 0, S(""), S("abcde"));
-    test(S("abcde"), 4, 0, S("12345"), S("abcd12345e"));
-    test(S("abcde"), 4, 0, S("1234567890"), S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 1, S(""), S("abcd"));
-    test(S("abcde"), 4, 1, S("12345"), S("abcd12345"));
-    test(S("abcde"), 4, 1, S("1234567890"), S("abcd1234567890"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), S("abcd12345678901234567890"));
-    test(S("abcde"), 4, 2, S(""), S("abcd"));
-    test(S("abcde"), 4, 2, S("12345"), S("abcd12345"));
-    test(S("abcde"), 4, 2, S("1234567890"), S("abcd1234567890"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), S("abcd12345678901234567890"));
-    test(S("abcde"), 5, 0, S(""), S("abcde"));
-    test(S("abcde"), 5, 0, S("12345"), S("abcde12345"));
-    test(S("abcde"), 5, 0, S("1234567890"), S("abcde1234567890"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), S("abcde12345678901234567890"));
-    test(S("abcde"), 5, 1, S(""), S("abcde"));
-    test(S("abcde"), 5, 1, S("12345"), S("abcde12345"));
-    test(S("abcde"), 5, 1, S("1234567890"), S("abcde1234567890"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), S("abcde12345678901234567890"));
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, S(""), S(""));
+  test(S(""), 0, 0, S("12345"), S("12345"));
+  test(S(""), 0, 0, S("1234567890"), S("1234567890"));
+  test(S(""), 0, 0, S("12345678901234567890"), S("12345678901234567890"));
+  test(S(""), 0, 1, S(""), S(""));
+  test(S(""), 0, 1, S("12345"), S("12345"));
+  test(S(""), 0, 1, S("1234567890"), S("1234567890"));
+  test(S(""), 0, 1, S("12345678901234567890"), S("12345678901234567890"));
+  test(S(""), 1, 0, S(""), S("can't happen"));
+  test(S(""), 1, 0, S("12345"), S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), S("can't happen"));
+  test(S("abcde"), 0, 0, S(""), S("abcde"));
+  test(S("abcde"), 0, 0, S("12345"), S("12345abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), S("1234567890abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 1, S(""), S("bcde"));
+  test(S("abcde"), 0, 1, S("12345"), S("12345bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), S("1234567890bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 2, S(""), S("cde"));
+  test(S("abcde"), 0, 2, S("12345"), S("12345cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), S("1234567890cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), S("12345678901234567890cde"));
+  test(S("abcde"), 0, 4, S(""), S("e"));
+  test(S("abcde"), 0, 4, S("12345"), S("12345e"));
+  test(S("abcde"), 0, 4, S("1234567890"), S("1234567890e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), S("12345678901234567890e"));
+  test(S("abcde"), 0, 5, S(""), S(""));
+  test(S("abcde"), 0, 5, S("12345"), S("12345"));
+  test(S("abcde"), 0, 5, S("1234567890"), S("1234567890"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcde"), 0, 6, S(""), S(""));
+  test(S("abcde"), 0, 6, S("12345"), S("12345"));
+  test(S("abcde"), 0, 6, S("1234567890"), S("1234567890"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcde"), 1, 0, S(""), S("abcde"));
+  test(S("abcde"), 1, 0, S("12345"), S("a12345bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 1, S(""), S("acde"));
+  test(S("abcde"), 1, 1, S("12345"), S("a12345cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), S("a1234567890cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 2, S(""), S("ade"));
+  test(S("abcde"), 1, 2, S("12345"), S("a12345de"));
+  test(S("abcde"), 1, 2, S("1234567890"), S("a1234567890de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), S("a12345678901234567890de"));
+  test(S("abcde"), 1, 3, S(""), S("ae"));
+  test(S("abcde"), 1, 3, S("12345"), S("a12345e"));
+  test(S("abcde"), 1, 3, S("1234567890"), S("a1234567890e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), S("a12345678901234567890e"));
+  test(S("abcde"), 1, 4, S(""), S("a"));
+  test(S("abcde"), 1, 4, S("12345"), S("a12345"));
+  test(S("abcde"), 1, 4, S("1234567890"), S("a1234567890"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcde"), 1, 5, S(""), S("a"));
+  test(S("abcde"), 1, 5, S("12345"), S("a12345"));
+  test(S("abcde"), 1, 5, S("1234567890"), S("a1234567890"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcde"), 2, 0, S(""), S("abcde"));
+  test(S("abcde"), 2, 0, S("12345"), S("ab12345cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 1, S(""), S("abde"));
+  test(S("abcde"), 2, 1, S("12345"), S("ab12345de"));
+  test(S("abcde"), 2, 1, S("1234567890"), S("ab1234567890de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 2, S(""), S("abe"));
+  test(S("abcde"), 2, 2, S("12345"), S("ab12345e"));
+  test(S("abcde"), 2, 2, S("1234567890"), S("ab1234567890e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 3, S(""), S("ab"));
+  test(S("abcde"), 2, 3, S("12345"), S("ab12345"));
+  test(S("abcde"), 2, 3, S("1234567890"), S("ab1234567890"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), S("ab12345678901234567890"));
+  test(S("abcde"), 2, 4, S(""), S("ab"));
+  test(S("abcde"), 2, 4, S("12345"), S("ab12345"));
+  test(S("abcde"), 2, 4, S("1234567890"), S("ab1234567890"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), S("ab12345678901234567890"));
+  test(S("abcde"), 4, 0, S(""), S("abcde"));
+  test(S("abcde"), 4, 0, S("12345"), S("abcd12345e"));
+  test(S("abcde"), 4, 0, S("1234567890"), S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 1, S(""), S("abcd"));
+  test(S("abcde"), 4, 1, S("12345"), S("abcd12345"));
+  test(S("abcde"), 4, 1, S("1234567890"), S("abcd1234567890"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), S("abcd12345678901234567890"));
+  test(S("abcde"), 4, 2, S(""), S("abcd"));
+  test(S("abcde"), 4, 2, S("12345"), S("abcd12345"));
+  test(S("abcde"), 4, 2, S("1234567890"), S("abcd1234567890"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), S("abcd12345678901234567890"));
+  test(S("abcde"), 5, 0, S(""), S("abcde"));
+  test(S("abcde"), 5, 0, S("12345"), S("abcde12345"));
+  test(S("abcde"), 5, 0, S("1234567890"), S("abcde1234567890"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), S("abcde12345678901234567890"));
+  test(S("abcde"), 5, 1, S(""), S("abcde"));
+  test(S("abcde"), 5, 1, S("12345"), S("abcde12345"));
+  test(S("abcde"), 5, 1, S("1234567890"), S("abcde1234567890"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), S("abcde12345678901234567890"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S("abcde"), 6, 0, S(""), S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), S("can't happen"));
-    test(S("abcdefghij"), 0, 0, S(""), S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 1, S(""), S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 5, S(""), S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 9, S(""), S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), S("12345j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 10, S(""), S(""));
-    test(S("abcdefghij"), 0, 10, S("12345"), S("12345"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), S("1234567890"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcdefghij"), 0, 11, S(""), S(""));
-    test(S("abcdefghij"), 0, 11, S("12345"), S("12345"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), S("1234567890"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcdefghij"), 1, 0, S(""), S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 1, S(""), S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), S("a12345678901234567890cdefghij"));
-    test(S("abcdefghij"), 1, 4, S(""), S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 8, S(""), S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345"), S("a12345j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 9, S(""), S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345"), S("a12345"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcdefghij"), 1, 10, S(""), S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345"), S("a12345"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcdefghij"), 5, 0, S(""), S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 1, S(""), S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 2, S(""), S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 4, S(""), S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345"), S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 5, S(""), S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345"), S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 5, 6, S(""), S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345"), S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 9, 0, S(""), S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345"), S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 1, S(""), S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345"), S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 9, 2, S(""), S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345"), S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, S(""), S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345"), S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, 1, S(""), S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345"), S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 11, 0, S(""), S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S("abcde"), 6, 0, S(""), S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), S("can't happen"));
+  test(S("abcdefghij"), 0, 0, S(""), S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 1, S(""), S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 5, S(""), S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 9, S(""), S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), S("12345j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 10, S(""), S(""));
+  test(S("abcdefghij"), 0, 10, S("12345"), S("12345"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), S("1234567890"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcdefghij"), 0, 11, S(""), S(""));
+  test(S("abcdefghij"), 0, 11, S("12345"), S("12345"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), S("1234567890"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcdefghij"), 1, 0, S(""), S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 1, S(""), S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), S("a12345678901234567890cdefghij"));
+  test(S("abcdefghij"), 1, 4, S(""), S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 8, S(""), S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345"), S("a12345j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 9, S(""), S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345"), S("a12345"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcdefghij"), 1, 10, S(""), S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345"), S("a12345"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcdefghij"), 5, 0, S(""), S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 1, S(""), S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 2, S(""), S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 4, S(""), S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345"), S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 5, S(""), S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345"), S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 5, 6, S(""), S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345"), S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 9, 0, S(""), S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345"), S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 1, S(""), S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345"), S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 9, 2, S(""), S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345"), S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, S(""), S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345"), S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, 1, S(""), S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345"), S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 11, 0, S(""), S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, S(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S(""), S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S(""), S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S(""), S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S(""), S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S(""), S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S(""), S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S(""), S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S(""), S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S(""), S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S(""), S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S(""), S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S(""), S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S(""), S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), S("abcdefghij12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S(""), S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S(""), S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S(""), S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S(""), S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S(""), S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, S(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S(""), S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), S("12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S(""), S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S(""), S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S(""), S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S(""), S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S(""), S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), S("a12345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S(""), S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S(""), S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S(""), S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S(""), S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S(""), S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), S("abcdefghij12345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S(""), S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S(""), S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), S("abcdefghij12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S(""), S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S(""), S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S(""), S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S(""), S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S(""), S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
@@ -391,8 +381,7 @@ void test() {
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_size_size.pass.cpp
index b700eb7f0c20ed9..00e8a901c332760 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_size_size.pass.cpp
@@ -25,5952 +25,5955 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos1, typename S::size_type n1,
-     S str, typename S::size_type pos2, typename S::size_type n2,
-     S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos1 <= old_size && pos2 <= str.size())
-    {
-        s.replace(pos1, n1, str, pos2, n2);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-        typename S::size_type xlen = std::min(n1, old_size - pos1);
-        typename S::size_type rlen = std::min(n2, str.size() - pos2);
-        assert(s.size() == old_size - xlen + rlen);
-    }
+test(S s,
+     typename S::size_type pos1,
+     typename S::size_type n1,
+     S str,
+     typename S::size_type pos2,
+     typename S::size_type n2,
+     S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos1 <= old_size && pos2 <= str.size()) {
+    s.replace(pos1, n1, str, pos2, n2);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+    typename S::size_type xlen = std::min(n1, old_size - pos1);
+    typename S::size_type rlen = std::min(n2, str.size() - pos2);
+    assert(s.size() == old_size - xlen + rlen);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.replace(pos1, n1, str, pos2, n2);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > old_size || pos2 > str.size());
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.replace(pos1, n1, str, pos2, n2);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > old_size || pos2 > str.size());
+      assert(s == s0);
     }
+  }
 #endif
 }
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test_npos(S s, typename S::size_type pos1, typename S::size_type n1,
-     S str, typename S::size_type pos2,
-     S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos1 <= old_size && pos2 <= str.size())
-    {
-        s.replace(pos1, n1, str, pos2);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-        typename S::size_type xlen = std::min(n1, old_size - pos1);
-        typename S::size_type rlen = std::min(S::npos, str.size() - pos2);
-        assert(s.size() == old_size - xlen + rlen);
-    }
+test_npos(S s, typename S::size_type pos1, typename S::size_type n1, S str, typename S::size_type pos2, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos1 <= old_size && pos2 <= str.size()) {
+    s.replace(pos1, n1, str, pos2);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+    typename S::size_type xlen = std::min(n1, old_size - pos1);
+    typename S::size_type rlen = std::min(S::npos, str.size() - pos2);
+    assert(s.size() == old_size - xlen + rlen);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.replace(pos1, n1, str, pos2);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > old_size || pos2 > str.size());
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.replace(pos1, n1, str, pos2);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > old_size || pos2 > str.size());
+      assert(s == s0);
     }
+  }
 #endif
 }
 
-
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, S(""), 0, 0, S(""));
-    test(S(""), 0, 0, S(""), 0, 1, S(""));
-    test(S(""), 0, 0, S(""), 1, 0, S("can't happen"));
-    test(S(""), 0, 0, S("12345"), 0, 0, S(""));
-    test(S(""), 0, 0, S("12345"), 0, 1, S("1"));
-    test(S(""), 0, 0, S("12345"), 0, 2, S("12"));
-    test(S(""), 0, 0, S("12345"), 0, 4, S("1234"));
-    test(S(""), 0, 0, S("12345"), 0, 5, S("12345"));
-    test(S(""), 0, 0, S("12345"), 0, 6, S("12345"));
-    test(S(""), 0, 0, S("12345"), 1, 0, S(""));
-    test(S(""), 0, 0, S("12345"), 1, 1, S("2"));
-    test(S(""), 0, 0, S("12345"), 1, 2, S("23"));
-    test(S(""), 0, 0, S("12345"), 1, 3, S("234"));
-    test(S(""), 0, 0, S("12345"), 1, 4, S("2345"));
-    test(S(""), 0, 0, S("12345"), 1, 5, S("2345"));
-    test(S(""), 0, 0, S("12345"), 2, 0, S(""));
-    test(S(""), 0, 0, S("12345"), 2, 1, S("3"));
-    test(S(""), 0, 0, S("12345"), 2, 2, S("34"));
-    test(S(""), 0, 0, S("12345"), 2, 3, S("345"));
-    test(S(""), 0, 0, S("12345"), 2, 4, S("345"));
-    test(S(""), 0, 0, S("12345"), 4, 0, S(""));
-    test(S(""), 0, 0, S("12345"), 4, 1, S("5"));
-    test(S(""), 0, 0, S("12345"), 4, 2, S("5"));
-    test(S(""), 0, 0, S("12345"), 5, 0, S(""));
-    test(S(""), 0, 0, S("12345"), 5, 1, S(""));
-    test(S(""), 0, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S(""), 0, 0, S("1234567890"), 0, 0, S(""));
-    test(S(""), 0, 0, S("1234567890"), 0, 1, S("1"));
-    test(S(""), 0, 0, S("1234567890"), 0, 5, S("12345"));
-    test(S(""), 0, 0, S("1234567890"), 0, 9, S("123456789"));
-    test(S(""), 0, 0, S("1234567890"), 0, 10, S("1234567890"));
-    test(S(""), 0, 0, S("1234567890"), 0, 11, S("1234567890"));
-    test(S(""), 0, 0, S("1234567890"), 1, 0, S(""));
-    test(S(""), 0, 0, S("1234567890"), 1, 1, S("2"));
-    test(S(""), 0, 0, S("1234567890"), 1, 4, S("2345"));
-    test(S(""), 0, 0, S("1234567890"), 1, 8, S("23456789"));
-    test(S(""), 0, 0, S("1234567890"), 1, 9, S("234567890"));
-    test(S(""), 0, 0, S("1234567890"), 1, 10, S("234567890"));
-    test(S(""), 0, 0, S("1234567890"), 5, 0, S(""));
-    test(S(""), 0, 0, S("1234567890"), 5, 1, S("6"));
-    test(S(""), 0, 0, S("1234567890"), 5, 2, S("67"));
-    test(S(""), 0, 0, S("1234567890"), 5, 4, S("6789"));
-    test(S(""), 0, 0, S("1234567890"), 5, 5, S("67890"));
-    test(S(""), 0, 0, S("1234567890"), 5, 6, S("67890"));
-    test(S(""), 0, 0, S("1234567890"), 9, 0, S(""));
-    test(S(""), 0, 0, S("1234567890"), 9, 1, S("0"));
-    test(S(""), 0, 0, S("1234567890"), 9, 2, S("0"));
-    test(S(""), 0, 0, S("1234567890"), 10, 0, S(""));
-    test(S(""), 0, 0, S("1234567890"), 10, 1, S(""));
-    test(S(""), 0, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S(""), 0, 0, S("12345678901234567890"), 0, 0, S(""));
-    test(S(""), 0, 0, S("12345678901234567890"), 0, 1, S("1"));
-    test(S(""), 0, 0, S("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S(""), 0, 0, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S(""), 0, 0, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S(""), 0, 0, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S(""), 0, 0, S("12345678901234567890"), 1, 0, S(""));
-    test(S(""), 0, 0, S("12345678901234567890"), 1, 1, S("2"));
-    test(S(""), 0, 0, S("12345678901234567890"), 1, 9, S("234567890"));
-    test(S(""), 0, 0, S("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S(""), 0, 0, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S(""), 0, 0, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S(""), 0, 0, S("12345678901234567890"), 10, 0, S(""));
-    test(S(""), 0, 0, S("12345678901234567890"), 10, 1, S("1"));
-    test(S(""), 0, 0, S("12345678901234567890"), 10, 5, S("12345"));
-    test(S(""), 0, 0, S("12345678901234567890"), 10, 9, S("123456789"));
-    test(S(""), 0, 0, S("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S(""), 0, 0, S("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S(""), 0, 0, S("12345678901234567890"), 19, 0, S(""));
-    test(S(""), 0, 0, S("12345678901234567890"), 19, 1, S("0"));
-    test(S(""), 0, 0, S("12345678901234567890"), 19, 2, S("0"));
-    test(S(""), 0, 0, S("12345678901234567890"), 20, 0, S(""));
-    test(S(""), 0, 0, S("12345678901234567890"), 20, 1, S(""));
-    test(S(""), 0, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S(""), 0, 1, S(""), 0, 0, S(""));
-    test(S(""), 0, 1, S(""), 0, 1, S(""));
-    test(S(""), 0, 1, S(""), 1, 0, S("can't happen"));
-    test(S(""), 0, 1, S("12345"), 0, 0, S(""));
-    test(S(""), 0, 1, S("12345"), 0, 1, S("1"));
-    test(S(""), 0, 1, S("12345"), 0, 2, S("12"));
-    test(S(""), 0, 1, S("12345"), 0, 4, S("1234"));
-    test(S(""), 0, 1, S("12345"), 0, 5, S("12345"));
-    test(S(""), 0, 1, S("12345"), 0, 6, S("12345"));
-    test(S(""), 0, 1, S("12345"), 1, 0, S(""));
-    test(S(""), 0, 1, S("12345"), 1, 1, S("2"));
-    test(S(""), 0, 1, S("12345"), 1, 2, S("23"));
-    test(S(""), 0, 1, S("12345"), 1, 3, S("234"));
-    test(S(""), 0, 1, S("12345"), 1, 4, S("2345"));
-    test(S(""), 0, 1, S("12345"), 1, 5, S("2345"));
-    test(S(""), 0, 1, S("12345"), 2, 0, S(""));
-    test(S(""), 0, 1, S("12345"), 2, 1, S("3"));
-    test(S(""), 0, 1, S("12345"), 2, 2, S("34"));
-    test(S(""), 0, 1, S("12345"), 2, 3, S("345"));
-    test(S(""), 0, 1, S("12345"), 2, 4, S("345"));
-    test(S(""), 0, 1, S("12345"), 4, 0, S(""));
-    test(S(""), 0, 1, S("12345"), 4, 1, S("5"));
-    test(S(""), 0, 1, S("12345"), 4, 2, S("5"));
-    test(S(""), 0, 1, S("12345"), 5, 0, S(""));
-    test(S(""), 0, 1, S("12345"), 5, 1, S(""));
-    test(S(""), 0, 1, S("12345"), 6, 0, S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, S(""), 0, 0, S(""));
+  test(S(""), 0, 0, S(""), 0, 1, S(""));
+  test(S(""), 0, 0, S(""), 1, 0, S("can't happen"));
+  test(S(""), 0, 0, S("12345"), 0, 0, S(""));
+  test(S(""), 0, 0, S("12345"), 0, 1, S("1"));
+  test(S(""), 0, 0, S("12345"), 0, 2, S("12"));
+  test(S(""), 0, 0, S("12345"), 0, 4, S("1234"));
+  test(S(""), 0, 0, S("12345"), 0, 5, S("12345"));
+  test(S(""), 0, 0, S("12345"), 0, 6, S("12345"));
+  test(S(""), 0, 0, S("12345"), 1, 0, S(""));
+  test(S(""), 0, 0, S("12345"), 1, 1, S("2"));
+  test(S(""), 0, 0, S("12345"), 1, 2, S("23"));
+  test(S(""), 0, 0, S("12345"), 1, 3, S("234"));
+  test(S(""), 0, 0, S("12345"), 1, 4, S("2345"));
+  test(S(""), 0, 0, S("12345"), 1, 5, S("2345"));
+  test(S(""), 0, 0, S("12345"), 2, 0, S(""));
+  test(S(""), 0, 0, S("12345"), 2, 1, S("3"));
+  test(S(""), 0, 0, S("12345"), 2, 2, S("34"));
+  test(S(""), 0, 0, S("12345"), 2, 3, S("345"));
+  test(S(""), 0, 0, S("12345"), 2, 4, S("345"));
+  test(S(""), 0, 0, S("12345"), 4, 0, S(""));
+  test(S(""), 0, 0, S("12345"), 4, 1, S("5"));
+  test(S(""), 0, 0, S("12345"), 4, 2, S("5"));
+  test(S(""), 0, 0, S("12345"), 5, 0, S(""));
+  test(S(""), 0, 0, S("12345"), 5, 1, S(""));
+  test(S(""), 0, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S(""), 0, 0, S("1234567890"), 0, 0, S(""));
+  test(S(""), 0, 0, S("1234567890"), 0, 1, S("1"));
+  test(S(""), 0, 0, S("1234567890"), 0, 5, S("12345"));
+  test(S(""), 0, 0, S("1234567890"), 0, 9, S("123456789"));
+  test(S(""), 0, 0, S("1234567890"), 0, 10, S("1234567890"));
+  test(S(""), 0, 0, S("1234567890"), 0, 11, S("1234567890"));
+  test(S(""), 0, 0, S("1234567890"), 1, 0, S(""));
+  test(S(""), 0, 0, S("1234567890"), 1, 1, S("2"));
+  test(S(""), 0, 0, S("1234567890"), 1, 4, S("2345"));
+  test(S(""), 0, 0, S("1234567890"), 1, 8, S("23456789"));
+  test(S(""), 0, 0, S("1234567890"), 1, 9, S("234567890"));
+  test(S(""), 0, 0, S("1234567890"), 1, 10, S("234567890"));
+  test(S(""), 0, 0, S("1234567890"), 5, 0, S(""));
+  test(S(""), 0, 0, S("1234567890"), 5, 1, S("6"));
+  test(S(""), 0, 0, S("1234567890"), 5, 2, S("67"));
+  test(S(""), 0, 0, S("1234567890"), 5, 4, S("6789"));
+  test(S(""), 0, 0, S("1234567890"), 5, 5, S("67890"));
+  test(S(""), 0, 0, S("1234567890"), 5, 6, S("67890"));
+  test(S(""), 0, 0, S("1234567890"), 9, 0, S(""));
+  test(S(""), 0, 0, S("1234567890"), 9, 1, S("0"));
+  test(S(""), 0, 0, S("1234567890"), 9, 2, S("0"));
+  test(S(""), 0, 0, S("1234567890"), 10, 0, S(""));
+  test(S(""), 0, 0, S("1234567890"), 10, 1, S(""));
+  test(S(""), 0, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S(""), 0, 0, S("12345678901234567890"), 0, 0, S(""));
+  test(S(""), 0, 0, S("12345678901234567890"), 0, 1, S("1"));
+  test(S(""), 0, 0, S("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S(""), 0, 0, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S(""), 0, 0, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S(""), 0, 0, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S(""), 0, 0, S("12345678901234567890"), 1, 0, S(""));
+  test(S(""), 0, 0, S("12345678901234567890"), 1, 1, S("2"));
+  test(S(""), 0, 0, S("12345678901234567890"), 1, 9, S("234567890"));
+  test(S(""), 0, 0, S("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S(""), 0, 0, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S(""), 0, 0, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S(""), 0, 0, S("12345678901234567890"), 10, 0, S(""));
+  test(S(""), 0, 0, S("12345678901234567890"), 10, 1, S("1"));
+  test(S(""), 0, 0, S("12345678901234567890"), 10, 5, S("12345"));
+  test(S(""), 0, 0, S("12345678901234567890"), 10, 9, S("123456789"));
+  test(S(""), 0, 0, S("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S(""), 0, 0, S("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S(""), 0, 0, S("12345678901234567890"), 19, 0, S(""));
+  test(S(""), 0, 0, S("12345678901234567890"), 19, 1, S("0"));
+  test(S(""), 0, 0, S("12345678901234567890"), 19, 2, S("0"));
+  test(S(""), 0, 0, S("12345678901234567890"), 20, 0, S(""));
+  test(S(""), 0, 0, S("12345678901234567890"), 20, 1, S(""));
+  test(S(""), 0, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S(""), 0, 1, S(""), 0, 0, S(""));
+  test(S(""), 0, 1, S(""), 0, 1, S(""));
+  test(S(""), 0, 1, S(""), 1, 0, S("can't happen"));
+  test(S(""), 0, 1, S("12345"), 0, 0, S(""));
+  test(S(""), 0, 1, S("12345"), 0, 1, S("1"));
+  test(S(""), 0, 1, S("12345"), 0, 2, S("12"));
+  test(S(""), 0, 1, S("12345"), 0, 4, S("1234"));
+  test(S(""), 0, 1, S("12345"), 0, 5, S("12345"));
+  test(S(""), 0, 1, S("12345"), 0, 6, S("12345"));
+  test(S(""), 0, 1, S("12345"), 1, 0, S(""));
+  test(S(""), 0, 1, S("12345"), 1, 1, S("2"));
+  test(S(""), 0, 1, S("12345"), 1, 2, S("23"));
+  test(S(""), 0, 1, S("12345"), 1, 3, S("234"));
+  test(S(""), 0, 1, S("12345"), 1, 4, S("2345"));
+  test(S(""), 0, 1, S("12345"), 1, 5, S("2345"));
+  test(S(""), 0, 1, S("12345"), 2, 0, S(""));
+  test(S(""), 0, 1, S("12345"), 2, 1, S("3"));
+  test(S(""), 0, 1, S("12345"), 2, 2, S("34"));
+  test(S(""), 0, 1, S("12345"), 2, 3, S("345"));
+  test(S(""), 0, 1, S("12345"), 2, 4, S("345"));
+  test(S(""), 0, 1, S("12345"), 4, 0, S(""));
+  test(S(""), 0, 1, S("12345"), 4, 1, S("5"));
+  test(S(""), 0, 1, S("12345"), 4, 2, S("5"));
+  test(S(""), 0, 1, S("12345"), 5, 0, S(""));
+  test(S(""), 0, 1, S("12345"), 5, 1, S(""));
+  test(S(""), 0, 1, S("12345"), 6, 0, S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S(""), 0, 1, S("1234567890"), 0, 0, S(""));
-    test(S(""), 0, 1, S("1234567890"), 0, 1, S("1"));
-    test(S(""), 0, 1, S("1234567890"), 0, 5, S("12345"));
-    test(S(""), 0, 1, S("1234567890"), 0, 9, S("123456789"));
-    test(S(""), 0, 1, S("1234567890"), 0, 10, S("1234567890"));
-    test(S(""), 0, 1, S("1234567890"), 0, 11, S("1234567890"));
-    test(S(""), 0, 1, S("1234567890"), 1, 0, S(""));
-    test(S(""), 0, 1, S("1234567890"), 1, 1, S("2"));
-    test(S(""), 0, 1, S("1234567890"), 1, 4, S("2345"));
-    test(S(""), 0, 1, S("1234567890"), 1, 8, S("23456789"));
-    test(S(""), 0, 1, S("1234567890"), 1, 9, S("234567890"));
-    test(S(""), 0, 1, S("1234567890"), 1, 10, S("234567890"));
-    test(S(""), 0, 1, S("1234567890"), 5, 0, S(""));
-    test(S(""), 0, 1, S("1234567890"), 5, 1, S("6"));
-    test(S(""), 0, 1, S("1234567890"), 5, 2, S("67"));
-    test(S(""), 0, 1, S("1234567890"), 5, 4, S("6789"));
-    test(S(""), 0, 1, S("1234567890"), 5, 5, S("67890"));
-    test(S(""), 0, 1, S("1234567890"), 5, 6, S("67890"));
-    test(S(""), 0, 1, S("1234567890"), 9, 0, S(""));
-    test(S(""), 0, 1, S("1234567890"), 9, 1, S("0"));
-    test(S(""), 0, 1, S("1234567890"), 9, 2, S("0"));
-    test(S(""), 0, 1, S("1234567890"), 10, 0, S(""));
-    test(S(""), 0, 1, S("1234567890"), 10, 1, S(""));
-    test(S(""), 0, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S(""), 0, 1, S("12345678901234567890"), 0, 0, S(""));
-    test(S(""), 0, 1, S("12345678901234567890"), 0, 1, S("1"));
-    test(S(""), 0, 1, S("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S(""), 0, 1, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S(""), 0, 1, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S(""), 0, 1, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S(""), 0, 1, S("12345678901234567890"), 1, 0, S(""));
-    test(S(""), 0, 1, S("12345678901234567890"), 1, 1, S("2"));
-    test(S(""), 0, 1, S("12345678901234567890"), 1, 9, S("234567890"));
-    test(S(""), 0, 1, S("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S(""), 0, 1, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S(""), 0, 1, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S(""), 0, 1, S("12345678901234567890"), 10, 0, S(""));
-    test(S(""), 0, 1, S("12345678901234567890"), 10, 1, S("1"));
-    test(S(""), 0, 1, S("12345678901234567890"), 10, 5, S("12345"));
-    test(S(""), 0, 1, S("12345678901234567890"), 10, 9, S("123456789"));
-    test(S(""), 0, 1, S("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S(""), 0, 1, S("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S(""), 0, 1, S("12345678901234567890"), 19, 0, S(""));
-    test(S(""), 0, 1, S("12345678901234567890"), 19, 1, S("0"));
-    test(S(""), 0, 1, S("12345678901234567890"), 19, 2, S("0"));
-    test(S(""), 0, 1, S("12345678901234567890"), 20, 0, S(""));
-    test(S(""), 0, 1, S("12345678901234567890"), 20, 1, S(""));
-    test(S(""), 0, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S(""), 1, 0, S(""), 0, 0, S("can't happen"));
-    test(S(""), 1, 0, S(""), 0, 1, S("can't happen"));
-    test(S(""), 1, 0, S(""), 1, 0, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 0, 0, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 0, 1, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 0, 2, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 0, 4, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 0, 5, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 0, 6, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 1, 0, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 1, 1, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 1, 2, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 1, 3, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 1, 4, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 1, 5, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 2, 0, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 2, 1, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 2, 2, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 2, 3, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 2, 4, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 4, 0, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 4, 1, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 4, 2, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 5, 0, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 5, 1, S("can't happen"));
-    test(S(""), 1, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 0, 0, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 0, 1, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 0, 5, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 0, 9, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 0, 10, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 0, 11, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 1, 0, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 1, 1, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 1, 4, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 1, 8, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 1, 9, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 1, 10, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 5, 0, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 5, 1, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 5, 2, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 5, 4, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 5, 5, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 5, 6, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 9, 0, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 9, 1, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 9, 2, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 10, 0, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 10, 1, S("can't happen"));
-    test(S(""), 1, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 0, 1, S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S(""), 0, 1, S("1234567890"), 0, 0, S(""));
+  test(S(""), 0, 1, S("1234567890"), 0, 1, S("1"));
+  test(S(""), 0, 1, S("1234567890"), 0, 5, S("12345"));
+  test(S(""), 0, 1, S("1234567890"), 0, 9, S("123456789"));
+  test(S(""), 0, 1, S("1234567890"), 0, 10, S("1234567890"));
+  test(S(""), 0, 1, S("1234567890"), 0, 11, S("1234567890"));
+  test(S(""), 0, 1, S("1234567890"), 1, 0, S(""));
+  test(S(""), 0, 1, S("1234567890"), 1, 1, S("2"));
+  test(S(""), 0, 1, S("1234567890"), 1, 4, S("2345"));
+  test(S(""), 0, 1, S("1234567890"), 1, 8, S("23456789"));
+  test(S(""), 0, 1, S("1234567890"), 1, 9, S("234567890"));
+  test(S(""), 0, 1, S("1234567890"), 1, 10, S("234567890"));
+  test(S(""), 0, 1, S("1234567890"), 5, 0, S(""));
+  test(S(""), 0, 1, S("1234567890"), 5, 1, S("6"));
+  test(S(""), 0, 1, S("1234567890"), 5, 2, S("67"));
+  test(S(""), 0, 1, S("1234567890"), 5, 4, S("6789"));
+  test(S(""), 0, 1, S("1234567890"), 5, 5, S("67890"));
+  test(S(""), 0, 1, S("1234567890"), 5, 6, S("67890"));
+  test(S(""), 0, 1, S("1234567890"), 9, 0, S(""));
+  test(S(""), 0, 1, S("1234567890"), 9, 1, S("0"));
+  test(S(""), 0, 1, S("1234567890"), 9, 2, S("0"));
+  test(S(""), 0, 1, S("1234567890"), 10, 0, S(""));
+  test(S(""), 0, 1, S("1234567890"), 10, 1, S(""));
+  test(S(""), 0, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S(""), 0, 1, S("12345678901234567890"), 0, 0, S(""));
+  test(S(""), 0, 1, S("12345678901234567890"), 0, 1, S("1"));
+  test(S(""), 0, 1, S("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S(""), 0, 1, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S(""), 0, 1, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S(""), 0, 1, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S(""), 0, 1, S("12345678901234567890"), 1, 0, S(""));
+  test(S(""), 0, 1, S("12345678901234567890"), 1, 1, S("2"));
+  test(S(""), 0, 1, S("12345678901234567890"), 1, 9, S("234567890"));
+  test(S(""), 0, 1, S("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S(""), 0, 1, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S(""), 0, 1, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S(""), 0, 1, S("12345678901234567890"), 10, 0, S(""));
+  test(S(""), 0, 1, S("12345678901234567890"), 10, 1, S("1"));
+  test(S(""), 0, 1, S("12345678901234567890"), 10, 5, S("12345"));
+  test(S(""), 0, 1, S("12345678901234567890"), 10, 9, S("123456789"));
+  test(S(""), 0, 1, S("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S(""), 0, 1, S("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S(""), 0, 1, S("12345678901234567890"), 19, 0, S(""));
+  test(S(""), 0, 1, S("12345678901234567890"), 19, 1, S("0"));
+  test(S(""), 0, 1, S("12345678901234567890"), 19, 2, S("0"));
+  test(S(""), 0, 1, S("12345678901234567890"), 20, 0, S(""));
+  test(S(""), 0, 1, S("12345678901234567890"), 20, 1, S(""));
+  test(S(""), 0, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S(""), 1, 0, S(""), 0, 0, S("can't happen"));
+  test(S(""), 1, 0, S(""), 0, 1, S("can't happen"));
+  test(S(""), 1, 0, S(""), 1, 0, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 0, 0, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 0, 1, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 0, 2, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 0, 4, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 0, 5, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 0, 6, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 1, 0, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 1, 1, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 1, 2, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 1, 3, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 1, 4, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 1, 5, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 2, 0, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 2, 1, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 2, 2, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 2, 3, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 2, 4, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 4, 0, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 4, 1, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 4, 2, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 5, 0, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 5, 1, S("can't happen"));
+  test(S(""), 1, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 0, 0, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 0, 1, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 0, 5, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 0, 9, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 0, 10, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 0, 11, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 1, 0, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 1, 1, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 1, 4, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 1, 8, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 1, 9, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 1, 10, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 5, 0, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 5, 1, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 5, 2, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 5, 4, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 5, 5, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 5, 6, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 9, 0, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 9, 1, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 9, 2, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 10, 0, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 10, 1, S("can't happen"));
+  test(S(""), 1, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 0, 1, S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S(""), 1, 0, S("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S(""), 1, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, 0, S(""), 0, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S(""), 0, 1, S("abcde"));
-    test(S("abcde"), 0, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, 0, S("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 0, 1, S("1abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 0, 2, S("12abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 0, 4, S("1234abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 0, 5, S("12345abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 0, 6, S("12345abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 1, 1, S("2abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 1, 2, S("23abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 1, 3, S("234abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 1, 4, S("2345abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 1, 5, S("2345abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 2, 1, S("3abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 2, 2, S("34abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 2, 3, S("345abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 2, 4, S("345abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 4, 1, S("5abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 4, 2, S("5abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 0, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, 0, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 0, 1, S("1abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 0, 5, S("12345abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 0, 9, S("123456789abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 0, 10, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 0, 11, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 1, 1, S("2abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 1, 4, S("2345abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 1, 8, S("23456789abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 1, 9, S("234567890abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 1, 10, S("234567890abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 5, 1, S("6abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 5, 2, S("67abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 5, 4, S("6789abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 5, 5, S("67890abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 5, 6, S("67890abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 9, 1, S("0abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 9, 2, S("0abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 0, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 0, 1, S("1abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 0, 10, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 0, 19, S("1234567890123456789abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 0, 20, S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 0, 21, S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 1, 1, S("2abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 1, 9, S("234567890abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 1, 18, S("234567890123456789abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 1, 19, S("2345678901234567890abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 1, 20, S("2345678901234567890abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 10, 1, S("1abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 10, 5, S("12345abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 10, 9, S("123456789abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 10, 10, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 10, 11, S("1234567890abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 19, 1, S("0abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 19, 2, S("0abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 0, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, 1, S(""), 0, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S(""), 0, 1, S("bcde"));
-    test(S("abcde"), 0, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, 1, S("12345"), 0, 0, S("bcde"));
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S(""), 1, 0, S("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S(""), 1, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, 0, S(""), 0, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S(""), 0, 1, S("abcde"));
+  test(S("abcde"), 0, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, 0, S("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 0, 1, S("1abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 0, 2, S("12abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 0, 4, S("1234abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 0, 5, S("12345abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 0, 6, S("12345abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 1, 1, S("2abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 1, 2, S("23abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 1, 3, S("234abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 1, 4, S("2345abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 1, 5, S("2345abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 2, 1, S("3abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 2, 2, S("34abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 2, 3, S("345abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 2, 4, S("345abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 4, 1, S("5abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 4, 2, S("5abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 0, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, 0, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 0, 1, S("1abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 0, 5, S("12345abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 0, 9, S("123456789abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 0, 10, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 0, 11, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 1, 1, S("2abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 1, 4, S("2345abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 1, 8, S("23456789abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 1, 9, S("234567890abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 1, 10, S("234567890abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 5, 1, S("6abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 5, 2, S("67abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 5, 4, S("6789abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 5, 5, S("67890abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 5, 6, S("67890abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 9, 1, S("0abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 9, 2, S("0abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 0, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 0, 1, S("1abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 0, 10, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 0, 19, S("1234567890123456789abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 0, 20, S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 0, 21, S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 1, 1, S("2abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 1, 9, S("234567890abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 1, 18, S("234567890123456789abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 1, 19, S("2345678901234567890abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 1, 20, S("2345678901234567890abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 10, 1, S("1abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 10, 5, S("12345abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 10, 9, S("123456789abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 10, 10, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 10, 11, S("1234567890abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 19, 1, S("0abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 19, 2, S("0abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 0, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, 1, S(""), 0, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S(""), 0, 1, S("bcde"));
+  test(S("abcde"), 0, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, 1, S("12345"), 0, 0, S("bcde"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test3()
-{
-    test(S("abcde"), 0, 1, S("12345"), 0, 1, S("1bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 0, 2, S("12bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 0, 4, S("1234bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 0, 5, S("12345bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 0, 6, S("12345bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 1, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 1, 1, S("2bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 1, 2, S("23bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 1, 3, S("234bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 1, 4, S("2345bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 1, 5, S("2345bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 2, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 2, 1, S("3bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 2, 2, S("34bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 2, 3, S("345bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 2, 4, S("345bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 4, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 4, 1, S("5bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 4, 2, S("5bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 5, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 5, 1, S("bcde"));
-    test(S("abcde"), 0, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, 1, S("1234567890"), 0, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 0, 1, S("1bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 0, 5, S("12345bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 0, 9, S("123456789bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 0, 10, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 0, 11, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 1, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 1, 1, S("2bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 1, 4, S("2345bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 1, 8, S("23456789bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 1, 9, S("234567890bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 1, 10, S("234567890bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 5, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 5, 1, S("6bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 5, 2, S("67bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 5, 4, S("6789bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 5, 5, S("67890bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 5, 6, S("67890bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 9, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 9, 1, S("0bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 9, 2, S("0bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 10, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 10, 1, S("bcde"));
-    test(S("abcde"), 0, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 0, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 0, 1, S("1bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 0, 10, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 0, 19, S("1234567890123456789bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 0, 20, S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 0, 21, S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 1, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 1, 1, S("2bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 1, 9, S("234567890bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 1, 18, S("234567890123456789bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 1, 19, S("2345678901234567890bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 1, 20, S("2345678901234567890bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 10, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 10, 1, S("1bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 10, 5, S("12345bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 10, 9, S("123456789bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 10, 10, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 10, 11, S("1234567890bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 19, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 19, 1, S("0bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 19, 2, S("0bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 20, 0, S("bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 20, 1, S("bcde"));
-    test(S("abcde"), 0, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, 2, S(""), 0, 0, S("cde"));
-    test(S("abcde"), 0, 2, S(""), 0, 1, S("cde"));
-    test(S("abcde"), 0, 2, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, 2, S("12345"), 0, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("12345"), 0, 1, S("1cde"));
-    test(S("abcde"), 0, 2, S("12345"), 0, 2, S("12cde"));
-    test(S("abcde"), 0, 2, S("12345"), 0, 4, S("1234cde"));
-    test(S("abcde"), 0, 2, S("12345"), 0, 5, S("12345cde"));
-    test(S("abcde"), 0, 2, S("12345"), 0, 6, S("12345cde"));
-    test(S("abcde"), 0, 2, S("12345"), 1, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("12345"), 1, 1, S("2cde"));
-    test(S("abcde"), 0, 2, S("12345"), 1, 2, S("23cde"));
-    test(S("abcde"), 0, 2, S("12345"), 1, 3, S("234cde"));
-    test(S("abcde"), 0, 2, S("12345"), 1, 4, S("2345cde"));
-    test(S("abcde"), 0, 2, S("12345"), 1, 5, S("2345cde"));
-    test(S("abcde"), 0, 2, S("12345"), 2, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("12345"), 2, 1, S("3cde"));
-    test(S("abcde"), 0, 2, S("12345"), 2, 2, S("34cde"));
-    test(S("abcde"), 0, 2, S("12345"), 2, 3, S("345cde"));
-    test(S("abcde"), 0, 2, S("12345"), 2, 4, S("345cde"));
-    test(S("abcde"), 0, 2, S("12345"), 4, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("12345"), 4, 1, S("5cde"));
-    test(S("abcde"), 0, 2, S("12345"), 4, 2, S("5cde"));
-    test(S("abcde"), 0, 2, S("12345"), 5, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("12345"), 5, 1, S("cde"));
-    test(S("abcde"), 0, 2, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, 2, S("1234567890"), 0, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 0, 1, S("1cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 0, 5, S("12345cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 0, 9, S("123456789cde"));
+TEST_CONSTEXPR_CXX20 bool test3() {
+  test(S("abcde"), 0, 1, S("12345"), 0, 1, S("1bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 0, 2, S("12bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 0, 4, S("1234bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 0, 5, S("12345bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 0, 6, S("12345bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 1, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 1, 1, S("2bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 1, 2, S("23bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 1, 3, S("234bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 1, 4, S("2345bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 1, 5, S("2345bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 2, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 2, 1, S("3bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 2, 2, S("34bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 2, 3, S("345bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 2, 4, S("345bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 4, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 4, 1, S("5bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 4, 2, S("5bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 5, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 5, 1, S("bcde"));
+  test(S("abcde"), 0, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, 1, S("1234567890"), 0, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 0, 1, S("1bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 0, 5, S("12345bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 0, 9, S("123456789bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 0, 10, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 0, 11, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 1, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 1, 1, S("2bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 1, 4, S("2345bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 1, 8, S("23456789bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 1, 9, S("234567890bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 1, 10, S("234567890bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 5, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 5, 1, S("6bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 5, 2, S("67bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 5, 4, S("6789bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 5, 5, S("67890bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 5, 6, S("67890bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 9, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 9, 1, S("0bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 9, 2, S("0bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 10, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 10, 1, S("bcde"));
+  test(S("abcde"), 0, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 0, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 0, 1, S("1bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 0, 10, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 0, 19, S("1234567890123456789bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 0, 20, S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 0, 21, S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 1, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 1, 1, S("2bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 1, 9, S("234567890bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 1, 18, S("234567890123456789bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 1, 19, S("2345678901234567890bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 1, 20, S("2345678901234567890bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 10, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 10, 1, S("1bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 10, 5, S("12345bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 10, 9, S("123456789bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 10, 10, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 10, 11, S("1234567890bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 19, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 19, 1, S("0bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 19, 2, S("0bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 20, 0, S("bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 20, 1, S("bcde"));
+  test(S("abcde"), 0, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, 2, S(""), 0, 0, S("cde"));
+  test(S("abcde"), 0, 2, S(""), 0, 1, S("cde"));
+  test(S("abcde"), 0, 2, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, 2, S("12345"), 0, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("12345"), 0, 1, S("1cde"));
+  test(S("abcde"), 0, 2, S("12345"), 0, 2, S("12cde"));
+  test(S("abcde"), 0, 2, S("12345"), 0, 4, S("1234cde"));
+  test(S("abcde"), 0, 2, S("12345"), 0, 5, S("12345cde"));
+  test(S("abcde"), 0, 2, S("12345"), 0, 6, S("12345cde"));
+  test(S("abcde"), 0, 2, S("12345"), 1, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("12345"), 1, 1, S("2cde"));
+  test(S("abcde"), 0, 2, S("12345"), 1, 2, S("23cde"));
+  test(S("abcde"), 0, 2, S("12345"), 1, 3, S("234cde"));
+  test(S("abcde"), 0, 2, S("12345"), 1, 4, S("2345cde"));
+  test(S("abcde"), 0, 2, S("12345"), 1, 5, S("2345cde"));
+  test(S("abcde"), 0, 2, S("12345"), 2, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("12345"), 2, 1, S("3cde"));
+  test(S("abcde"), 0, 2, S("12345"), 2, 2, S("34cde"));
+  test(S("abcde"), 0, 2, S("12345"), 2, 3, S("345cde"));
+  test(S("abcde"), 0, 2, S("12345"), 2, 4, S("345cde"));
+  test(S("abcde"), 0, 2, S("12345"), 4, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("12345"), 4, 1, S("5cde"));
+  test(S("abcde"), 0, 2, S("12345"), 4, 2, S("5cde"));
+  test(S("abcde"), 0, 2, S("12345"), 5, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("12345"), 5, 1, S("cde"));
+  test(S("abcde"), 0, 2, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, 2, S("1234567890"), 0, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 0, 1, S("1cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 0, 5, S("12345cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 0, 9, S("123456789cde"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test4()
-{
-    test(S("abcde"), 0, 2, S("1234567890"), 0, 10, S("1234567890cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 0, 11, S("1234567890cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 1, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 1, 1, S("2cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 1, 4, S("2345cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 1, 8, S("23456789cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 1, 9, S("234567890cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 1, 10, S("234567890cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 5, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 5, 1, S("6cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 5, 2, S("67cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 5, 4, S("6789cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 5, 5, S("67890cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 5, 6, S("67890cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 9, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 9, 1, S("0cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 9, 2, S("0cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 10, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 10, 1, S("cde"));
-    test(S("abcde"), 0, 2, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 0, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 0, 1, S("1cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 0, 10, S("1234567890cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 0, 19, S("1234567890123456789cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 0, 20, S("12345678901234567890cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 0, 21, S("12345678901234567890cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 1, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 1, 1, S("2cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 1, 9, S("234567890cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 1, 18, S("234567890123456789cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 1, 19, S("2345678901234567890cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 1, 20, S("2345678901234567890cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 10, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 10, 1, S("1cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 10, 5, S("12345cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 10, 9, S("123456789cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 10, 10, S("1234567890cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 10, 11, S("1234567890cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 19, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 19, 1, S("0cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 19, 2, S("0cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 20, 0, S("cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 20, 1, S("cde"));
-    test(S("abcde"), 0, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, 4, S(""), 0, 0, S("e"));
-    test(S("abcde"), 0, 4, S(""), 0, 1, S("e"));
-    test(S("abcde"), 0, 4, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, 4, S("12345"), 0, 0, S("e"));
-    test(S("abcde"), 0, 4, S("12345"), 0, 1, S("1e"));
-    test(S("abcde"), 0, 4, S("12345"), 0, 2, S("12e"));
-    test(S("abcde"), 0, 4, S("12345"), 0, 4, S("1234e"));
-    test(S("abcde"), 0, 4, S("12345"), 0, 5, S("12345e"));
-    test(S("abcde"), 0, 4, S("12345"), 0, 6, S("12345e"));
-    test(S("abcde"), 0, 4, S("12345"), 1, 0, S("e"));
-    test(S("abcde"), 0, 4, S("12345"), 1, 1, S("2e"));
-    test(S("abcde"), 0, 4, S("12345"), 1, 2, S("23e"));
-    test(S("abcde"), 0, 4, S("12345"), 1, 3, S("234e"));
-    test(S("abcde"), 0, 4, S("12345"), 1, 4, S("2345e"));
-    test(S("abcde"), 0, 4, S("12345"), 1, 5, S("2345e"));
-    test(S("abcde"), 0, 4, S("12345"), 2, 0, S("e"));
-    test(S("abcde"), 0, 4, S("12345"), 2, 1, S("3e"));
-    test(S("abcde"), 0, 4, S("12345"), 2, 2, S("34e"));
-    test(S("abcde"), 0, 4, S("12345"), 2, 3, S("345e"));
-    test(S("abcde"), 0, 4, S("12345"), 2, 4, S("345e"));
-    test(S("abcde"), 0, 4, S("12345"), 4, 0, S("e"));
-    test(S("abcde"), 0, 4, S("12345"), 4, 1, S("5e"));
-    test(S("abcde"), 0, 4, S("12345"), 4, 2, S("5e"));
-    test(S("abcde"), 0, 4, S("12345"), 5, 0, S("e"));
-    test(S("abcde"), 0, 4, S("12345"), 5, 1, S("e"));
-    test(S("abcde"), 0, 4, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, 4, S("1234567890"), 0, 0, S("e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 0, 1, S("1e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 0, 5, S("12345e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 0, 9, S("123456789e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 0, 10, S("1234567890e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 0, 11, S("1234567890e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 1, 0, S("e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 1, 1, S("2e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 1, 4, S("2345e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 1, 8, S("23456789e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 1, 9, S("234567890e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 1, 10, S("234567890e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 5, 0, S("e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 5, 1, S("6e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 5, 2, S("67e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 5, 4, S("6789e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 5, 5, S("67890e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 5, 6, S("67890e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 9, 0, S("e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 9, 1, S("0e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 9, 2, S("0e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 10, 0, S("e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 10, 1, S("e"));
-    test(S("abcde"), 0, 4, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 0, 0, S("e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 0, 1, S("1e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 0, 10, S("1234567890e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 0, 19, S("1234567890123456789e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 0, 20, S("12345678901234567890e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 0, 21, S("12345678901234567890e"));
+TEST_CONSTEXPR_CXX20 bool test4() {
+  test(S("abcde"), 0, 2, S("1234567890"), 0, 10, S("1234567890cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 0, 11, S("1234567890cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 1, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 1, 1, S("2cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 1, 4, S("2345cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 1, 8, S("23456789cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 1, 9, S("234567890cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 1, 10, S("234567890cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 5, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 5, 1, S("6cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 5, 2, S("67cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 5, 4, S("6789cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 5, 5, S("67890cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 5, 6, S("67890cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 9, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 9, 1, S("0cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 9, 2, S("0cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 10, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 10, 1, S("cde"));
+  test(S("abcde"), 0, 2, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 0, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 0, 1, S("1cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 0, 10, S("1234567890cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 0, 19, S("1234567890123456789cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 0, 20, S("12345678901234567890cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 0, 21, S("12345678901234567890cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 1, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 1, 1, S("2cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 1, 9, S("234567890cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 1, 18, S("234567890123456789cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 1, 19, S("2345678901234567890cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 1, 20, S("2345678901234567890cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 10, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 10, 1, S("1cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 10, 5, S("12345cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 10, 9, S("123456789cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 10, 10, S("1234567890cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 10, 11, S("1234567890cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 19, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 19, 1, S("0cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 19, 2, S("0cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 20, 0, S("cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 20, 1, S("cde"));
+  test(S("abcde"), 0, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, 4, S(""), 0, 0, S("e"));
+  test(S("abcde"), 0, 4, S(""), 0, 1, S("e"));
+  test(S("abcde"), 0, 4, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, 4, S("12345"), 0, 0, S("e"));
+  test(S("abcde"), 0, 4, S("12345"), 0, 1, S("1e"));
+  test(S("abcde"), 0, 4, S("12345"), 0, 2, S("12e"));
+  test(S("abcde"), 0, 4, S("12345"), 0, 4, S("1234e"));
+  test(S("abcde"), 0, 4, S("12345"), 0, 5, S("12345e"));
+  test(S("abcde"), 0, 4, S("12345"), 0, 6, S("12345e"));
+  test(S("abcde"), 0, 4, S("12345"), 1, 0, S("e"));
+  test(S("abcde"), 0, 4, S("12345"), 1, 1, S("2e"));
+  test(S("abcde"), 0, 4, S("12345"), 1, 2, S("23e"));
+  test(S("abcde"), 0, 4, S("12345"), 1, 3, S("234e"));
+  test(S("abcde"), 0, 4, S("12345"), 1, 4, S("2345e"));
+  test(S("abcde"), 0, 4, S("12345"), 1, 5, S("2345e"));
+  test(S("abcde"), 0, 4, S("12345"), 2, 0, S("e"));
+  test(S("abcde"), 0, 4, S("12345"), 2, 1, S("3e"));
+  test(S("abcde"), 0, 4, S("12345"), 2, 2, S("34e"));
+  test(S("abcde"), 0, 4, S("12345"), 2, 3, S("345e"));
+  test(S("abcde"), 0, 4, S("12345"), 2, 4, S("345e"));
+  test(S("abcde"), 0, 4, S("12345"), 4, 0, S("e"));
+  test(S("abcde"), 0, 4, S("12345"), 4, 1, S("5e"));
+  test(S("abcde"), 0, 4, S("12345"), 4, 2, S("5e"));
+  test(S("abcde"), 0, 4, S("12345"), 5, 0, S("e"));
+  test(S("abcde"), 0, 4, S("12345"), 5, 1, S("e"));
+  test(S("abcde"), 0, 4, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, 4, S("1234567890"), 0, 0, S("e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 0, 1, S("1e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 0, 5, S("12345e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 0, 9, S("123456789e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 0, 10, S("1234567890e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 0, 11, S("1234567890e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 1, 0, S("e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 1, 1, S("2e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 1, 4, S("2345e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 1, 8, S("23456789e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 1, 9, S("234567890e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 1, 10, S("234567890e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 5, 0, S("e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 5, 1, S("6e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 5, 2, S("67e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 5, 4, S("6789e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 5, 5, S("67890e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 5, 6, S("67890e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 9, 0, S("e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 9, 1, S("0e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 9, 2, S("0e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 10, 0, S("e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 10, 1, S("e"));
+  test(S("abcde"), 0, 4, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 0, 0, S("e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 0, 1, S("1e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 0, 10, S("1234567890e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 0, 19, S("1234567890123456789e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 0, 20, S("12345678901234567890e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 0, 21, S("12345678901234567890e"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test5()
-{
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 1, 0, S("e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 1, 1, S("2e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 1, 9, S("234567890e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 1, 18, S("234567890123456789e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 1, 19, S("2345678901234567890e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 1, 20, S("2345678901234567890e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 10, 0, S("e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 10, 1, S("1e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 10, 5, S("12345e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 10, 9, S("123456789e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 10, 10, S("1234567890e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 10, 11, S("1234567890e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 19, 0, S("e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 19, 1, S("0e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 19, 2, S("0e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 20, 0, S("e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 20, 1, S("e"));
-    test(S("abcde"), 0, 4, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, 5, S(""), 0, 0, S(""));
-    test(S("abcde"), 0, 5, S(""), 0, 1, S(""));
-    test(S("abcde"), 0, 5, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, 5, S("12345"), 0, 0, S(""));
-    test(S("abcde"), 0, 5, S("12345"), 0, 1, S("1"));
-    test(S("abcde"), 0, 5, S("12345"), 0, 2, S("12"));
-    test(S("abcde"), 0, 5, S("12345"), 0, 4, S("1234"));
-    test(S("abcde"), 0, 5, S("12345"), 0, 5, S("12345"));
-    test(S("abcde"), 0, 5, S("12345"), 0, 6, S("12345"));
-    test(S("abcde"), 0, 5, S("12345"), 1, 0, S(""));
-    test(S("abcde"), 0, 5, S("12345"), 1, 1, S("2"));
-    test(S("abcde"), 0, 5, S("12345"), 1, 2, S("23"));
-    test(S("abcde"), 0, 5, S("12345"), 1, 3, S("234"));
-    test(S("abcde"), 0, 5, S("12345"), 1, 4, S("2345"));
-    test(S("abcde"), 0, 5, S("12345"), 1, 5, S("2345"));
-    test(S("abcde"), 0, 5, S("12345"), 2, 0, S(""));
-    test(S("abcde"), 0, 5, S("12345"), 2, 1, S("3"));
-    test(S("abcde"), 0, 5, S("12345"), 2, 2, S("34"));
-    test(S("abcde"), 0, 5, S("12345"), 2, 3, S("345"));
-    test(S("abcde"), 0, 5, S("12345"), 2, 4, S("345"));
-    test(S("abcde"), 0, 5, S("12345"), 4, 0, S(""));
-    test(S("abcde"), 0, 5, S("12345"), 4, 1, S("5"));
-    test(S("abcde"), 0, 5, S("12345"), 4, 2, S("5"));
-    test(S("abcde"), 0, 5, S("12345"), 5, 0, S(""));
-    test(S("abcde"), 0, 5, S("12345"), 5, 1, S(""));
-    test(S("abcde"), 0, 5, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, 5, S("1234567890"), 0, 0, S(""));
-    test(S("abcde"), 0, 5, S("1234567890"), 0, 1, S("1"));
-    test(S("abcde"), 0, 5, S("1234567890"), 0, 5, S("12345"));
-    test(S("abcde"), 0, 5, S("1234567890"), 0, 9, S("123456789"));
-    test(S("abcde"), 0, 5, S("1234567890"), 0, 10, S("1234567890"));
-    test(S("abcde"), 0, 5, S("1234567890"), 0, 11, S("1234567890"));
-    test(S("abcde"), 0, 5, S("1234567890"), 1, 0, S(""));
-    test(S("abcde"), 0, 5, S("1234567890"), 1, 1, S("2"));
-    test(S("abcde"), 0, 5, S("1234567890"), 1, 4, S("2345"));
-    test(S("abcde"), 0, 5, S("1234567890"), 1, 8, S("23456789"));
-    test(S("abcde"), 0, 5, S("1234567890"), 1, 9, S("234567890"));
-    test(S("abcde"), 0, 5, S("1234567890"), 1, 10, S("234567890"));
-    test(S("abcde"), 0, 5, S("1234567890"), 5, 0, S(""));
-    test(S("abcde"), 0, 5, S("1234567890"), 5, 1, S("6"));
-    test(S("abcde"), 0, 5, S("1234567890"), 5, 2, S("67"));
-    test(S("abcde"), 0, 5, S("1234567890"), 5, 4, S("6789"));
-    test(S("abcde"), 0, 5, S("1234567890"), 5, 5, S("67890"));
-    test(S("abcde"), 0, 5, S("1234567890"), 5, 6, S("67890"));
-    test(S("abcde"), 0, 5, S("1234567890"), 9, 0, S(""));
-    test(S("abcde"), 0, 5, S("1234567890"), 9, 1, S("0"));
-    test(S("abcde"), 0, 5, S("1234567890"), 9, 2, S("0"));
-    test(S("abcde"), 0, 5, S("1234567890"), 10, 0, S(""));
-    test(S("abcde"), 0, 5, S("1234567890"), 10, 1, S(""));
-    test(S("abcde"), 0, 5, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 0, 0, S(""));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 0, 1, S("1"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 1, 0, S(""));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 1, 1, S("2"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 1, 9, S("234567890"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 10, 0, S(""));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 10, 1, S("1"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 10, 5, S("12345"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 10, 9, S("123456789"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 19, 0, S(""));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 19, 1, S("0"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 19, 2, S("0"));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 20, 0, S(""));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 20, 1, S(""));
-    test(S("abcde"), 0, 5, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 0, 6, S(""), 0, 0, S(""));
-    test(S("abcde"), 0, 6, S(""), 0, 1, S(""));
-    test(S("abcde"), 0, 6, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 0, 6, S("12345"), 0, 0, S(""));
-    test(S("abcde"), 0, 6, S("12345"), 0, 1, S("1"));
-    test(S("abcde"), 0, 6, S("12345"), 0, 2, S("12"));
-    test(S("abcde"), 0, 6, S("12345"), 0, 4, S("1234"));
-    test(S("abcde"), 0, 6, S("12345"), 0, 5, S("12345"));
+TEST_CONSTEXPR_CXX20 bool test5() {
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 1, 0, S("e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 1, 1, S("2e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 1, 9, S("234567890e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 1, 18, S("234567890123456789e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 1, 19, S("2345678901234567890e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 1, 20, S("2345678901234567890e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 10, 0, S("e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 10, 1, S("1e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 10, 5, S("12345e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 10, 9, S("123456789e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 10, 10, S("1234567890e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 10, 11, S("1234567890e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 19, 0, S("e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 19, 1, S("0e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 19, 2, S("0e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 20, 0, S("e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 20, 1, S("e"));
+  test(S("abcde"), 0, 4, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, 5, S(""), 0, 0, S(""));
+  test(S("abcde"), 0, 5, S(""), 0, 1, S(""));
+  test(S("abcde"), 0, 5, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, 5, S("12345"), 0, 0, S(""));
+  test(S("abcde"), 0, 5, S("12345"), 0, 1, S("1"));
+  test(S("abcde"), 0, 5, S("12345"), 0, 2, S("12"));
+  test(S("abcde"), 0, 5, S("12345"), 0, 4, S("1234"));
+  test(S("abcde"), 0, 5, S("12345"), 0, 5, S("12345"));
+  test(S("abcde"), 0, 5, S("12345"), 0, 6, S("12345"));
+  test(S("abcde"), 0, 5, S("12345"), 1, 0, S(""));
+  test(S("abcde"), 0, 5, S("12345"), 1, 1, S("2"));
+  test(S("abcde"), 0, 5, S("12345"), 1, 2, S("23"));
+  test(S("abcde"), 0, 5, S("12345"), 1, 3, S("234"));
+  test(S("abcde"), 0, 5, S("12345"), 1, 4, S("2345"));
+  test(S("abcde"), 0, 5, S("12345"), 1, 5, S("2345"));
+  test(S("abcde"), 0, 5, S("12345"), 2, 0, S(""));
+  test(S("abcde"), 0, 5, S("12345"), 2, 1, S("3"));
+  test(S("abcde"), 0, 5, S("12345"), 2, 2, S("34"));
+  test(S("abcde"), 0, 5, S("12345"), 2, 3, S("345"));
+  test(S("abcde"), 0, 5, S("12345"), 2, 4, S("345"));
+  test(S("abcde"), 0, 5, S("12345"), 4, 0, S(""));
+  test(S("abcde"), 0, 5, S("12345"), 4, 1, S("5"));
+  test(S("abcde"), 0, 5, S("12345"), 4, 2, S("5"));
+  test(S("abcde"), 0, 5, S("12345"), 5, 0, S(""));
+  test(S("abcde"), 0, 5, S("12345"), 5, 1, S(""));
+  test(S("abcde"), 0, 5, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, 5, S("1234567890"), 0, 0, S(""));
+  test(S("abcde"), 0, 5, S("1234567890"), 0, 1, S("1"));
+  test(S("abcde"), 0, 5, S("1234567890"), 0, 5, S("12345"));
+  test(S("abcde"), 0, 5, S("1234567890"), 0, 9, S("123456789"));
+  test(S("abcde"), 0, 5, S("1234567890"), 0, 10, S("1234567890"));
+  test(S("abcde"), 0, 5, S("1234567890"), 0, 11, S("1234567890"));
+  test(S("abcde"), 0, 5, S("1234567890"), 1, 0, S(""));
+  test(S("abcde"), 0, 5, S("1234567890"), 1, 1, S("2"));
+  test(S("abcde"), 0, 5, S("1234567890"), 1, 4, S("2345"));
+  test(S("abcde"), 0, 5, S("1234567890"), 1, 8, S("23456789"));
+  test(S("abcde"), 0, 5, S("1234567890"), 1, 9, S("234567890"));
+  test(S("abcde"), 0, 5, S("1234567890"), 1, 10, S("234567890"));
+  test(S("abcde"), 0, 5, S("1234567890"), 5, 0, S(""));
+  test(S("abcde"), 0, 5, S("1234567890"), 5, 1, S("6"));
+  test(S("abcde"), 0, 5, S("1234567890"), 5, 2, S("67"));
+  test(S("abcde"), 0, 5, S("1234567890"), 5, 4, S("6789"));
+  test(S("abcde"), 0, 5, S("1234567890"), 5, 5, S("67890"));
+  test(S("abcde"), 0, 5, S("1234567890"), 5, 6, S("67890"));
+  test(S("abcde"), 0, 5, S("1234567890"), 9, 0, S(""));
+  test(S("abcde"), 0, 5, S("1234567890"), 9, 1, S("0"));
+  test(S("abcde"), 0, 5, S("1234567890"), 9, 2, S("0"));
+  test(S("abcde"), 0, 5, S("1234567890"), 10, 0, S(""));
+  test(S("abcde"), 0, 5, S("1234567890"), 10, 1, S(""));
+  test(S("abcde"), 0, 5, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 0, 0, S(""));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 0, 1, S("1"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 1, 0, S(""));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 1, 1, S("2"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 1, 9, S("234567890"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 10, 0, S(""));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 10, 1, S("1"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 10, 5, S("12345"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 10, 9, S("123456789"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 19, 0, S(""));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 19, 1, S("0"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 19, 2, S("0"));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 20, 0, S(""));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 20, 1, S(""));
+  test(S("abcde"), 0, 5, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 0, 6, S(""), 0, 0, S(""));
+  test(S("abcde"), 0, 6, S(""), 0, 1, S(""));
+  test(S("abcde"), 0, 6, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 0, 6, S("12345"), 0, 0, S(""));
+  test(S("abcde"), 0, 6, S("12345"), 0, 1, S("1"));
+  test(S("abcde"), 0, 6, S("12345"), 0, 2, S("12"));
+  test(S("abcde"), 0, 6, S("12345"), 0, 4, S("1234"));
+  test(S("abcde"), 0, 6, S("12345"), 0, 5, S("12345"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test6()
-{
-    test(S("abcde"), 0, 6, S("12345"), 0, 6, S("12345"));
-    test(S("abcde"), 0, 6, S("12345"), 1, 0, S(""));
-    test(S("abcde"), 0, 6, S("12345"), 1, 1, S("2"));
-    test(S("abcde"), 0, 6, S("12345"), 1, 2, S("23"));
-    test(S("abcde"), 0, 6, S("12345"), 1, 3, S("234"));
-    test(S("abcde"), 0, 6, S("12345"), 1, 4, S("2345"));
-    test(S("abcde"), 0, 6, S("12345"), 1, 5, S("2345"));
-    test(S("abcde"), 0, 6, S("12345"), 2, 0, S(""));
-    test(S("abcde"), 0, 6, S("12345"), 2, 1, S("3"));
-    test(S("abcde"), 0, 6, S("12345"), 2, 2, S("34"));
-    test(S("abcde"), 0, 6, S("12345"), 2, 3, S("345"));
-    test(S("abcde"), 0, 6, S("12345"), 2, 4, S("345"));
-    test(S("abcde"), 0, 6, S("12345"), 4, 0, S(""));
-    test(S("abcde"), 0, 6, S("12345"), 4, 1, S("5"));
-    test(S("abcde"), 0, 6, S("12345"), 4, 2, S("5"));
-    test(S("abcde"), 0, 6, S("12345"), 5, 0, S(""));
-    test(S("abcde"), 0, 6, S("12345"), 5, 1, S(""));
-    test(S("abcde"), 0, 6, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 0, 6, S("1234567890"), 0, 0, S(""));
-    test(S("abcde"), 0, 6, S("1234567890"), 0, 1, S("1"));
-    test(S("abcde"), 0, 6, S("1234567890"), 0, 5, S("12345"));
-    test(S("abcde"), 0, 6, S("1234567890"), 0, 9, S("123456789"));
-    test(S("abcde"), 0, 6, S("1234567890"), 0, 10, S("1234567890"));
-    test(S("abcde"), 0, 6, S("1234567890"), 0, 11, S("1234567890"));
-    test(S("abcde"), 0, 6, S("1234567890"), 1, 0, S(""));
-    test(S("abcde"), 0, 6, S("1234567890"), 1, 1, S("2"));
-    test(S("abcde"), 0, 6, S("1234567890"), 1, 4, S("2345"));
-    test(S("abcde"), 0, 6, S("1234567890"), 1, 8, S("23456789"));
-    test(S("abcde"), 0, 6, S("1234567890"), 1, 9, S("234567890"));
-    test(S("abcde"), 0, 6, S("1234567890"), 1, 10, S("234567890"));
-    test(S("abcde"), 0, 6, S("1234567890"), 5, 0, S(""));
-    test(S("abcde"), 0, 6, S("1234567890"), 5, 1, S("6"));
-    test(S("abcde"), 0, 6, S("1234567890"), 5, 2, S("67"));
-    test(S("abcde"), 0, 6, S("1234567890"), 5, 4, S("6789"));
-    test(S("abcde"), 0, 6, S("1234567890"), 5, 5, S("67890"));
-    test(S("abcde"), 0, 6, S("1234567890"), 5, 6, S("67890"));
-    test(S("abcde"), 0, 6, S("1234567890"), 9, 0, S(""));
-    test(S("abcde"), 0, 6, S("1234567890"), 9, 1, S("0"));
-    test(S("abcde"), 0, 6, S("1234567890"), 9, 2, S("0"));
-    test(S("abcde"), 0, 6, S("1234567890"), 10, 0, S(""));
-    test(S("abcde"), 0, 6, S("1234567890"), 10, 1, S(""));
-    test(S("abcde"), 0, 6, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 0, 0, S(""));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 0, 1, S("1"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 1, 0, S(""));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 1, 1, S("2"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 1, 9, S("234567890"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 10, 0, S(""));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 10, 1, S("1"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 10, 5, S("12345"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 10, 9, S("123456789"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 19, 0, S(""));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 19, 1, S("0"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 19, 2, S("0"));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 20, 0, S(""));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 20, 1, S(""));
-    test(S("abcde"), 0, 6, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, 0, S(""), 0, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S(""), 0, 1, S("abcde"));
-    test(S("abcde"), 1, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, 0, S("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("12345"), 0, 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 0, 2, S("a12bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 0, 4, S("a1234bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 0, 5, S("a12345bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 0, 6, S("a12345bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("12345"), 1, 1, S("a2bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 1, 2, S("a23bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 1, 3, S("a234bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 1, 4, S("a2345bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 1, 5, S("a2345bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("12345"), 2, 1, S("a3bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 2, 2, S("a34bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 2, 3, S("a345bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 2, 4, S("a345bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("12345"), 4, 1, S("a5bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 4, 2, S("a5bcde"));
-    test(S("abcde"), 1, 0, S("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 1, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, 0, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 0, 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 0, 5, S("a12345bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 0, 9, S("a123456789bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 0, 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 0, 11, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 1, 1, S("a2bcde"));
+TEST_CONSTEXPR_CXX20 bool test6() {
+  test(S("abcde"), 0, 6, S("12345"), 0, 6, S("12345"));
+  test(S("abcde"), 0, 6, S("12345"), 1, 0, S(""));
+  test(S("abcde"), 0, 6, S("12345"), 1, 1, S("2"));
+  test(S("abcde"), 0, 6, S("12345"), 1, 2, S("23"));
+  test(S("abcde"), 0, 6, S("12345"), 1, 3, S("234"));
+  test(S("abcde"), 0, 6, S("12345"), 1, 4, S("2345"));
+  test(S("abcde"), 0, 6, S("12345"), 1, 5, S("2345"));
+  test(S("abcde"), 0, 6, S("12345"), 2, 0, S(""));
+  test(S("abcde"), 0, 6, S("12345"), 2, 1, S("3"));
+  test(S("abcde"), 0, 6, S("12345"), 2, 2, S("34"));
+  test(S("abcde"), 0, 6, S("12345"), 2, 3, S("345"));
+  test(S("abcde"), 0, 6, S("12345"), 2, 4, S("345"));
+  test(S("abcde"), 0, 6, S("12345"), 4, 0, S(""));
+  test(S("abcde"), 0, 6, S("12345"), 4, 1, S("5"));
+  test(S("abcde"), 0, 6, S("12345"), 4, 2, S("5"));
+  test(S("abcde"), 0, 6, S("12345"), 5, 0, S(""));
+  test(S("abcde"), 0, 6, S("12345"), 5, 1, S(""));
+  test(S("abcde"), 0, 6, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 0, 6, S("1234567890"), 0, 0, S(""));
+  test(S("abcde"), 0, 6, S("1234567890"), 0, 1, S("1"));
+  test(S("abcde"), 0, 6, S("1234567890"), 0, 5, S("12345"));
+  test(S("abcde"), 0, 6, S("1234567890"), 0, 9, S("123456789"));
+  test(S("abcde"), 0, 6, S("1234567890"), 0, 10, S("1234567890"));
+  test(S("abcde"), 0, 6, S("1234567890"), 0, 11, S("1234567890"));
+  test(S("abcde"), 0, 6, S("1234567890"), 1, 0, S(""));
+  test(S("abcde"), 0, 6, S("1234567890"), 1, 1, S("2"));
+  test(S("abcde"), 0, 6, S("1234567890"), 1, 4, S("2345"));
+  test(S("abcde"), 0, 6, S("1234567890"), 1, 8, S("23456789"));
+  test(S("abcde"), 0, 6, S("1234567890"), 1, 9, S("234567890"));
+  test(S("abcde"), 0, 6, S("1234567890"), 1, 10, S("234567890"));
+  test(S("abcde"), 0, 6, S("1234567890"), 5, 0, S(""));
+  test(S("abcde"), 0, 6, S("1234567890"), 5, 1, S("6"));
+  test(S("abcde"), 0, 6, S("1234567890"), 5, 2, S("67"));
+  test(S("abcde"), 0, 6, S("1234567890"), 5, 4, S("6789"));
+  test(S("abcde"), 0, 6, S("1234567890"), 5, 5, S("67890"));
+  test(S("abcde"), 0, 6, S("1234567890"), 5, 6, S("67890"));
+  test(S("abcde"), 0, 6, S("1234567890"), 9, 0, S(""));
+  test(S("abcde"), 0, 6, S("1234567890"), 9, 1, S("0"));
+  test(S("abcde"), 0, 6, S("1234567890"), 9, 2, S("0"));
+  test(S("abcde"), 0, 6, S("1234567890"), 10, 0, S(""));
+  test(S("abcde"), 0, 6, S("1234567890"), 10, 1, S(""));
+  test(S("abcde"), 0, 6, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 0, 0, S(""));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 0, 1, S("1"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 1, 0, S(""));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 1, 1, S("2"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 1, 9, S("234567890"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 10, 0, S(""));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 10, 1, S("1"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 10, 5, S("12345"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 10, 9, S("123456789"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 19, 0, S(""));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 19, 1, S("0"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 19, 2, S("0"));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 20, 0, S(""));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 20, 1, S(""));
+  test(S("abcde"), 0, 6, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, 0, S(""), 0, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S(""), 0, 1, S("abcde"));
+  test(S("abcde"), 1, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, 0, S("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("12345"), 0, 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 0, 2, S("a12bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 0, 4, S("a1234bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 0, 5, S("a12345bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 0, 6, S("a12345bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("12345"), 1, 1, S("a2bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 1, 2, S("a23bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 1, 3, S("a234bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 1, 4, S("a2345bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 1, 5, S("a2345bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("12345"), 2, 1, S("a3bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 2, 2, S("a34bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 2, 3, S("a345bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 2, 4, S("a345bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("12345"), 4, 1, S("a5bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 4, 2, S("a5bcde"));
+  test(S("abcde"), 1, 0, S("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 1, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, 0, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 0, 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 0, 5, S("a12345bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 0, 9, S("a123456789bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 0, 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 0, 11, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 1, 1, S("a2bcde"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test7()
-{
-    test(S("abcde"), 1, 0, S("1234567890"), 1, 4, S("a2345bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 1, 8, S("a23456789bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 1, 9, S("a234567890bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 1, 10, S("a234567890bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 5, 1, S("a6bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 5, 2, S("a67bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 5, 4, S("a6789bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 5, 5, S("a67890bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 5, 6, S("a67890bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 9, 1, S("a0bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 9, 2, S("a0bcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 1, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 0, 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 0, 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 0, 19, S("a1234567890123456789bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 0, 20, S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 0, 21, S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 1, 1, S("a2bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 1, 9, S("a234567890bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 1, 18, S("a234567890123456789bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 1, 19, S("a2345678901234567890bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 1, 20, S("a2345678901234567890bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 10, 1, S("a1bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 10, 5, S("a12345bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 10, 9, S("a123456789bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 10, 10, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 10, 11, S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 19, 1, S("a0bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 19, 2, S("a0bcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 1, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, 1, S(""), 0, 0, S("acde"));
-    test(S("abcde"), 1, 1, S(""), 0, 1, S("acde"));
-    test(S("abcde"), 1, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, 1, S("12345"), 0, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("12345"), 0, 1, S("a1cde"));
-    test(S("abcde"), 1, 1, S("12345"), 0, 2, S("a12cde"));
-    test(S("abcde"), 1, 1, S("12345"), 0, 4, S("a1234cde"));
-    test(S("abcde"), 1, 1, S("12345"), 0, 5, S("a12345cde"));
-    test(S("abcde"), 1, 1, S("12345"), 0, 6, S("a12345cde"));
-    test(S("abcde"), 1, 1, S("12345"), 1, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("12345"), 1, 1, S("a2cde"));
-    test(S("abcde"), 1, 1, S("12345"), 1, 2, S("a23cde"));
-    test(S("abcde"), 1, 1, S("12345"), 1, 3, S("a234cde"));
-    test(S("abcde"), 1, 1, S("12345"), 1, 4, S("a2345cde"));
-    test(S("abcde"), 1, 1, S("12345"), 1, 5, S("a2345cde"));
-    test(S("abcde"), 1, 1, S("12345"), 2, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("12345"), 2, 1, S("a3cde"));
-    test(S("abcde"), 1, 1, S("12345"), 2, 2, S("a34cde"));
-    test(S("abcde"), 1, 1, S("12345"), 2, 3, S("a345cde"));
-    test(S("abcde"), 1, 1, S("12345"), 2, 4, S("a345cde"));
-    test(S("abcde"), 1, 1, S("12345"), 4, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("12345"), 4, 1, S("a5cde"));
-    test(S("abcde"), 1, 1, S("12345"), 4, 2, S("a5cde"));
-    test(S("abcde"), 1, 1, S("12345"), 5, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("12345"), 5, 1, S("acde"));
-    test(S("abcde"), 1, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, 1, S("1234567890"), 0, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 0, 1, S("a1cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 0, 5, S("a12345cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 0, 9, S("a123456789cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 0, 10, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 0, 11, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 1, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 1, 1, S("a2cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 1, 4, S("a2345cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 1, 8, S("a23456789cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 1, 9, S("a234567890cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 1, 10, S("a234567890cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 5, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 5, 1, S("a6cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 5, 2, S("a67cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 5, 4, S("a6789cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 5, 5, S("a67890cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 5, 6, S("a67890cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 9, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 9, 1, S("a0cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 9, 2, S("a0cde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 10, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 10, 1, S("acde"));
-    test(S("abcde"), 1, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 0, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 0, 1, S("a1cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 0, 10, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 0, 19, S("a1234567890123456789cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 0, 20, S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 0, 21, S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 1, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 1, 1, S("a2cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 1, 9, S("a234567890cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 1, 18, S("a234567890123456789cde"));
+TEST_CONSTEXPR_CXX20 bool test7() {
+  test(S("abcde"), 1, 0, S("1234567890"), 1, 4, S("a2345bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 1, 8, S("a23456789bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 1, 9, S("a234567890bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 1, 10, S("a234567890bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 5, 1, S("a6bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 5, 2, S("a67bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 5, 4, S("a6789bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 5, 5, S("a67890bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 5, 6, S("a67890bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 9, 1, S("a0bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 9, 2, S("a0bcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 1, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 0, 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 0, 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 0, 19, S("a1234567890123456789bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 0, 20, S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 0, 21, S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 1, 1, S("a2bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 1, 9, S("a234567890bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 1, 18, S("a234567890123456789bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 1, 19, S("a2345678901234567890bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 1, 20, S("a2345678901234567890bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 10, 1, S("a1bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 10, 5, S("a12345bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 10, 9, S("a123456789bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 10, 10, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 10, 11, S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 19, 1, S("a0bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 19, 2, S("a0bcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 1, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, 1, S(""), 0, 0, S("acde"));
+  test(S("abcde"), 1, 1, S(""), 0, 1, S("acde"));
+  test(S("abcde"), 1, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, 1, S("12345"), 0, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("12345"), 0, 1, S("a1cde"));
+  test(S("abcde"), 1, 1, S("12345"), 0, 2, S("a12cde"));
+  test(S("abcde"), 1, 1, S("12345"), 0, 4, S("a1234cde"));
+  test(S("abcde"), 1, 1, S("12345"), 0, 5, S("a12345cde"));
+  test(S("abcde"), 1, 1, S("12345"), 0, 6, S("a12345cde"));
+  test(S("abcde"), 1, 1, S("12345"), 1, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("12345"), 1, 1, S("a2cde"));
+  test(S("abcde"), 1, 1, S("12345"), 1, 2, S("a23cde"));
+  test(S("abcde"), 1, 1, S("12345"), 1, 3, S("a234cde"));
+  test(S("abcde"), 1, 1, S("12345"), 1, 4, S("a2345cde"));
+  test(S("abcde"), 1, 1, S("12345"), 1, 5, S("a2345cde"));
+  test(S("abcde"), 1, 1, S("12345"), 2, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("12345"), 2, 1, S("a3cde"));
+  test(S("abcde"), 1, 1, S("12345"), 2, 2, S("a34cde"));
+  test(S("abcde"), 1, 1, S("12345"), 2, 3, S("a345cde"));
+  test(S("abcde"), 1, 1, S("12345"), 2, 4, S("a345cde"));
+  test(S("abcde"), 1, 1, S("12345"), 4, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("12345"), 4, 1, S("a5cde"));
+  test(S("abcde"), 1, 1, S("12345"), 4, 2, S("a5cde"));
+  test(S("abcde"), 1, 1, S("12345"), 5, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("12345"), 5, 1, S("acde"));
+  test(S("abcde"), 1, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, 1, S("1234567890"), 0, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 0, 1, S("a1cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 0, 5, S("a12345cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 0, 9, S("a123456789cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 0, 10, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 0, 11, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 1, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 1, 1, S("a2cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 1, 4, S("a2345cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 1, 8, S("a23456789cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 1, 9, S("a234567890cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 1, 10, S("a234567890cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 5, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 5, 1, S("a6cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 5, 2, S("a67cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 5, 4, S("a6789cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 5, 5, S("a67890cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 5, 6, S("a67890cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 9, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 9, 1, S("a0cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 9, 2, S("a0cde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 10, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 10, 1, S("acde"));
+  test(S("abcde"), 1, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 0, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 0, 1, S("a1cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 0, 10, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 0, 19, S("a1234567890123456789cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 0, 20, S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 0, 21, S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 1, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 1, 1, S("a2cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 1, 9, S("a234567890cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 1, 18, S("a234567890123456789cde"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test8()
-{
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 1, 19, S("a2345678901234567890cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 1, 20, S("a2345678901234567890cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 10, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 10, 1, S("a1cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 10, 5, S("a12345cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 10, 9, S("a123456789cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 10, 10, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 10, 11, S("a1234567890cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 19, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 19, 1, S("a0cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 19, 2, S("a0cde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 20, 0, S("acde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 20, 1, S("acde"));
-    test(S("abcde"), 1, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, 2, S(""), 0, 0, S("ade"));
-    test(S("abcde"), 1, 2, S(""), 0, 1, S("ade"));
-    test(S("abcde"), 1, 2, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, 2, S("12345"), 0, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("12345"), 0, 1, S("a1de"));
-    test(S("abcde"), 1, 2, S("12345"), 0, 2, S("a12de"));
-    test(S("abcde"), 1, 2, S("12345"), 0, 4, S("a1234de"));
-    test(S("abcde"), 1, 2, S("12345"), 0, 5, S("a12345de"));
-    test(S("abcde"), 1, 2, S("12345"), 0, 6, S("a12345de"));
-    test(S("abcde"), 1, 2, S("12345"), 1, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("12345"), 1, 1, S("a2de"));
-    test(S("abcde"), 1, 2, S("12345"), 1, 2, S("a23de"));
-    test(S("abcde"), 1, 2, S("12345"), 1, 3, S("a234de"));
-    test(S("abcde"), 1, 2, S("12345"), 1, 4, S("a2345de"));
-    test(S("abcde"), 1, 2, S("12345"), 1, 5, S("a2345de"));
-    test(S("abcde"), 1, 2, S("12345"), 2, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("12345"), 2, 1, S("a3de"));
-    test(S("abcde"), 1, 2, S("12345"), 2, 2, S("a34de"));
-    test(S("abcde"), 1, 2, S("12345"), 2, 3, S("a345de"));
-    test(S("abcde"), 1, 2, S("12345"), 2, 4, S("a345de"));
-    test(S("abcde"), 1, 2, S("12345"), 4, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("12345"), 4, 1, S("a5de"));
-    test(S("abcde"), 1, 2, S("12345"), 4, 2, S("a5de"));
-    test(S("abcde"), 1, 2, S("12345"), 5, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("12345"), 5, 1, S("ade"));
-    test(S("abcde"), 1, 2, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, 2, S("1234567890"), 0, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("1234567890"), 0, 1, S("a1de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 0, 5, S("a12345de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 0, 9, S("a123456789de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 0, 10, S("a1234567890de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 0, 11, S("a1234567890de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 1, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("1234567890"), 1, 1, S("a2de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 1, 4, S("a2345de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 1, 8, S("a23456789de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 1, 9, S("a234567890de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 1, 10, S("a234567890de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 5, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("1234567890"), 5, 1, S("a6de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 5, 2, S("a67de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 5, 4, S("a6789de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 5, 5, S("a67890de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 5, 6, S("a67890de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 9, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("1234567890"), 9, 1, S("a0de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 9, 2, S("a0de"));
-    test(S("abcde"), 1, 2, S("1234567890"), 10, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("1234567890"), 10, 1, S("ade"));
-    test(S("abcde"), 1, 2, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 0, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 0, 1, S("a1de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 0, 10, S("a1234567890de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 0, 19, S("a1234567890123456789de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 0, 20, S("a12345678901234567890de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 0, 21, S("a12345678901234567890de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 1, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 1, 1, S("a2de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 1, 9, S("a234567890de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 1, 18, S("a234567890123456789de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 1, 19, S("a2345678901234567890de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 1, 20, S("a2345678901234567890de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 10, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 10, 1, S("a1de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 10, 5, S("a12345de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 10, 9, S("a123456789de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 10, 10, S("a1234567890de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 10, 11, S("a1234567890de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 19, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 19, 1, S("a0de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 19, 2, S("a0de"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 20, 0, S("ade"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 20, 1, S("ade"));
-    test(S("abcde"), 1, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, 3, S(""), 0, 0, S("ae"));
-    test(S("abcde"), 1, 3, S(""), 0, 1, S("ae"));
-    test(S("abcde"), 1, 3, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, 3, S("12345"), 0, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("12345"), 0, 1, S("a1e"));
-    test(S("abcde"), 1, 3, S("12345"), 0, 2, S("a12e"));
-    test(S("abcde"), 1, 3, S("12345"), 0, 4, S("a1234e"));
-    test(S("abcde"), 1, 3, S("12345"), 0, 5, S("a12345e"));
-    test(S("abcde"), 1, 3, S("12345"), 0, 6, S("a12345e"));
-    test(S("abcde"), 1, 3, S("12345"), 1, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("12345"), 1, 1, S("a2e"));
-    test(S("abcde"), 1, 3, S("12345"), 1, 2, S("a23e"));
+TEST_CONSTEXPR_CXX20 bool test8() {
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 1, 19, S("a2345678901234567890cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 1, 20, S("a2345678901234567890cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 10, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 10, 1, S("a1cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 10, 5, S("a12345cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 10, 9, S("a123456789cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 10, 10, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 10, 11, S("a1234567890cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 19, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 19, 1, S("a0cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 19, 2, S("a0cde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 20, 0, S("acde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 20, 1, S("acde"));
+  test(S("abcde"), 1, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, 2, S(""), 0, 0, S("ade"));
+  test(S("abcde"), 1, 2, S(""), 0, 1, S("ade"));
+  test(S("abcde"), 1, 2, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, 2, S("12345"), 0, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("12345"), 0, 1, S("a1de"));
+  test(S("abcde"), 1, 2, S("12345"), 0, 2, S("a12de"));
+  test(S("abcde"), 1, 2, S("12345"), 0, 4, S("a1234de"));
+  test(S("abcde"), 1, 2, S("12345"), 0, 5, S("a12345de"));
+  test(S("abcde"), 1, 2, S("12345"), 0, 6, S("a12345de"));
+  test(S("abcde"), 1, 2, S("12345"), 1, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("12345"), 1, 1, S("a2de"));
+  test(S("abcde"), 1, 2, S("12345"), 1, 2, S("a23de"));
+  test(S("abcde"), 1, 2, S("12345"), 1, 3, S("a234de"));
+  test(S("abcde"), 1, 2, S("12345"), 1, 4, S("a2345de"));
+  test(S("abcde"), 1, 2, S("12345"), 1, 5, S("a2345de"));
+  test(S("abcde"), 1, 2, S("12345"), 2, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("12345"), 2, 1, S("a3de"));
+  test(S("abcde"), 1, 2, S("12345"), 2, 2, S("a34de"));
+  test(S("abcde"), 1, 2, S("12345"), 2, 3, S("a345de"));
+  test(S("abcde"), 1, 2, S("12345"), 2, 4, S("a345de"));
+  test(S("abcde"), 1, 2, S("12345"), 4, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("12345"), 4, 1, S("a5de"));
+  test(S("abcde"), 1, 2, S("12345"), 4, 2, S("a5de"));
+  test(S("abcde"), 1, 2, S("12345"), 5, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("12345"), 5, 1, S("ade"));
+  test(S("abcde"), 1, 2, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, 2, S("1234567890"), 0, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("1234567890"), 0, 1, S("a1de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 0, 5, S("a12345de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 0, 9, S("a123456789de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 0, 10, S("a1234567890de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 0, 11, S("a1234567890de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 1, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("1234567890"), 1, 1, S("a2de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 1, 4, S("a2345de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 1, 8, S("a23456789de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 1, 9, S("a234567890de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 1, 10, S("a234567890de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 5, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("1234567890"), 5, 1, S("a6de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 5, 2, S("a67de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 5, 4, S("a6789de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 5, 5, S("a67890de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 5, 6, S("a67890de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 9, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("1234567890"), 9, 1, S("a0de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 9, 2, S("a0de"));
+  test(S("abcde"), 1, 2, S("1234567890"), 10, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("1234567890"), 10, 1, S("ade"));
+  test(S("abcde"), 1, 2, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 0, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 0, 1, S("a1de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 0, 10, S("a1234567890de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 0, 19, S("a1234567890123456789de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 0, 20, S("a12345678901234567890de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 0, 21, S("a12345678901234567890de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 1, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 1, 1, S("a2de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 1, 9, S("a234567890de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 1, 18, S("a234567890123456789de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 1, 19, S("a2345678901234567890de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 1, 20, S("a2345678901234567890de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 10, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 10, 1, S("a1de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 10, 5, S("a12345de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 10, 9, S("a123456789de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 10, 10, S("a1234567890de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 10, 11, S("a1234567890de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 19, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 19, 1, S("a0de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 19, 2, S("a0de"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 20, 0, S("ade"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 20, 1, S("ade"));
+  test(S("abcde"), 1, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, 3, S(""), 0, 0, S("ae"));
+  test(S("abcde"), 1, 3, S(""), 0, 1, S("ae"));
+  test(S("abcde"), 1, 3, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, 3, S("12345"), 0, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("12345"), 0, 1, S("a1e"));
+  test(S("abcde"), 1, 3, S("12345"), 0, 2, S("a12e"));
+  test(S("abcde"), 1, 3, S("12345"), 0, 4, S("a1234e"));
+  test(S("abcde"), 1, 3, S("12345"), 0, 5, S("a12345e"));
+  test(S("abcde"), 1, 3, S("12345"), 0, 6, S("a12345e"));
+  test(S("abcde"), 1, 3, S("12345"), 1, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("12345"), 1, 1, S("a2e"));
+  test(S("abcde"), 1, 3, S("12345"), 1, 2, S("a23e"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test9()
-{
-    test(S("abcde"), 1, 3, S("12345"), 1, 3, S("a234e"));
-    test(S("abcde"), 1, 3, S("12345"), 1, 4, S("a2345e"));
-    test(S("abcde"), 1, 3, S("12345"), 1, 5, S("a2345e"));
-    test(S("abcde"), 1, 3, S("12345"), 2, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("12345"), 2, 1, S("a3e"));
-    test(S("abcde"), 1, 3, S("12345"), 2, 2, S("a34e"));
-    test(S("abcde"), 1, 3, S("12345"), 2, 3, S("a345e"));
-    test(S("abcde"), 1, 3, S("12345"), 2, 4, S("a345e"));
-    test(S("abcde"), 1, 3, S("12345"), 4, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("12345"), 4, 1, S("a5e"));
-    test(S("abcde"), 1, 3, S("12345"), 4, 2, S("a5e"));
-    test(S("abcde"), 1, 3, S("12345"), 5, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("12345"), 5, 1, S("ae"));
-    test(S("abcde"), 1, 3, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, 3, S("1234567890"), 0, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("1234567890"), 0, 1, S("a1e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 0, 5, S("a12345e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 0, 9, S("a123456789e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 0, 10, S("a1234567890e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 0, 11, S("a1234567890e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 1, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("1234567890"), 1, 1, S("a2e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 1, 4, S("a2345e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 1, 8, S("a23456789e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 1, 9, S("a234567890e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 1, 10, S("a234567890e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 5, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("1234567890"), 5, 1, S("a6e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 5, 2, S("a67e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 5, 4, S("a6789e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 5, 5, S("a67890e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 5, 6, S("a67890e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 9, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("1234567890"), 9, 1, S("a0e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 9, 2, S("a0e"));
-    test(S("abcde"), 1, 3, S("1234567890"), 10, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("1234567890"), 10, 1, S("ae"));
-    test(S("abcde"), 1, 3, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 0, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 0, 1, S("a1e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 0, 10, S("a1234567890e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 0, 19, S("a1234567890123456789e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 0, 20, S("a12345678901234567890e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 0, 21, S("a12345678901234567890e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 1, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 1, 1, S("a2e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 1, 9, S("a234567890e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 1, 18, S("a234567890123456789e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 1, 19, S("a2345678901234567890e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 1, 20, S("a2345678901234567890e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 10, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 10, 1, S("a1e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 10, 5, S("a12345e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 10, 9, S("a123456789e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 10, 10, S("a1234567890e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 10, 11, S("a1234567890e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 19, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 19, 1, S("a0e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 19, 2, S("a0e"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 20, 0, S("ae"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 20, 1, S("ae"));
-    test(S("abcde"), 1, 3, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, 4, S(""), 0, 0, S("a"));
-    test(S("abcde"), 1, 4, S(""), 0, 1, S("a"));
-    test(S("abcde"), 1, 4, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, 4, S("12345"), 0, 0, S("a"));
-    test(S("abcde"), 1, 4, S("12345"), 0, 1, S("a1"));
-    test(S("abcde"), 1, 4, S("12345"), 0, 2, S("a12"));
-    test(S("abcde"), 1, 4, S("12345"), 0, 4, S("a1234"));
-    test(S("abcde"), 1, 4, S("12345"), 0, 5, S("a12345"));
-    test(S("abcde"), 1, 4, S("12345"), 0, 6, S("a12345"));
-    test(S("abcde"), 1, 4, S("12345"), 1, 0, S("a"));
-    test(S("abcde"), 1, 4, S("12345"), 1, 1, S("a2"));
-    test(S("abcde"), 1, 4, S("12345"), 1, 2, S("a23"));
-    test(S("abcde"), 1, 4, S("12345"), 1, 3, S("a234"));
-    test(S("abcde"), 1, 4, S("12345"), 1, 4, S("a2345"));
-    test(S("abcde"), 1, 4, S("12345"), 1, 5, S("a2345"));
-    test(S("abcde"), 1, 4, S("12345"), 2, 0, S("a"));
-    test(S("abcde"), 1, 4, S("12345"), 2, 1, S("a3"));
-    test(S("abcde"), 1, 4, S("12345"), 2, 2, S("a34"));
-    test(S("abcde"), 1, 4, S("12345"), 2, 3, S("a345"));
-    test(S("abcde"), 1, 4, S("12345"), 2, 4, S("a345"));
-    test(S("abcde"), 1, 4, S("12345"), 4, 0, S("a"));
-    test(S("abcde"), 1, 4, S("12345"), 4, 1, S("a5"));
-    test(S("abcde"), 1, 4, S("12345"), 4, 2, S("a5"));
-    test(S("abcde"), 1, 4, S("12345"), 5, 0, S("a"));
-    test(S("abcde"), 1, 4, S("12345"), 5, 1, S("a"));
-    test(S("abcde"), 1, 4, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, 4, S("1234567890"), 0, 0, S("a"));
-    test(S("abcde"), 1, 4, S("1234567890"), 0, 1, S("a1"));
-    test(S("abcde"), 1, 4, S("1234567890"), 0, 5, S("a12345"));
-    test(S("abcde"), 1, 4, S("1234567890"), 0, 9, S("a123456789"));
-    test(S("abcde"), 1, 4, S("1234567890"), 0, 10, S("a1234567890"));
-    test(S("abcde"), 1, 4, S("1234567890"), 0, 11, S("a1234567890"));
-    test(S("abcde"), 1, 4, S("1234567890"), 1, 0, S("a"));
-    test(S("abcde"), 1, 4, S("1234567890"), 1, 1, S("a2"));
-    test(S("abcde"), 1, 4, S("1234567890"), 1, 4, S("a2345"));
-    test(S("abcde"), 1, 4, S("1234567890"), 1, 8, S("a23456789"));
-    test(S("abcde"), 1, 4, S("1234567890"), 1, 9, S("a234567890"));
-    test(S("abcde"), 1, 4, S("1234567890"), 1, 10, S("a234567890"));
+TEST_CONSTEXPR_CXX20 bool test9() {
+  test(S("abcde"), 1, 3, S("12345"), 1, 3, S("a234e"));
+  test(S("abcde"), 1, 3, S("12345"), 1, 4, S("a2345e"));
+  test(S("abcde"), 1, 3, S("12345"), 1, 5, S("a2345e"));
+  test(S("abcde"), 1, 3, S("12345"), 2, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("12345"), 2, 1, S("a3e"));
+  test(S("abcde"), 1, 3, S("12345"), 2, 2, S("a34e"));
+  test(S("abcde"), 1, 3, S("12345"), 2, 3, S("a345e"));
+  test(S("abcde"), 1, 3, S("12345"), 2, 4, S("a345e"));
+  test(S("abcde"), 1, 3, S("12345"), 4, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("12345"), 4, 1, S("a5e"));
+  test(S("abcde"), 1, 3, S("12345"), 4, 2, S("a5e"));
+  test(S("abcde"), 1, 3, S("12345"), 5, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("12345"), 5, 1, S("ae"));
+  test(S("abcde"), 1, 3, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, 3, S("1234567890"), 0, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("1234567890"), 0, 1, S("a1e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 0, 5, S("a12345e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 0, 9, S("a123456789e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 0, 10, S("a1234567890e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 0, 11, S("a1234567890e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 1, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("1234567890"), 1, 1, S("a2e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 1, 4, S("a2345e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 1, 8, S("a23456789e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 1, 9, S("a234567890e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 1, 10, S("a234567890e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 5, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("1234567890"), 5, 1, S("a6e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 5, 2, S("a67e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 5, 4, S("a6789e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 5, 5, S("a67890e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 5, 6, S("a67890e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 9, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("1234567890"), 9, 1, S("a0e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 9, 2, S("a0e"));
+  test(S("abcde"), 1, 3, S("1234567890"), 10, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("1234567890"), 10, 1, S("ae"));
+  test(S("abcde"), 1, 3, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 0, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 0, 1, S("a1e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 0, 10, S("a1234567890e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 0, 19, S("a1234567890123456789e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 0, 20, S("a12345678901234567890e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 0, 21, S("a12345678901234567890e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 1, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 1, 1, S("a2e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 1, 9, S("a234567890e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 1, 18, S("a234567890123456789e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 1, 19, S("a2345678901234567890e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 1, 20, S("a2345678901234567890e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 10, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 10, 1, S("a1e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 10, 5, S("a12345e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 10, 9, S("a123456789e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 10, 10, S("a1234567890e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 10, 11, S("a1234567890e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 19, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 19, 1, S("a0e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 19, 2, S("a0e"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 20, 0, S("ae"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 20, 1, S("ae"));
+  test(S("abcde"), 1, 3, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, 4, S(""), 0, 0, S("a"));
+  test(S("abcde"), 1, 4, S(""), 0, 1, S("a"));
+  test(S("abcde"), 1, 4, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, 4, S("12345"), 0, 0, S("a"));
+  test(S("abcde"), 1, 4, S("12345"), 0, 1, S("a1"));
+  test(S("abcde"), 1, 4, S("12345"), 0, 2, S("a12"));
+  test(S("abcde"), 1, 4, S("12345"), 0, 4, S("a1234"));
+  test(S("abcde"), 1, 4, S("12345"), 0, 5, S("a12345"));
+  test(S("abcde"), 1, 4, S("12345"), 0, 6, S("a12345"));
+  test(S("abcde"), 1, 4, S("12345"), 1, 0, S("a"));
+  test(S("abcde"), 1, 4, S("12345"), 1, 1, S("a2"));
+  test(S("abcde"), 1, 4, S("12345"), 1, 2, S("a23"));
+  test(S("abcde"), 1, 4, S("12345"), 1, 3, S("a234"));
+  test(S("abcde"), 1, 4, S("12345"), 1, 4, S("a2345"));
+  test(S("abcde"), 1, 4, S("12345"), 1, 5, S("a2345"));
+  test(S("abcde"), 1, 4, S("12345"), 2, 0, S("a"));
+  test(S("abcde"), 1, 4, S("12345"), 2, 1, S("a3"));
+  test(S("abcde"), 1, 4, S("12345"), 2, 2, S("a34"));
+  test(S("abcde"), 1, 4, S("12345"), 2, 3, S("a345"));
+  test(S("abcde"), 1, 4, S("12345"), 2, 4, S("a345"));
+  test(S("abcde"), 1, 4, S("12345"), 4, 0, S("a"));
+  test(S("abcde"), 1, 4, S("12345"), 4, 1, S("a5"));
+  test(S("abcde"), 1, 4, S("12345"), 4, 2, S("a5"));
+  test(S("abcde"), 1, 4, S("12345"), 5, 0, S("a"));
+  test(S("abcde"), 1, 4, S("12345"), 5, 1, S("a"));
+  test(S("abcde"), 1, 4, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, 4, S("1234567890"), 0, 0, S("a"));
+  test(S("abcde"), 1, 4, S("1234567890"), 0, 1, S("a1"));
+  test(S("abcde"), 1, 4, S("1234567890"), 0, 5, S("a12345"));
+  test(S("abcde"), 1, 4, S("1234567890"), 0, 9, S("a123456789"));
+  test(S("abcde"), 1, 4, S("1234567890"), 0, 10, S("a1234567890"));
+  test(S("abcde"), 1, 4, S("1234567890"), 0, 11, S("a1234567890"));
+  test(S("abcde"), 1, 4, S("1234567890"), 1, 0, S("a"));
+  test(S("abcde"), 1, 4, S("1234567890"), 1, 1, S("a2"));
+  test(S("abcde"), 1, 4, S("1234567890"), 1, 4, S("a2345"));
+  test(S("abcde"), 1, 4, S("1234567890"), 1, 8, S("a23456789"));
+  test(S("abcde"), 1, 4, S("1234567890"), 1, 9, S("a234567890"));
+  test(S("abcde"), 1, 4, S("1234567890"), 1, 10, S("a234567890"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test10()
-{
-    test(S("abcde"), 1, 4, S("1234567890"), 5, 0, S("a"));
-    test(S("abcde"), 1, 4, S("1234567890"), 5, 1, S("a6"));
-    test(S("abcde"), 1, 4, S("1234567890"), 5, 2, S("a67"));
-    test(S("abcde"), 1, 4, S("1234567890"), 5, 4, S("a6789"));
-    test(S("abcde"), 1, 4, S("1234567890"), 5, 5, S("a67890"));
-    test(S("abcde"), 1, 4, S("1234567890"), 5, 6, S("a67890"));
-    test(S("abcde"), 1, 4, S("1234567890"), 9, 0, S("a"));
-    test(S("abcde"), 1, 4, S("1234567890"), 9, 1, S("a0"));
-    test(S("abcde"), 1, 4, S("1234567890"), 9, 2, S("a0"));
-    test(S("abcde"), 1, 4, S("1234567890"), 10, 0, S("a"));
-    test(S("abcde"), 1, 4, S("1234567890"), 10, 1, S("a"));
-    test(S("abcde"), 1, 4, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 0, 0, S("a"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 0, 1, S("a1"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 0, 10, S("a1234567890"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 0, 19, S("a1234567890123456789"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 0, 20, S("a12345678901234567890"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 0, 21, S("a12345678901234567890"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 1, 0, S("a"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 1, 1, S("a2"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 1, 9, S("a234567890"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 1, 18, S("a234567890123456789"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 1, 19, S("a2345678901234567890"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 1, 20, S("a2345678901234567890"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 10, 0, S("a"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 10, 1, S("a1"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 10, 5, S("a12345"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 10, 9, S("a123456789"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 10, 10, S("a1234567890"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 10, 11, S("a1234567890"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 19, 0, S("a"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 19, 1, S("a0"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 19, 2, S("a0"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 20, 0, S("a"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 20, 1, S("a"));
-    test(S("abcde"), 1, 4, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 1, 5, S(""), 0, 0, S("a"));
-    test(S("abcde"), 1, 5, S(""), 0, 1, S("a"));
-    test(S("abcde"), 1, 5, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 1, 5, S("12345"), 0, 0, S("a"));
-    test(S("abcde"), 1, 5, S("12345"), 0, 1, S("a1"));
-    test(S("abcde"), 1, 5, S("12345"), 0, 2, S("a12"));
-    test(S("abcde"), 1, 5, S("12345"), 0, 4, S("a1234"));
-    test(S("abcde"), 1, 5, S("12345"), 0, 5, S("a12345"));
-    test(S("abcde"), 1, 5, S("12345"), 0, 6, S("a12345"));
-    test(S("abcde"), 1, 5, S("12345"), 1, 0, S("a"));
-    test(S("abcde"), 1, 5, S("12345"), 1, 1, S("a2"));
-    test(S("abcde"), 1, 5, S("12345"), 1, 2, S("a23"));
-    test(S("abcde"), 1, 5, S("12345"), 1, 3, S("a234"));
-    test(S("abcde"), 1, 5, S("12345"), 1, 4, S("a2345"));
-    test(S("abcde"), 1, 5, S("12345"), 1, 5, S("a2345"));
-    test(S("abcde"), 1, 5, S("12345"), 2, 0, S("a"));
-    test(S("abcde"), 1, 5, S("12345"), 2, 1, S("a3"));
-    test(S("abcde"), 1, 5, S("12345"), 2, 2, S("a34"));
-    test(S("abcde"), 1, 5, S("12345"), 2, 3, S("a345"));
-    test(S("abcde"), 1, 5, S("12345"), 2, 4, S("a345"));
-    test(S("abcde"), 1, 5, S("12345"), 4, 0, S("a"));
-    test(S("abcde"), 1, 5, S("12345"), 4, 1, S("a5"));
-    test(S("abcde"), 1, 5, S("12345"), 4, 2, S("a5"));
-    test(S("abcde"), 1, 5, S("12345"), 5, 0, S("a"));
-    test(S("abcde"), 1, 5, S("12345"), 5, 1, S("a"));
-    test(S("abcde"), 1, 5, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 1, 5, S("1234567890"), 0, 0, S("a"));
-    test(S("abcde"), 1, 5, S("1234567890"), 0, 1, S("a1"));
-    test(S("abcde"), 1, 5, S("1234567890"), 0, 5, S("a12345"));
-    test(S("abcde"), 1, 5, S("1234567890"), 0, 9, S("a123456789"));
-    test(S("abcde"), 1, 5, S("1234567890"), 0, 10, S("a1234567890"));
-    test(S("abcde"), 1, 5, S("1234567890"), 0, 11, S("a1234567890"));
-    test(S("abcde"), 1, 5, S("1234567890"), 1, 0, S("a"));
-    test(S("abcde"), 1, 5, S("1234567890"), 1, 1, S("a2"));
-    test(S("abcde"), 1, 5, S("1234567890"), 1, 4, S("a2345"));
-    test(S("abcde"), 1, 5, S("1234567890"), 1, 8, S("a23456789"));
-    test(S("abcde"), 1, 5, S("1234567890"), 1, 9, S("a234567890"));
-    test(S("abcde"), 1, 5, S("1234567890"), 1, 10, S("a234567890"));
-    test(S("abcde"), 1, 5, S("1234567890"), 5, 0, S("a"));
-    test(S("abcde"), 1, 5, S("1234567890"), 5, 1, S("a6"));
-    test(S("abcde"), 1, 5, S("1234567890"), 5, 2, S("a67"));
-    test(S("abcde"), 1, 5, S("1234567890"), 5, 4, S("a6789"));
-    test(S("abcde"), 1, 5, S("1234567890"), 5, 5, S("a67890"));
-    test(S("abcde"), 1, 5, S("1234567890"), 5, 6, S("a67890"));
-    test(S("abcde"), 1, 5, S("1234567890"), 9, 0, S("a"));
-    test(S("abcde"), 1, 5, S("1234567890"), 9, 1, S("a0"));
-    test(S("abcde"), 1, 5, S("1234567890"), 9, 2, S("a0"));
-    test(S("abcde"), 1, 5, S("1234567890"), 10, 0, S("a"));
-    test(S("abcde"), 1, 5, S("1234567890"), 10, 1, S("a"));
-    test(S("abcde"), 1, 5, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 0, 0, S("a"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 0, 1, S("a1"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 0, 10, S("a1234567890"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 0, 19, S("a1234567890123456789"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 0, 20, S("a12345678901234567890"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 0, 21, S("a12345678901234567890"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 1, 0, S("a"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 1, 1, S("a2"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 1, 9, S("a234567890"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 1, 18, S("a234567890123456789"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 1, 19, S("a2345678901234567890"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 1, 20, S("a2345678901234567890"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 10, 0, S("a"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 10, 1, S("a1"));
+TEST_CONSTEXPR_CXX20 bool test10() {
+  test(S("abcde"), 1, 4, S("1234567890"), 5, 0, S("a"));
+  test(S("abcde"), 1, 4, S("1234567890"), 5, 1, S("a6"));
+  test(S("abcde"), 1, 4, S("1234567890"), 5, 2, S("a67"));
+  test(S("abcde"), 1, 4, S("1234567890"), 5, 4, S("a6789"));
+  test(S("abcde"), 1, 4, S("1234567890"), 5, 5, S("a67890"));
+  test(S("abcde"), 1, 4, S("1234567890"), 5, 6, S("a67890"));
+  test(S("abcde"), 1, 4, S("1234567890"), 9, 0, S("a"));
+  test(S("abcde"), 1, 4, S("1234567890"), 9, 1, S("a0"));
+  test(S("abcde"), 1, 4, S("1234567890"), 9, 2, S("a0"));
+  test(S("abcde"), 1, 4, S("1234567890"), 10, 0, S("a"));
+  test(S("abcde"), 1, 4, S("1234567890"), 10, 1, S("a"));
+  test(S("abcde"), 1, 4, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 0, 0, S("a"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 0, 1, S("a1"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 0, 10, S("a1234567890"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 0, 19, S("a1234567890123456789"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 0, 20, S("a12345678901234567890"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 0, 21, S("a12345678901234567890"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 1, 0, S("a"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 1, 1, S("a2"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 1, 9, S("a234567890"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 1, 18, S("a234567890123456789"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 1, 19, S("a2345678901234567890"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 1, 20, S("a2345678901234567890"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 10, 0, S("a"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 10, 1, S("a1"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 10, 5, S("a12345"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 10, 9, S("a123456789"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 10, 10, S("a1234567890"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 10, 11, S("a1234567890"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 19, 0, S("a"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 19, 1, S("a0"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 19, 2, S("a0"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 20, 0, S("a"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 20, 1, S("a"));
+  test(S("abcde"), 1, 4, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 1, 5, S(""), 0, 0, S("a"));
+  test(S("abcde"), 1, 5, S(""), 0, 1, S("a"));
+  test(S("abcde"), 1, 5, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 1, 5, S("12345"), 0, 0, S("a"));
+  test(S("abcde"), 1, 5, S("12345"), 0, 1, S("a1"));
+  test(S("abcde"), 1, 5, S("12345"), 0, 2, S("a12"));
+  test(S("abcde"), 1, 5, S("12345"), 0, 4, S("a1234"));
+  test(S("abcde"), 1, 5, S("12345"), 0, 5, S("a12345"));
+  test(S("abcde"), 1, 5, S("12345"), 0, 6, S("a12345"));
+  test(S("abcde"), 1, 5, S("12345"), 1, 0, S("a"));
+  test(S("abcde"), 1, 5, S("12345"), 1, 1, S("a2"));
+  test(S("abcde"), 1, 5, S("12345"), 1, 2, S("a23"));
+  test(S("abcde"), 1, 5, S("12345"), 1, 3, S("a234"));
+  test(S("abcde"), 1, 5, S("12345"), 1, 4, S("a2345"));
+  test(S("abcde"), 1, 5, S("12345"), 1, 5, S("a2345"));
+  test(S("abcde"), 1, 5, S("12345"), 2, 0, S("a"));
+  test(S("abcde"), 1, 5, S("12345"), 2, 1, S("a3"));
+  test(S("abcde"), 1, 5, S("12345"), 2, 2, S("a34"));
+  test(S("abcde"), 1, 5, S("12345"), 2, 3, S("a345"));
+  test(S("abcde"), 1, 5, S("12345"), 2, 4, S("a345"));
+  test(S("abcde"), 1, 5, S("12345"), 4, 0, S("a"));
+  test(S("abcde"), 1, 5, S("12345"), 4, 1, S("a5"));
+  test(S("abcde"), 1, 5, S("12345"), 4, 2, S("a5"));
+  test(S("abcde"), 1, 5, S("12345"), 5, 0, S("a"));
+  test(S("abcde"), 1, 5, S("12345"), 5, 1, S("a"));
+  test(S("abcde"), 1, 5, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 1, 5, S("1234567890"), 0, 0, S("a"));
+  test(S("abcde"), 1, 5, S("1234567890"), 0, 1, S("a1"));
+  test(S("abcde"), 1, 5, S("1234567890"), 0, 5, S("a12345"));
+  test(S("abcde"), 1, 5, S("1234567890"), 0, 9, S("a123456789"));
+  test(S("abcde"), 1, 5, S("1234567890"), 0, 10, S("a1234567890"));
+  test(S("abcde"), 1, 5, S("1234567890"), 0, 11, S("a1234567890"));
+  test(S("abcde"), 1, 5, S("1234567890"), 1, 0, S("a"));
+  test(S("abcde"), 1, 5, S("1234567890"), 1, 1, S("a2"));
+  test(S("abcde"), 1, 5, S("1234567890"), 1, 4, S("a2345"));
+  test(S("abcde"), 1, 5, S("1234567890"), 1, 8, S("a23456789"));
+  test(S("abcde"), 1, 5, S("1234567890"), 1, 9, S("a234567890"));
+  test(S("abcde"), 1, 5, S("1234567890"), 1, 10, S("a234567890"));
+  test(S("abcde"), 1, 5, S("1234567890"), 5, 0, S("a"));
+  test(S("abcde"), 1, 5, S("1234567890"), 5, 1, S("a6"));
+  test(S("abcde"), 1, 5, S("1234567890"), 5, 2, S("a67"));
+  test(S("abcde"), 1, 5, S("1234567890"), 5, 4, S("a6789"));
+  test(S("abcde"), 1, 5, S("1234567890"), 5, 5, S("a67890"));
+  test(S("abcde"), 1, 5, S("1234567890"), 5, 6, S("a67890"));
+  test(S("abcde"), 1, 5, S("1234567890"), 9, 0, S("a"));
+  test(S("abcde"), 1, 5, S("1234567890"), 9, 1, S("a0"));
+  test(S("abcde"), 1, 5, S("1234567890"), 9, 2, S("a0"));
+  test(S("abcde"), 1, 5, S("1234567890"), 10, 0, S("a"));
+  test(S("abcde"), 1, 5, S("1234567890"), 10, 1, S("a"));
+  test(S("abcde"), 1, 5, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 0, 0, S("a"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 0, 1, S("a1"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 0, 10, S("a1234567890"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 0, 19, S("a1234567890123456789"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 0, 20, S("a12345678901234567890"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 0, 21, S("a12345678901234567890"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 1, 0, S("a"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 1, 1, S("a2"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 1, 9, S("a234567890"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 1, 18, S("a234567890123456789"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 1, 19, S("a2345678901234567890"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 1, 20, S("a2345678901234567890"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 10, 0, S("a"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 10, 1, S("a1"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test11()
-{
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 10, 5, S("a12345"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 10, 9, S("a123456789"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 10, 10, S("a1234567890"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 10, 11, S("a1234567890"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 19, 0, S("a"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 19, 1, S("a0"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 19, 2, S("a0"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 20, 0, S("a"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 20, 1, S("a"));
-    test(S("abcde"), 1, 5, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 2, 0, S(""), 0, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S(""), 0, 1, S("abcde"));
-    test(S("abcde"), 2, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 2, 0, S("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("12345"), 0, 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, S("12345"), 0, 2, S("ab12cde"));
-    test(S("abcde"), 2, 0, S("12345"), 0, 4, S("ab1234cde"));
-    test(S("abcde"), 2, 0, S("12345"), 0, 5, S("ab12345cde"));
-    test(S("abcde"), 2, 0, S("12345"), 0, 6, S("ab12345cde"));
-    test(S("abcde"), 2, 0, S("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("12345"), 1, 1, S("ab2cde"));
-    test(S("abcde"), 2, 0, S("12345"), 1, 2, S("ab23cde"));
-    test(S("abcde"), 2, 0, S("12345"), 1, 3, S("ab234cde"));
-    test(S("abcde"), 2, 0, S("12345"), 1, 4, S("ab2345cde"));
-    test(S("abcde"), 2, 0, S("12345"), 1, 5, S("ab2345cde"));
-    test(S("abcde"), 2, 0, S("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("12345"), 2, 1, S("ab3cde"));
-    test(S("abcde"), 2, 0, S("12345"), 2, 2, S("ab34cde"));
-    test(S("abcde"), 2, 0, S("12345"), 2, 3, S("ab345cde"));
-    test(S("abcde"), 2, 0, S("12345"), 2, 4, S("ab345cde"));
-    test(S("abcde"), 2, 0, S("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("12345"), 4, 1, S("ab5cde"));
-    test(S("abcde"), 2, 0, S("12345"), 4, 2, S("ab5cde"));
-    test(S("abcde"), 2, 0, S("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 2, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 2, 0, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 0, 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 0, 5, S("ab12345cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 0, 9, S("ab123456789cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 0, 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 0, 11, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 1, 1, S("ab2cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 1, 4, S("ab2345cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 1, 8, S("ab23456789cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 1, 9, S("ab234567890cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 1, 10, S("ab234567890cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 5, 1, S("ab6cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 5, 2, S("ab67cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 5, 4, S("ab6789cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 5, 5, S("ab67890cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 5, 6, S("ab67890cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 9, 1, S("ab0cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 9, 2, S("ab0cde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 2, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 0, 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 0, 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 0, 19, S("ab1234567890123456789cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 0, 20, S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 0, 21, S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 1, 1, S("ab2cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 1, 9, S("ab234567890cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 1, 18, S("ab234567890123456789cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 1, 19, S("ab2345678901234567890cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 1, 20, S("ab2345678901234567890cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 10, 1, S("ab1cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 10, 5, S("ab12345cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 10, 9, S("ab123456789cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 10, 10, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 10, 11, S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 19, 1, S("ab0cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 19, 2, S("ab0cde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 2, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 2, 1, S(""), 0, 0, S("abde"));
-    test(S("abcde"), 2, 1, S(""), 0, 1, S("abde"));
-    test(S("abcde"), 2, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 2, 1, S("12345"), 0, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("12345"), 0, 1, S("ab1de"));
-    test(S("abcde"), 2, 1, S("12345"), 0, 2, S("ab12de"));
-    test(S("abcde"), 2, 1, S("12345"), 0, 4, S("ab1234de"));
-    test(S("abcde"), 2, 1, S("12345"), 0, 5, S("ab12345de"));
-    test(S("abcde"), 2, 1, S("12345"), 0, 6, S("ab12345de"));
-    test(S("abcde"), 2, 1, S("12345"), 1, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("12345"), 1, 1, S("ab2de"));
-    test(S("abcde"), 2, 1, S("12345"), 1, 2, S("ab23de"));
-    test(S("abcde"), 2, 1, S("12345"), 1, 3, S("ab234de"));
-    test(S("abcde"), 2, 1, S("12345"), 1, 4, S("ab2345de"));
-    test(S("abcde"), 2, 1, S("12345"), 1, 5, S("ab2345de"));
-    test(S("abcde"), 2, 1, S("12345"), 2, 0, S("abde"));
+TEST_CONSTEXPR_CXX20 bool test11() {
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 10, 5, S("a12345"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 10, 9, S("a123456789"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 10, 10, S("a1234567890"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 10, 11, S("a1234567890"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 19, 0, S("a"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 19, 1, S("a0"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 19, 2, S("a0"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 20, 0, S("a"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 20, 1, S("a"));
+  test(S("abcde"), 1, 5, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 2, 0, S(""), 0, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S(""), 0, 1, S("abcde"));
+  test(S("abcde"), 2, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 2, 0, S("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("12345"), 0, 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, S("12345"), 0, 2, S("ab12cde"));
+  test(S("abcde"), 2, 0, S("12345"), 0, 4, S("ab1234cde"));
+  test(S("abcde"), 2, 0, S("12345"), 0, 5, S("ab12345cde"));
+  test(S("abcde"), 2, 0, S("12345"), 0, 6, S("ab12345cde"));
+  test(S("abcde"), 2, 0, S("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("12345"), 1, 1, S("ab2cde"));
+  test(S("abcde"), 2, 0, S("12345"), 1, 2, S("ab23cde"));
+  test(S("abcde"), 2, 0, S("12345"), 1, 3, S("ab234cde"));
+  test(S("abcde"), 2, 0, S("12345"), 1, 4, S("ab2345cde"));
+  test(S("abcde"), 2, 0, S("12345"), 1, 5, S("ab2345cde"));
+  test(S("abcde"), 2, 0, S("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("12345"), 2, 1, S("ab3cde"));
+  test(S("abcde"), 2, 0, S("12345"), 2, 2, S("ab34cde"));
+  test(S("abcde"), 2, 0, S("12345"), 2, 3, S("ab345cde"));
+  test(S("abcde"), 2, 0, S("12345"), 2, 4, S("ab345cde"));
+  test(S("abcde"), 2, 0, S("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("12345"), 4, 1, S("ab5cde"));
+  test(S("abcde"), 2, 0, S("12345"), 4, 2, S("ab5cde"));
+  test(S("abcde"), 2, 0, S("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 2, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 2, 0, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 0, 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 0, 5, S("ab12345cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 0, 9, S("ab123456789cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 0, 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 0, 11, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 1, 1, S("ab2cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 1, 4, S("ab2345cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 1, 8, S("ab23456789cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 1, 9, S("ab234567890cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 1, 10, S("ab234567890cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 5, 1, S("ab6cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 5, 2, S("ab67cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 5, 4, S("ab6789cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 5, 5, S("ab67890cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 5, 6, S("ab67890cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 9, 1, S("ab0cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 9, 2, S("ab0cde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 2, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 0, 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 0, 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 0, 19, S("ab1234567890123456789cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 0, 20, S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 0, 21, S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 1, 1, S("ab2cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 1, 9, S("ab234567890cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 1, 18, S("ab234567890123456789cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 1, 19, S("ab2345678901234567890cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 1, 20, S("ab2345678901234567890cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 10, 1, S("ab1cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 10, 5, S("ab12345cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 10, 9, S("ab123456789cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 10, 10, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 10, 11, S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 19, 1, S("ab0cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 19, 2, S("ab0cde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 2, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 2, 1, S(""), 0, 0, S("abde"));
+  test(S("abcde"), 2, 1, S(""), 0, 1, S("abde"));
+  test(S("abcde"), 2, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 2, 1, S("12345"), 0, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("12345"), 0, 1, S("ab1de"));
+  test(S("abcde"), 2, 1, S("12345"), 0, 2, S("ab12de"));
+  test(S("abcde"), 2, 1, S("12345"), 0, 4, S("ab1234de"));
+  test(S("abcde"), 2, 1, S("12345"), 0, 5, S("ab12345de"));
+  test(S("abcde"), 2, 1, S("12345"), 0, 6, S("ab12345de"));
+  test(S("abcde"), 2, 1, S("12345"), 1, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("12345"), 1, 1, S("ab2de"));
+  test(S("abcde"), 2, 1, S("12345"), 1, 2, S("ab23de"));
+  test(S("abcde"), 2, 1, S("12345"), 1, 3, S("ab234de"));
+  test(S("abcde"), 2, 1, S("12345"), 1, 4, S("ab2345de"));
+  test(S("abcde"), 2, 1, S("12345"), 1, 5, S("ab2345de"));
+  test(S("abcde"), 2, 1, S("12345"), 2, 0, S("abde"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test12()
-{
-    test(S("abcde"), 2, 1, S("12345"), 2, 1, S("ab3de"));
-    test(S("abcde"), 2, 1, S("12345"), 2, 2, S("ab34de"));
-    test(S("abcde"), 2, 1, S("12345"), 2, 3, S("ab345de"));
-    test(S("abcde"), 2, 1, S("12345"), 2, 4, S("ab345de"));
-    test(S("abcde"), 2, 1, S("12345"), 4, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("12345"), 4, 1, S("ab5de"));
-    test(S("abcde"), 2, 1, S("12345"), 4, 2, S("ab5de"));
-    test(S("abcde"), 2, 1, S("12345"), 5, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("12345"), 5, 1, S("abde"));
-    test(S("abcde"), 2, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 2, 1, S("1234567890"), 0, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("1234567890"), 0, 1, S("ab1de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 0, 5, S("ab12345de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 0, 9, S("ab123456789de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 0, 10, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 0, 11, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 1, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("1234567890"), 1, 1, S("ab2de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 1, 4, S("ab2345de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 1, 8, S("ab23456789de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 1, 9, S("ab234567890de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 1, 10, S("ab234567890de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 5, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("1234567890"), 5, 1, S("ab6de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 5, 2, S("ab67de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 5, 4, S("ab6789de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 5, 5, S("ab67890de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 5, 6, S("ab67890de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 9, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("1234567890"), 9, 1, S("ab0de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 9, 2, S("ab0de"));
-    test(S("abcde"), 2, 1, S("1234567890"), 10, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("1234567890"), 10, 1, S("abde"));
-    test(S("abcde"), 2, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 0, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 0, 1, S("ab1de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 0, 10, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 0, 19, S("ab1234567890123456789de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 0, 20, S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 0, 21, S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 1, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 1, 1, S("ab2de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 1, 9, S("ab234567890de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 1, 18, S("ab234567890123456789de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 1, 19, S("ab2345678901234567890de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 1, 20, S("ab2345678901234567890de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 10, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 10, 1, S("ab1de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 10, 5, S("ab12345de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 10, 9, S("ab123456789de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 10, 10, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 10, 11, S("ab1234567890de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 19, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 19, 1, S("ab0de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 19, 2, S("ab0de"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 20, 0, S("abde"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 20, 1, S("abde"));
-    test(S("abcde"), 2, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 2, 2, S(""), 0, 0, S("abe"));
-    test(S("abcde"), 2, 2, S(""), 0, 1, S("abe"));
-    test(S("abcde"), 2, 2, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 2, 2, S("12345"), 0, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("12345"), 0, 1, S("ab1e"));
-    test(S("abcde"), 2, 2, S("12345"), 0, 2, S("ab12e"));
-    test(S("abcde"), 2, 2, S("12345"), 0, 4, S("ab1234e"));
-    test(S("abcde"), 2, 2, S("12345"), 0, 5, S("ab12345e"));
-    test(S("abcde"), 2, 2, S("12345"), 0, 6, S("ab12345e"));
-    test(S("abcde"), 2, 2, S("12345"), 1, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("12345"), 1, 1, S("ab2e"));
-    test(S("abcde"), 2, 2, S("12345"), 1, 2, S("ab23e"));
-    test(S("abcde"), 2, 2, S("12345"), 1, 3, S("ab234e"));
-    test(S("abcde"), 2, 2, S("12345"), 1, 4, S("ab2345e"));
-    test(S("abcde"), 2, 2, S("12345"), 1, 5, S("ab2345e"));
-    test(S("abcde"), 2, 2, S("12345"), 2, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("12345"), 2, 1, S("ab3e"));
-    test(S("abcde"), 2, 2, S("12345"), 2, 2, S("ab34e"));
-    test(S("abcde"), 2, 2, S("12345"), 2, 3, S("ab345e"));
-    test(S("abcde"), 2, 2, S("12345"), 2, 4, S("ab345e"));
-    test(S("abcde"), 2, 2, S("12345"), 4, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("12345"), 4, 1, S("ab5e"));
-    test(S("abcde"), 2, 2, S("12345"), 4, 2, S("ab5e"));
-    test(S("abcde"), 2, 2, S("12345"), 5, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("12345"), 5, 1, S("abe"));
-    test(S("abcde"), 2, 2, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 2, 2, S("1234567890"), 0, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("1234567890"), 0, 1, S("ab1e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 0, 5, S("ab12345e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 0, 9, S("ab123456789e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 0, 10, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 0, 11, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 1, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("1234567890"), 1, 1, S("ab2e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 1, 4, S("ab2345e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 1, 8, S("ab23456789e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 1, 9, S("ab234567890e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 1, 10, S("ab234567890e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 5, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("1234567890"), 5, 1, S("ab6e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 5, 2, S("ab67e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 5, 4, S("ab6789e"));
+TEST_CONSTEXPR_CXX20 bool test12() {
+  test(S("abcde"), 2, 1, S("12345"), 2, 1, S("ab3de"));
+  test(S("abcde"), 2, 1, S("12345"), 2, 2, S("ab34de"));
+  test(S("abcde"), 2, 1, S("12345"), 2, 3, S("ab345de"));
+  test(S("abcde"), 2, 1, S("12345"), 2, 4, S("ab345de"));
+  test(S("abcde"), 2, 1, S("12345"), 4, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("12345"), 4, 1, S("ab5de"));
+  test(S("abcde"), 2, 1, S("12345"), 4, 2, S("ab5de"));
+  test(S("abcde"), 2, 1, S("12345"), 5, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("12345"), 5, 1, S("abde"));
+  test(S("abcde"), 2, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 2, 1, S("1234567890"), 0, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("1234567890"), 0, 1, S("ab1de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 0, 5, S("ab12345de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 0, 9, S("ab123456789de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 0, 10, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 0, 11, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 1, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("1234567890"), 1, 1, S("ab2de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 1, 4, S("ab2345de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 1, 8, S("ab23456789de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 1, 9, S("ab234567890de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 1, 10, S("ab234567890de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 5, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("1234567890"), 5, 1, S("ab6de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 5, 2, S("ab67de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 5, 4, S("ab6789de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 5, 5, S("ab67890de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 5, 6, S("ab67890de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 9, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("1234567890"), 9, 1, S("ab0de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 9, 2, S("ab0de"));
+  test(S("abcde"), 2, 1, S("1234567890"), 10, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("1234567890"), 10, 1, S("abde"));
+  test(S("abcde"), 2, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 0, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 0, 1, S("ab1de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 0, 10, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 0, 19, S("ab1234567890123456789de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 0, 20, S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 0, 21, S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 1, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 1, 1, S("ab2de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 1, 9, S("ab234567890de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 1, 18, S("ab234567890123456789de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 1, 19, S("ab2345678901234567890de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 1, 20, S("ab2345678901234567890de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 10, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 10, 1, S("ab1de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 10, 5, S("ab12345de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 10, 9, S("ab123456789de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 10, 10, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 10, 11, S("ab1234567890de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 19, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 19, 1, S("ab0de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 19, 2, S("ab0de"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 20, 0, S("abde"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 20, 1, S("abde"));
+  test(S("abcde"), 2, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 2, 2, S(""), 0, 0, S("abe"));
+  test(S("abcde"), 2, 2, S(""), 0, 1, S("abe"));
+  test(S("abcde"), 2, 2, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 2, 2, S("12345"), 0, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("12345"), 0, 1, S("ab1e"));
+  test(S("abcde"), 2, 2, S("12345"), 0, 2, S("ab12e"));
+  test(S("abcde"), 2, 2, S("12345"), 0, 4, S("ab1234e"));
+  test(S("abcde"), 2, 2, S("12345"), 0, 5, S("ab12345e"));
+  test(S("abcde"), 2, 2, S("12345"), 0, 6, S("ab12345e"));
+  test(S("abcde"), 2, 2, S("12345"), 1, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("12345"), 1, 1, S("ab2e"));
+  test(S("abcde"), 2, 2, S("12345"), 1, 2, S("ab23e"));
+  test(S("abcde"), 2, 2, S("12345"), 1, 3, S("ab234e"));
+  test(S("abcde"), 2, 2, S("12345"), 1, 4, S("ab2345e"));
+  test(S("abcde"), 2, 2, S("12345"), 1, 5, S("ab2345e"));
+  test(S("abcde"), 2, 2, S("12345"), 2, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("12345"), 2, 1, S("ab3e"));
+  test(S("abcde"), 2, 2, S("12345"), 2, 2, S("ab34e"));
+  test(S("abcde"), 2, 2, S("12345"), 2, 3, S("ab345e"));
+  test(S("abcde"), 2, 2, S("12345"), 2, 4, S("ab345e"));
+  test(S("abcde"), 2, 2, S("12345"), 4, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("12345"), 4, 1, S("ab5e"));
+  test(S("abcde"), 2, 2, S("12345"), 4, 2, S("ab5e"));
+  test(S("abcde"), 2, 2, S("12345"), 5, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("12345"), 5, 1, S("abe"));
+  test(S("abcde"), 2, 2, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 2, 2, S("1234567890"), 0, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("1234567890"), 0, 1, S("ab1e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 0, 5, S("ab12345e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 0, 9, S("ab123456789e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 0, 10, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 0, 11, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 1, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("1234567890"), 1, 1, S("ab2e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 1, 4, S("ab2345e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 1, 8, S("ab23456789e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 1, 9, S("ab234567890e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 1, 10, S("ab234567890e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 5, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("1234567890"), 5, 1, S("ab6e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 5, 2, S("ab67e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 5, 4, S("ab6789e"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test13()
-{
-    test(S("abcde"), 2, 2, S("1234567890"), 5, 5, S("ab67890e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 5, 6, S("ab67890e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 9, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("1234567890"), 9, 1, S("ab0e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 9, 2, S("ab0e"));
-    test(S("abcde"), 2, 2, S("1234567890"), 10, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("1234567890"), 10, 1, S("abe"));
-    test(S("abcde"), 2, 2, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 0, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 0, 1, S("ab1e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 0, 10, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 0, 19, S("ab1234567890123456789e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 0, 20, S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 0, 21, S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 1, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 1, 1, S("ab2e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 1, 9, S("ab234567890e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 1, 18, S("ab234567890123456789e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 1, 19, S("ab2345678901234567890e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 1, 20, S("ab2345678901234567890e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 10, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 10, 1, S("ab1e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 10, 5, S("ab12345e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 10, 9, S("ab123456789e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 10, 10, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 10, 11, S("ab1234567890e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 19, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 19, 1, S("ab0e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 19, 2, S("ab0e"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 20, 0, S("abe"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 20, 1, S("abe"));
-    test(S("abcde"), 2, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 2, 3, S(""), 0, 0, S("ab"));
-    test(S("abcde"), 2, 3, S(""), 0, 1, S("ab"));
-    test(S("abcde"), 2, 3, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 2, 3, S("12345"), 0, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("12345"), 0, 1, S("ab1"));
-    test(S("abcde"), 2, 3, S("12345"), 0, 2, S("ab12"));
-    test(S("abcde"), 2, 3, S("12345"), 0, 4, S("ab1234"));
-    test(S("abcde"), 2, 3, S("12345"), 0, 5, S("ab12345"));
-    test(S("abcde"), 2, 3, S("12345"), 0, 6, S("ab12345"));
-    test(S("abcde"), 2, 3, S("12345"), 1, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("12345"), 1, 1, S("ab2"));
-    test(S("abcde"), 2, 3, S("12345"), 1, 2, S("ab23"));
-    test(S("abcde"), 2, 3, S("12345"), 1, 3, S("ab234"));
-    test(S("abcde"), 2, 3, S("12345"), 1, 4, S("ab2345"));
-    test(S("abcde"), 2, 3, S("12345"), 1, 5, S("ab2345"));
-    test(S("abcde"), 2, 3, S("12345"), 2, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("12345"), 2, 1, S("ab3"));
-    test(S("abcde"), 2, 3, S("12345"), 2, 2, S("ab34"));
-    test(S("abcde"), 2, 3, S("12345"), 2, 3, S("ab345"));
-    test(S("abcde"), 2, 3, S("12345"), 2, 4, S("ab345"));
-    test(S("abcde"), 2, 3, S("12345"), 4, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("12345"), 4, 1, S("ab5"));
-    test(S("abcde"), 2, 3, S("12345"), 4, 2, S("ab5"));
-    test(S("abcde"), 2, 3, S("12345"), 5, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("12345"), 5, 1, S("ab"));
-    test(S("abcde"), 2, 3, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 2, 3, S("1234567890"), 0, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("1234567890"), 0, 1, S("ab1"));
-    test(S("abcde"), 2, 3, S("1234567890"), 0, 5, S("ab12345"));
-    test(S("abcde"), 2, 3, S("1234567890"), 0, 9, S("ab123456789"));
-    test(S("abcde"), 2, 3, S("1234567890"), 0, 10, S("ab1234567890"));
-    test(S("abcde"), 2, 3, S("1234567890"), 0, 11, S("ab1234567890"));
-    test(S("abcde"), 2, 3, S("1234567890"), 1, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("1234567890"), 1, 1, S("ab2"));
-    test(S("abcde"), 2, 3, S("1234567890"), 1, 4, S("ab2345"));
-    test(S("abcde"), 2, 3, S("1234567890"), 1, 8, S("ab23456789"));
-    test(S("abcde"), 2, 3, S("1234567890"), 1, 9, S("ab234567890"));
-    test(S("abcde"), 2, 3, S("1234567890"), 1, 10, S("ab234567890"));
-    test(S("abcde"), 2, 3, S("1234567890"), 5, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("1234567890"), 5, 1, S("ab6"));
-    test(S("abcde"), 2, 3, S("1234567890"), 5, 2, S("ab67"));
-    test(S("abcde"), 2, 3, S("1234567890"), 5, 4, S("ab6789"));
-    test(S("abcde"), 2, 3, S("1234567890"), 5, 5, S("ab67890"));
-    test(S("abcde"), 2, 3, S("1234567890"), 5, 6, S("ab67890"));
-    test(S("abcde"), 2, 3, S("1234567890"), 9, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("1234567890"), 9, 1, S("ab0"));
-    test(S("abcde"), 2, 3, S("1234567890"), 9, 2, S("ab0"));
-    test(S("abcde"), 2, 3, S("1234567890"), 10, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("1234567890"), 10, 1, S("ab"));
-    test(S("abcde"), 2, 3, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 0, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 0, 1, S("ab1"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 0, 10, S("ab1234567890"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 0, 19, S("ab1234567890123456789"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 0, 20, S("ab12345678901234567890"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 0, 21, S("ab12345678901234567890"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 1, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 1, 1, S("ab2"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 1, 9, S("ab234567890"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 1, 18, S("ab234567890123456789"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 1, 19, S("ab2345678901234567890"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 1, 20, S("ab2345678901234567890"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 10, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 10, 1, S("ab1"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 10, 5, S("ab12345"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 10, 9, S("ab123456789"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 10, 10, S("ab1234567890"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 10, 11, S("ab1234567890"));
+TEST_CONSTEXPR_CXX20 bool test13() {
+  test(S("abcde"), 2, 2, S("1234567890"), 5, 5, S("ab67890e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 5, 6, S("ab67890e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 9, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("1234567890"), 9, 1, S("ab0e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 9, 2, S("ab0e"));
+  test(S("abcde"), 2, 2, S("1234567890"), 10, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("1234567890"), 10, 1, S("abe"));
+  test(S("abcde"), 2, 2, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 0, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 0, 1, S("ab1e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 0, 10, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 0, 19, S("ab1234567890123456789e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 0, 20, S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 0, 21, S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 1, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 1, 1, S("ab2e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 1, 9, S("ab234567890e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 1, 18, S("ab234567890123456789e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 1, 19, S("ab2345678901234567890e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 1, 20, S("ab2345678901234567890e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 10, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 10, 1, S("ab1e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 10, 5, S("ab12345e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 10, 9, S("ab123456789e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 10, 10, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 10, 11, S("ab1234567890e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 19, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 19, 1, S("ab0e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 19, 2, S("ab0e"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 20, 0, S("abe"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 20, 1, S("abe"));
+  test(S("abcde"), 2, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 2, 3, S(""), 0, 0, S("ab"));
+  test(S("abcde"), 2, 3, S(""), 0, 1, S("ab"));
+  test(S("abcde"), 2, 3, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 2, 3, S("12345"), 0, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("12345"), 0, 1, S("ab1"));
+  test(S("abcde"), 2, 3, S("12345"), 0, 2, S("ab12"));
+  test(S("abcde"), 2, 3, S("12345"), 0, 4, S("ab1234"));
+  test(S("abcde"), 2, 3, S("12345"), 0, 5, S("ab12345"));
+  test(S("abcde"), 2, 3, S("12345"), 0, 6, S("ab12345"));
+  test(S("abcde"), 2, 3, S("12345"), 1, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("12345"), 1, 1, S("ab2"));
+  test(S("abcde"), 2, 3, S("12345"), 1, 2, S("ab23"));
+  test(S("abcde"), 2, 3, S("12345"), 1, 3, S("ab234"));
+  test(S("abcde"), 2, 3, S("12345"), 1, 4, S("ab2345"));
+  test(S("abcde"), 2, 3, S("12345"), 1, 5, S("ab2345"));
+  test(S("abcde"), 2, 3, S("12345"), 2, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("12345"), 2, 1, S("ab3"));
+  test(S("abcde"), 2, 3, S("12345"), 2, 2, S("ab34"));
+  test(S("abcde"), 2, 3, S("12345"), 2, 3, S("ab345"));
+  test(S("abcde"), 2, 3, S("12345"), 2, 4, S("ab345"));
+  test(S("abcde"), 2, 3, S("12345"), 4, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("12345"), 4, 1, S("ab5"));
+  test(S("abcde"), 2, 3, S("12345"), 4, 2, S("ab5"));
+  test(S("abcde"), 2, 3, S("12345"), 5, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("12345"), 5, 1, S("ab"));
+  test(S("abcde"), 2, 3, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 2, 3, S("1234567890"), 0, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("1234567890"), 0, 1, S("ab1"));
+  test(S("abcde"), 2, 3, S("1234567890"), 0, 5, S("ab12345"));
+  test(S("abcde"), 2, 3, S("1234567890"), 0, 9, S("ab123456789"));
+  test(S("abcde"), 2, 3, S("1234567890"), 0, 10, S("ab1234567890"));
+  test(S("abcde"), 2, 3, S("1234567890"), 0, 11, S("ab1234567890"));
+  test(S("abcde"), 2, 3, S("1234567890"), 1, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("1234567890"), 1, 1, S("ab2"));
+  test(S("abcde"), 2, 3, S("1234567890"), 1, 4, S("ab2345"));
+  test(S("abcde"), 2, 3, S("1234567890"), 1, 8, S("ab23456789"));
+  test(S("abcde"), 2, 3, S("1234567890"), 1, 9, S("ab234567890"));
+  test(S("abcde"), 2, 3, S("1234567890"), 1, 10, S("ab234567890"));
+  test(S("abcde"), 2, 3, S("1234567890"), 5, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("1234567890"), 5, 1, S("ab6"));
+  test(S("abcde"), 2, 3, S("1234567890"), 5, 2, S("ab67"));
+  test(S("abcde"), 2, 3, S("1234567890"), 5, 4, S("ab6789"));
+  test(S("abcde"), 2, 3, S("1234567890"), 5, 5, S("ab67890"));
+  test(S("abcde"), 2, 3, S("1234567890"), 5, 6, S("ab67890"));
+  test(S("abcde"), 2, 3, S("1234567890"), 9, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("1234567890"), 9, 1, S("ab0"));
+  test(S("abcde"), 2, 3, S("1234567890"), 9, 2, S("ab0"));
+  test(S("abcde"), 2, 3, S("1234567890"), 10, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("1234567890"), 10, 1, S("ab"));
+  test(S("abcde"), 2, 3, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 0, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 0, 1, S("ab1"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 0, 10, S("ab1234567890"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 0, 19, S("ab1234567890123456789"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 0, 20, S("ab12345678901234567890"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 0, 21, S("ab12345678901234567890"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 1, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 1, 1, S("ab2"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 1, 9, S("ab234567890"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 1, 18, S("ab234567890123456789"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 1, 19, S("ab2345678901234567890"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 1, 20, S("ab2345678901234567890"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 10, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 10, 1, S("ab1"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 10, 5, S("ab12345"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 10, 9, S("ab123456789"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 10, 10, S("ab1234567890"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 10, 11, S("ab1234567890"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test14()
-{
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 19, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 19, 1, S("ab0"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 19, 2, S("ab0"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 20, 0, S("ab"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 20, 1, S("ab"));
-    test(S("abcde"), 2, 3, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 2, 4, S(""), 0, 0, S("ab"));
-    test(S("abcde"), 2, 4, S(""), 0, 1, S("ab"));
-    test(S("abcde"), 2, 4, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 2, 4, S("12345"), 0, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("12345"), 0, 1, S("ab1"));
-    test(S("abcde"), 2, 4, S("12345"), 0, 2, S("ab12"));
-    test(S("abcde"), 2, 4, S("12345"), 0, 4, S("ab1234"));
-    test(S("abcde"), 2, 4, S("12345"), 0, 5, S("ab12345"));
-    test(S("abcde"), 2, 4, S("12345"), 0, 6, S("ab12345"));
-    test(S("abcde"), 2, 4, S("12345"), 1, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("12345"), 1, 1, S("ab2"));
-    test(S("abcde"), 2, 4, S("12345"), 1, 2, S("ab23"));
-    test(S("abcde"), 2, 4, S("12345"), 1, 3, S("ab234"));
-    test(S("abcde"), 2, 4, S("12345"), 1, 4, S("ab2345"));
-    test(S("abcde"), 2, 4, S("12345"), 1, 5, S("ab2345"));
-    test(S("abcde"), 2, 4, S("12345"), 2, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("12345"), 2, 1, S("ab3"));
-    test(S("abcde"), 2, 4, S("12345"), 2, 2, S("ab34"));
-    test(S("abcde"), 2, 4, S("12345"), 2, 3, S("ab345"));
-    test(S("abcde"), 2, 4, S("12345"), 2, 4, S("ab345"));
-    test(S("abcde"), 2, 4, S("12345"), 4, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("12345"), 4, 1, S("ab5"));
-    test(S("abcde"), 2, 4, S("12345"), 4, 2, S("ab5"));
-    test(S("abcde"), 2, 4, S("12345"), 5, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("12345"), 5, 1, S("ab"));
-    test(S("abcde"), 2, 4, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 2, 4, S("1234567890"), 0, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("1234567890"), 0, 1, S("ab1"));
-    test(S("abcde"), 2, 4, S("1234567890"), 0, 5, S("ab12345"));
-    test(S("abcde"), 2, 4, S("1234567890"), 0, 9, S("ab123456789"));
-    test(S("abcde"), 2, 4, S("1234567890"), 0, 10, S("ab1234567890"));
-    test(S("abcde"), 2, 4, S("1234567890"), 0, 11, S("ab1234567890"));
-    test(S("abcde"), 2, 4, S("1234567890"), 1, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("1234567890"), 1, 1, S("ab2"));
-    test(S("abcde"), 2, 4, S("1234567890"), 1, 4, S("ab2345"));
-    test(S("abcde"), 2, 4, S("1234567890"), 1, 8, S("ab23456789"));
-    test(S("abcde"), 2, 4, S("1234567890"), 1, 9, S("ab234567890"));
-    test(S("abcde"), 2, 4, S("1234567890"), 1, 10, S("ab234567890"));
-    test(S("abcde"), 2, 4, S("1234567890"), 5, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("1234567890"), 5, 1, S("ab6"));
-    test(S("abcde"), 2, 4, S("1234567890"), 5, 2, S("ab67"));
-    test(S("abcde"), 2, 4, S("1234567890"), 5, 4, S("ab6789"));
-    test(S("abcde"), 2, 4, S("1234567890"), 5, 5, S("ab67890"));
-    test(S("abcde"), 2, 4, S("1234567890"), 5, 6, S("ab67890"));
-    test(S("abcde"), 2, 4, S("1234567890"), 9, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("1234567890"), 9, 1, S("ab0"));
-    test(S("abcde"), 2, 4, S("1234567890"), 9, 2, S("ab0"));
-    test(S("abcde"), 2, 4, S("1234567890"), 10, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("1234567890"), 10, 1, S("ab"));
-    test(S("abcde"), 2, 4, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 0, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 0, 1, S("ab1"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 0, 10, S("ab1234567890"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 0, 19, S("ab1234567890123456789"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 0, 20, S("ab12345678901234567890"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 0, 21, S("ab12345678901234567890"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 1, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 1, 1, S("ab2"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 1, 9, S("ab234567890"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 1, 18, S("ab234567890123456789"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 1, 19, S("ab2345678901234567890"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 1, 20, S("ab2345678901234567890"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 10, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 10, 1, S("ab1"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 10, 5, S("ab12345"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 10, 9, S("ab123456789"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 10, 10, S("ab1234567890"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 10, 11, S("ab1234567890"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 19, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 19, 1, S("ab0"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 19, 2, S("ab0"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 20, 0, S("ab"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 20, 1, S("ab"));
-    test(S("abcde"), 2, 4, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 4, 0, S(""), 0, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S(""), 0, 1, S("abcde"));
-    test(S("abcde"), 4, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 4, 0, S("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("12345"), 0, 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, S("12345"), 0, 2, S("abcd12e"));
-    test(S("abcde"), 4, 0, S("12345"), 0, 4, S("abcd1234e"));
-    test(S("abcde"), 4, 0, S("12345"), 0, 5, S("abcd12345e"));
-    test(S("abcde"), 4, 0, S("12345"), 0, 6, S("abcd12345e"));
-    test(S("abcde"), 4, 0, S("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("12345"), 1, 1, S("abcd2e"));
-    test(S("abcde"), 4, 0, S("12345"), 1, 2, S("abcd23e"));
-    test(S("abcde"), 4, 0, S("12345"), 1, 3, S("abcd234e"));
-    test(S("abcde"), 4, 0, S("12345"), 1, 4, S("abcd2345e"));
-    test(S("abcde"), 4, 0, S("12345"), 1, 5, S("abcd2345e"));
-    test(S("abcde"), 4, 0, S("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("12345"), 2, 1, S("abcd3e"));
-    test(S("abcde"), 4, 0, S("12345"), 2, 2, S("abcd34e"));
-    test(S("abcde"), 4, 0, S("12345"), 2, 3, S("abcd345e"));
-    test(S("abcde"), 4, 0, S("12345"), 2, 4, S("abcd345e"));
+TEST_CONSTEXPR_CXX20 bool test14() {
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 19, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 19, 1, S("ab0"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 19, 2, S("ab0"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 20, 0, S("ab"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 20, 1, S("ab"));
+  test(S("abcde"), 2, 3, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 2, 4, S(""), 0, 0, S("ab"));
+  test(S("abcde"), 2, 4, S(""), 0, 1, S("ab"));
+  test(S("abcde"), 2, 4, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 2, 4, S("12345"), 0, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("12345"), 0, 1, S("ab1"));
+  test(S("abcde"), 2, 4, S("12345"), 0, 2, S("ab12"));
+  test(S("abcde"), 2, 4, S("12345"), 0, 4, S("ab1234"));
+  test(S("abcde"), 2, 4, S("12345"), 0, 5, S("ab12345"));
+  test(S("abcde"), 2, 4, S("12345"), 0, 6, S("ab12345"));
+  test(S("abcde"), 2, 4, S("12345"), 1, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("12345"), 1, 1, S("ab2"));
+  test(S("abcde"), 2, 4, S("12345"), 1, 2, S("ab23"));
+  test(S("abcde"), 2, 4, S("12345"), 1, 3, S("ab234"));
+  test(S("abcde"), 2, 4, S("12345"), 1, 4, S("ab2345"));
+  test(S("abcde"), 2, 4, S("12345"), 1, 5, S("ab2345"));
+  test(S("abcde"), 2, 4, S("12345"), 2, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("12345"), 2, 1, S("ab3"));
+  test(S("abcde"), 2, 4, S("12345"), 2, 2, S("ab34"));
+  test(S("abcde"), 2, 4, S("12345"), 2, 3, S("ab345"));
+  test(S("abcde"), 2, 4, S("12345"), 2, 4, S("ab345"));
+  test(S("abcde"), 2, 4, S("12345"), 4, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("12345"), 4, 1, S("ab5"));
+  test(S("abcde"), 2, 4, S("12345"), 4, 2, S("ab5"));
+  test(S("abcde"), 2, 4, S("12345"), 5, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("12345"), 5, 1, S("ab"));
+  test(S("abcde"), 2, 4, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 2, 4, S("1234567890"), 0, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("1234567890"), 0, 1, S("ab1"));
+  test(S("abcde"), 2, 4, S("1234567890"), 0, 5, S("ab12345"));
+  test(S("abcde"), 2, 4, S("1234567890"), 0, 9, S("ab123456789"));
+  test(S("abcde"), 2, 4, S("1234567890"), 0, 10, S("ab1234567890"));
+  test(S("abcde"), 2, 4, S("1234567890"), 0, 11, S("ab1234567890"));
+  test(S("abcde"), 2, 4, S("1234567890"), 1, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("1234567890"), 1, 1, S("ab2"));
+  test(S("abcde"), 2, 4, S("1234567890"), 1, 4, S("ab2345"));
+  test(S("abcde"), 2, 4, S("1234567890"), 1, 8, S("ab23456789"));
+  test(S("abcde"), 2, 4, S("1234567890"), 1, 9, S("ab234567890"));
+  test(S("abcde"), 2, 4, S("1234567890"), 1, 10, S("ab234567890"));
+  test(S("abcde"), 2, 4, S("1234567890"), 5, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("1234567890"), 5, 1, S("ab6"));
+  test(S("abcde"), 2, 4, S("1234567890"), 5, 2, S("ab67"));
+  test(S("abcde"), 2, 4, S("1234567890"), 5, 4, S("ab6789"));
+  test(S("abcde"), 2, 4, S("1234567890"), 5, 5, S("ab67890"));
+  test(S("abcde"), 2, 4, S("1234567890"), 5, 6, S("ab67890"));
+  test(S("abcde"), 2, 4, S("1234567890"), 9, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("1234567890"), 9, 1, S("ab0"));
+  test(S("abcde"), 2, 4, S("1234567890"), 9, 2, S("ab0"));
+  test(S("abcde"), 2, 4, S("1234567890"), 10, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("1234567890"), 10, 1, S("ab"));
+  test(S("abcde"), 2, 4, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 0, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 0, 1, S("ab1"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 0, 10, S("ab1234567890"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 0, 19, S("ab1234567890123456789"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 0, 20, S("ab12345678901234567890"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 0, 21, S("ab12345678901234567890"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 1, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 1, 1, S("ab2"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 1, 9, S("ab234567890"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 1, 18, S("ab234567890123456789"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 1, 19, S("ab2345678901234567890"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 1, 20, S("ab2345678901234567890"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 10, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 10, 1, S("ab1"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 10, 5, S("ab12345"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 10, 9, S("ab123456789"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 10, 10, S("ab1234567890"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 10, 11, S("ab1234567890"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 19, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 19, 1, S("ab0"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 19, 2, S("ab0"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 20, 0, S("ab"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 20, 1, S("ab"));
+  test(S("abcde"), 2, 4, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 4, 0, S(""), 0, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S(""), 0, 1, S("abcde"));
+  test(S("abcde"), 4, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 4, 0, S("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("12345"), 0, 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, S("12345"), 0, 2, S("abcd12e"));
+  test(S("abcde"), 4, 0, S("12345"), 0, 4, S("abcd1234e"));
+  test(S("abcde"), 4, 0, S("12345"), 0, 5, S("abcd12345e"));
+  test(S("abcde"), 4, 0, S("12345"), 0, 6, S("abcd12345e"));
+  test(S("abcde"), 4, 0, S("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("12345"), 1, 1, S("abcd2e"));
+  test(S("abcde"), 4, 0, S("12345"), 1, 2, S("abcd23e"));
+  test(S("abcde"), 4, 0, S("12345"), 1, 3, S("abcd234e"));
+  test(S("abcde"), 4, 0, S("12345"), 1, 4, S("abcd2345e"));
+  test(S("abcde"), 4, 0, S("12345"), 1, 5, S("abcd2345e"));
+  test(S("abcde"), 4, 0, S("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("12345"), 2, 1, S("abcd3e"));
+  test(S("abcde"), 4, 0, S("12345"), 2, 2, S("abcd34e"));
+  test(S("abcde"), 4, 0, S("12345"), 2, 3, S("abcd345e"));
+  test(S("abcde"), 4, 0, S("12345"), 2, 4, S("abcd345e"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test15()
-{
-    test(S("abcde"), 4, 0, S("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("12345"), 4, 1, S("abcd5e"));
-    test(S("abcde"), 4, 0, S("12345"), 4, 2, S("abcd5e"));
-    test(S("abcde"), 4, 0, S("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 4, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 4, 0, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("1234567890"), 0, 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 0, 5, S("abcd12345e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 0, 9, S("abcd123456789e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 0, 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 0, 11, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("1234567890"), 1, 1, S("abcd2e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 1, 4, S("abcd2345e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 1, 8, S("abcd23456789e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 1, 9, S("abcd234567890e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 1, 10, S("abcd234567890e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("1234567890"), 5, 1, S("abcd6e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 5, 2, S("abcd67e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 5, 4, S("abcd6789e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 5, 5, S("abcd67890e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 5, 6, S("abcd67890e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("1234567890"), 9, 1, S("abcd0e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 9, 2, S("abcd0e"));
-    test(S("abcde"), 4, 0, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 4, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 0, 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 0, 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 0, 19, S("abcd1234567890123456789e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 0, 20, S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 0, 21, S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 1, 1, S("abcd2e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 1, 9, S("abcd234567890e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 1, 18, S("abcd234567890123456789e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 1, 19, S("abcd2345678901234567890e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 1, 20, S("abcd2345678901234567890e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 10, 1, S("abcd1e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 10, 5, S("abcd12345e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 10, 9, S("abcd123456789e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 10, 10, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 10, 11, S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 19, 1, S("abcd0e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 19, 2, S("abcd0e"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 4, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 4, 1, S(""), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S(""), 0, 1, S("abcd"));
-    test(S("abcde"), 4, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 4, 1, S("12345"), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("12345"), 0, 1, S("abcd1"));
-    test(S("abcde"), 4, 1, S("12345"), 0, 2, S("abcd12"));
-    test(S("abcde"), 4, 1, S("12345"), 0, 4, S("abcd1234"));
-    test(S("abcde"), 4, 1, S("12345"), 0, 5, S("abcd12345"));
-    test(S("abcde"), 4, 1, S("12345"), 0, 6, S("abcd12345"));
-    test(S("abcde"), 4, 1, S("12345"), 1, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("12345"), 1, 1, S("abcd2"));
-    test(S("abcde"), 4, 1, S("12345"), 1, 2, S("abcd23"));
-    test(S("abcde"), 4, 1, S("12345"), 1, 3, S("abcd234"));
-    test(S("abcde"), 4, 1, S("12345"), 1, 4, S("abcd2345"));
-    test(S("abcde"), 4, 1, S("12345"), 1, 5, S("abcd2345"));
-    test(S("abcde"), 4, 1, S("12345"), 2, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("12345"), 2, 1, S("abcd3"));
-    test(S("abcde"), 4, 1, S("12345"), 2, 2, S("abcd34"));
-    test(S("abcde"), 4, 1, S("12345"), 2, 3, S("abcd345"));
-    test(S("abcde"), 4, 1, S("12345"), 2, 4, S("abcd345"));
-    test(S("abcde"), 4, 1, S("12345"), 4, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("12345"), 4, 1, S("abcd5"));
-    test(S("abcde"), 4, 1, S("12345"), 4, 2, S("abcd5"));
-    test(S("abcde"), 4, 1, S("12345"), 5, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("12345"), 5, 1, S("abcd"));
-    test(S("abcde"), 4, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 4, 1, S("1234567890"), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("1234567890"), 0, 1, S("abcd1"));
-    test(S("abcde"), 4, 1, S("1234567890"), 0, 5, S("abcd12345"));
-    test(S("abcde"), 4, 1, S("1234567890"), 0, 9, S("abcd123456789"));
-    test(S("abcde"), 4, 1, S("1234567890"), 0, 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, S("1234567890"), 0, 11, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, S("1234567890"), 1, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("1234567890"), 1, 1, S("abcd2"));
-    test(S("abcde"), 4, 1, S("1234567890"), 1, 4, S("abcd2345"));
-    test(S("abcde"), 4, 1, S("1234567890"), 1, 8, S("abcd23456789"));
-    test(S("abcde"), 4, 1, S("1234567890"), 1, 9, S("abcd234567890"));
-    test(S("abcde"), 4, 1, S("1234567890"), 1, 10, S("abcd234567890"));
-    test(S("abcde"), 4, 1, S("1234567890"), 5, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("1234567890"), 5, 1, S("abcd6"));
-    test(S("abcde"), 4, 1, S("1234567890"), 5, 2, S("abcd67"));
-    test(S("abcde"), 4, 1, S("1234567890"), 5, 4, S("abcd6789"));
-    test(S("abcde"), 4, 1, S("1234567890"), 5, 5, S("abcd67890"));
-    test(S("abcde"), 4, 1, S("1234567890"), 5, 6, S("abcd67890"));
-    test(S("abcde"), 4, 1, S("1234567890"), 9, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("1234567890"), 9, 1, S("abcd0"));
+TEST_CONSTEXPR_CXX20 bool test15() {
+  test(S("abcde"), 4, 0, S("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("12345"), 4, 1, S("abcd5e"));
+  test(S("abcde"), 4, 0, S("12345"), 4, 2, S("abcd5e"));
+  test(S("abcde"), 4, 0, S("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 4, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 4, 0, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("1234567890"), 0, 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 0, 5, S("abcd12345e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 0, 9, S("abcd123456789e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 0, 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 0, 11, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("1234567890"), 1, 1, S("abcd2e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 1, 4, S("abcd2345e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 1, 8, S("abcd23456789e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 1, 9, S("abcd234567890e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 1, 10, S("abcd234567890e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("1234567890"), 5, 1, S("abcd6e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 5, 2, S("abcd67e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 5, 4, S("abcd6789e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 5, 5, S("abcd67890e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 5, 6, S("abcd67890e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("1234567890"), 9, 1, S("abcd0e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 9, 2, S("abcd0e"));
+  test(S("abcde"), 4, 0, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 4, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 0, 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 0, 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 0, 19, S("abcd1234567890123456789e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 0, 20, S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 0, 21, S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 1, 1, S("abcd2e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 1, 9, S("abcd234567890e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 1, 18, S("abcd234567890123456789e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 1, 19, S("abcd2345678901234567890e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 1, 20, S("abcd2345678901234567890e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 10, 1, S("abcd1e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 10, 5, S("abcd12345e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 10, 9, S("abcd123456789e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 10, 10, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 10, 11, S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 19, 1, S("abcd0e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 19, 2, S("abcd0e"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 4, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 4, 1, S(""), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S(""), 0, 1, S("abcd"));
+  test(S("abcde"), 4, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 4, 1, S("12345"), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("12345"), 0, 1, S("abcd1"));
+  test(S("abcde"), 4, 1, S("12345"), 0, 2, S("abcd12"));
+  test(S("abcde"), 4, 1, S("12345"), 0, 4, S("abcd1234"));
+  test(S("abcde"), 4, 1, S("12345"), 0, 5, S("abcd12345"));
+  test(S("abcde"), 4, 1, S("12345"), 0, 6, S("abcd12345"));
+  test(S("abcde"), 4, 1, S("12345"), 1, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("12345"), 1, 1, S("abcd2"));
+  test(S("abcde"), 4, 1, S("12345"), 1, 2, S("abcd23"));
+  test(S("abcde"), 4, 1, S("12345"), 1, 3, S("abcd234"));
+  test(S("abcde"), 4, 1, S("12345"), 1, 4, S("abcd2345"));
+  test(S("abcde"), 4, 1, S("12345"), 1, 5, S("abcd2345"));
+  test(S("abcde"), 4, 1, S("12345"), 2, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("12345"), 2, 1, S("abcd3"));
+  test(S("abcde"), 4, 1, S("12345"), 2, 2, S("abcd34"));
+  test(S("abcde"), 4, 1, S("12345"), 2, 3, S("abcd345"));
+  test(S("abcde"), 4, 1, S("12345"), 2, 4, S("abcd345"));
+  test(S("abcde"), 4, 1, S("12345"), 4, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("12345"), 4, 1, S("abcd5"));
+  test(S("abcde"), 4, 1, S("12345"), 4, 2, S("abcd5"));
+  test(S("abcde"), 4, 1, S("12345"), 5, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("12345"), 5, 1, S("abcd"));
+  test(S("abcde"), 4, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 4, 1, S("1234567890"), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("1234567890"), 0, 1, S("abcd1"));
+  test(S("abcde"), 4, 1, S("1234567890"), 0, 5, S("abcd12345"));
+  test(S("abcde"), 4, 1, S("1234567890"), 0, 9, S("abcd123456789"));
+  test(S("abcde"), 4, 1, S("1234567890"), 0, 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, S("1234567890"), 0, 11, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, S("1234567890"), 1, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("1234567890"), 1, 1, S("abcd2"));
+  test(S("abcde"), 4, 1, S("1234567890"), 1, 4, S("abcd2345"));
+  test(S("abcde"), 4, 1, S("1234567890"), 1, 8, S("abcd23456789"));
+  test(S("abcde"), 4, 1, S("1234567890"), 1, 9, S("abcd234567890"));
+  test(S("abcde"), 4, 1, S("1234567890"), 1, 10, S("abcd234567890"));
+  test(S("abcde"), 4, 1, S("1234567890"), 5, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("1234567890"), 5, 1, S("abcd6"));
+  test(S("abcde"), 4, 1, S("1234567890"), 5, 2, S("abcd67"));
+  test(S("abcde"), 4, 1, S("1234567890"), 5, 4, S("abcd6789"));
+  test(S("abcde"), 4, 1, S("1234567890"), 5, 5, S("abcd67890"));
+  test(S("abcde"), 4, 1, S("1234567890"), 5, 6, S("abcd67890"));
+  test(S("abcde"), 4, 1, S("1234567890"), 9, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("1234567890"), 9, 1, S("abcd0"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test16()
-{
-    test(S("abcde"), 4, 1, S("1234567890"), 9, 2, S("abcd0"));
-    test(S("abcde"), 4, 1, S("1234567890"), 10, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("1234567890"), 10, 1, S("abcd"));
-    test(S("abcde"), 4, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 0, 1, S("abcd1"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 0, 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 0, 19, S("abcd1234567890123456789"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 0, 20, S("abcd12345678901234567890"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 0, 21, S("abcd12345678901234567890"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 1, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 1, 1, S("abcd2"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 1, 9, S("abcd234567890"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 1, 18, S("abcd234567890123456789"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 1, 19, S("abcd2345678901234567890"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 1, 20, S("abcd2345678901234567890"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 10, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 10, 1, S("abcd1"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 10, 5, S("abcd12345"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 10, 9, S("abcd123456789"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 10, 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 10, 11, S("abcd1234567890"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 19, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 19, 1, S("abcd0"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 19, 2, S("abcd0"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 20, 0, S("abcd"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 20, 1, S("abcd"));
-    test(S("abcde"), 4, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 4, 2, S(""), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S(""), 0, 1, S("abcd"));
-    test(S("abcde"), 4, 2, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 4, 2, S("12345"), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("12345"), 0, 1, S("abcd1"));
-    test(S("abcde"), 4, 2, S("12345"), 0, 2, S("abcd12"));
-    test(S("abcde"), 4, 2, S("12345"), 0, 4, S("abcd1234"));
-    test(S("abcde"), 4, 2, S("12345"), 0, 5, S("abcd12345"));
-    test(S("abcde"), 4, 2, S("12345"), 0, 6, S("abcd12345"));
-    test(S("abcde"), 4, 2, S("12345"), 1, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("12345"), 1, 1, S("abcd2"));
-    test(S("abcde"), 4, 2, S("12345"), 1, 2, S("abcd23"));
-    test(S("abcde"), 4, 2, S("12345"), 1, 3, S("abcd234"));
-    test(S("abcde"), 4, 2, S("12345"), 1, 4, S("abcd2345"));
-    test(S("abcde"), 4, 2, S("12345"), 1, 5, S("abcd2345"));
-    test(S("abcde"), 4, 2, S("12345"), 2, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("12345"), 2, 1, S("abcd3"));
-    test(S("abcde"), 4, 2, S("12345"), 2, 2, S("abcd34"));
-    test(S("abcde"), 4, 2, S("12345"), 2, 3, S("abcd345"));
-    test(S("abcde"), 4, 2, S("12345"), 2, 4, S("abcd345"));
-    test(S("abcde"), 4, 2, S("12345"), 4, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("12345"), 4, 1, S("abcd5"));
-    test(S("abcde"), 4, 2, S("12345"), 4, 2, S("abcd5"));
-    test(S("abcde"), 4, 2, S("12345"), 5, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("12345"), 5, 1, S("abcd"));
-    test(S("abcde"), 4, 2, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 4, 2, S("1234567890"), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("1234567890"), 0, 1, S("abcd1"));
-    test(S("abcde"), 4, 2, S("1234567890"), 0, 5, S("abcd12345"));
-    test(S("abcde"), 4, 2, S("1234567890"), 0, 9, S("abcd123456789"));
-    test(S("abcde"), 4, 2, S("1234567890"), 0, 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 2, S("1234567890"), 0, 11, S("abcd1234567890"));
-    test(S("abcde"), 4, 2, S("1234567890"), 1, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("1234567890"), 1, 1, S("abcd2"));
-    test(S("abcde"), 4, 2, S("1234567890"), 1, 4, S("abcd2345"));
-    test(S("abcde"), 4, 2, S("1234567890"), 1, 8, S("abcd23456789"));
-    test(S("abcde"), 4, 2, S("1234567890"), 1, 9, S("abcd234567890"));
-    test(S("abcde"), 4, 2, S("1234567890"), 1, 10, S("abcd234567890"));
-    test(S("abcde"), 4, 2, S("1234567890"), 5, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("1234567890"), 5, 1, S("abcd6"));
-    test(S("abcde"), 4, 2, S("1234567890"), 5, 2, S("abcd67"));
-    test(S("abcde"), 4, 2, S("1234567890"), 5, 4, S("abcd6789"));
-    test(S("abcde"), 4, 2, S("1234567890"), 5, 5, S("abcd67890"));
-    test(S("abcde"), 4, 2, S("1234567890"), 5, 6, S("abcd67890"));
-    test(S("abcde"), 4, 2, S("1234567890"), 9, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("1234567890"), 9, 1, S("abcd0"));
-    test(S("abcde"), 4, 2, S("1234567890"), 9, 2, S("abcd0"));
-    test(S("abcde"), 4, 2, S("1234567890"), 10, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("1234567890"), 10, 1, S("abcd"));
-    test(S("abcde"), 4, 2, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 0, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 0, 1, S("abcd1"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 0, 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 0, 19, S("abcd1234567890123456789"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 0, 20, S("abcd12345678901234567890"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 0, 21, S("abcd12345678901234567890"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 1, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 1, 1, S("abcd2"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 1, 9, S("abcd234567890"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 1, 18, S("abcd234567890123456789"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 1, 19, S("abcd2345678901234567890"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 1, 20, S("abcd2345678901234567890"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 10, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 10, 1, S("abcd1"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 10, 5, S("abcd12345"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 10, 9, S("abcd123456789"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 10, 10, S("abcd1234567890"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 10, 11, S("abcd1234567890"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 19, 0, S("abcd"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 19, 1, S("abcd0"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 19, 2, S("abcd0"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 20, 0, S("abcd"));
+TEST_CONSTEXPR_CXX20 bool test16() {
+  test(S("abcde"), 4, 1, S("1234567890"), 9, 2, S("abcd0"));
+  test(S("abcde"), 4, 1, S("1234567890"), 10, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("1234567890"), 10, 1, S("abcd"));
+  test(S("abcde"), 4, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 0, 1, S("abcd1"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 0, 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 0, 19, S("abcd1234567890123456789"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 0, 20, S("abcd12345678901234567890"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 0, 21, S("abcd12345678901234567890"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 1, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 1, 1, S("abcd2"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 1, 9, S("abcd234567890"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 1, 18, S("abcd234567890123456789"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 1, 19, S("abcd2345678901234567890"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 1, 20, S("abcd2345678901234567890"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 10, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 10, 1, S("abcd1"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 10, 5, S("abcd12345"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 10, 9, S("abcd123456789"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 10, 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 10, 11, S("abcd1234567890"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 19, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 19, 1, S("abcd0"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 19, 2, S("abcd0"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 20, 0, S("abcd"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 20, 1, S("abcd"));
+  test(S("abcde"), 4, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 4, 2, S(""), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S(""), 0, 1, S("abcd"));
+  test(S("abcde"), 4, 2, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 4, 2, S("12345"), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("12345"), 0, 1, S("abcd1"));
+  test(S("abcde"), 4, 2, S("12345"), 0, 2, S("abcd12"));
+  test(S("abcde"), 4, 2, S("12345"), 0, 4, S("abcd1234"));
+  test(S("abcde"), 4, 2, S("12345"), 0, 5, S("abcd12345"));
+  test(S("abcde"), 4, 2, S("12345"), 0, 6, S("abcd12345"));
+  test(S("abcde"), 4, 2, S("12345"), 1, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("12345"), 1, 1, S("abcd2"));
+  test(S("abcde"), 4, 2, S("12345"), 1, 2, S("abcd23"));
+  test(S("abcde"), 4, 2, S("12345"), 1, 3, S("abcd234"));
+  test(S("abcde"), 4, 2, S("12345"), 1, 4, S("abcd2345"));
+  test(S("abcde"), 4, 2, S("12345"), 1, 5, S("abcd2345"));
+  test(S("abcde"), 4, 2, S("12345"), 2, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("12345"), 2, 1, S("abcd3"));
+  test(S("abcde"), 4, 2, S("12345"), 2, 2, S("abcd34"));
+  test(S("abcde"), 4, 2, S("12345"), 2, 3, S("abcd345"));
+  test(S("abcde"), 4, 2, S("12345"), 2, 4, S("abcd345"));
+  test(S("abcde"), 4, 2, S("12345"), 4, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("12345"), 4, 1, S("abcd5"));
+  test(S("abcde"), 4, 2, S("12345"), 4, 2, S("abcd5"));
+  test(S("abcde"), 4, 2, S("12345"), 5, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("12345"), 5, 1, S("abcd"));
+  test(S("abcde"), 4, 2, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 4, 2, S("1234567890"), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("1234567890"), 0, 1, S("abcd1"));
+  test(S("abcde"), 4, 2, S("1234567890"), 0, 5, S("abcd12345"));
+  test(S("abcde"), 4, 2, S("1234567890"), 0, 9, S("abcd123456789"));
+  test(S("abcde"), 4, 2, S("1234567890"), 0, 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 2, S("1234567890"), 0, 11, S("abcd1234567890"));
+  test(S("abcde"), 4, 2, S("1234567890"), 1, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("1234567890"), 1, 1, S("abcd2"));
+  test(S("abcde"), 4, 2, S("1234567890"), 1, 4, S("abcd2345"));
+  test(S("abcde"), 4, 2, S("1234567890"), 1, 8, S("abcd23456789"));
+  test(S("abcde"), 4, 2, S("1234567890"), 1, 9, S("abcd234567890"));
+  test(S("abcde"), 4, 2, S("1234567890"), 1, 10, S("abcd234567890"));
+  test(S("abcde"), 4, 2, S("1234567890"), 5, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("1234567890"), 5, 1, S("abcd6"));
+  test(S("abcde"), 4, 2, S("1234567890"), 5, 2, S("abcd67"));
+  test(S("abcde"), 4, 2, S("1234567890"), 5, 4, S("abcd6789"));
+  test(S("abcde"), 4, 2, S("1234567890"), 5, 5, S("abcd67890"));
+  test(S("abcde"), 4, 2, S("1234567890"), 5, 6, S("abcd67890"));
+  test(S("abcde"), 4, 2, S("1234567890"), 9, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("1234567890"), 9, 1, S("abcd0"));
+  test(S("abcde"), 4, 2, S("1234567890"), 9, 2, S("abcd0"));
+  test(S("abcde"), 4, 2, S("1234567890"), 10, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("1234567890"), 10, 1, S("abcd"));
+  test(S("abcde"), 4, 2, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 0, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 0, 1, S("abcd1"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 0, 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 0, 19, S("abcd1234567890123456789"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 0, 20, S("abcd12345678901234567890"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 0, 21, S("abcd12345678901234567890"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 1, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 1, 1, S("abcd2"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 1, 9, S("abcd234567890"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 1, 18, S("abcd234567890123456789"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 1, 19, S("abcd2345678901234567890"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 1, 20, S("abcd2345678901234567890"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 10, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 10, 1, S("abcd1"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 10, 5, S("abcd12345"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 10, 9, S("abcd123456789"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 10, 10, S("abcd1234567890"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 10, 11, S("abcd1234567890"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 19, 0, S("abcd"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 19, 1, S("abcd0"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 19, 2, S("abcd0"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 20, 0, S("abcd"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test17()
-{
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 20, 1, S("abcd"));
-    test(S("abcde"), 4, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 5, 0, S(""), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S(""), 0, 1, S("abcde"));
-    test(S("abcde"), 5, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 5, 0, S("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("12345"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, 0, S("12345"), 0, 2, S("abcde12"));
-    test(S("abcde"), 5, 0, S("12345"), 0, 4, S("abcde1234"));
-    test(S("abcde"), 5, 0, S("12345"), 0, 5, S("abcde12345"));
-    test(S("abcde"), 5, 0, S("12345"), 0, 6, S("abcde12345"));
-    test(S("abcde"), 5, 0, S("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("12345"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, 0, S("12345"), 1, 2, S("abcde23"));
-    test(S("abcde"), 5, 0, S("12345"), 1, 3, S("abcde234"));
-    test(S("abcde"), 5, 0, S("12345"), 1, 4, S("abcde2345"));
-    test(S("abcde"), 5, 0, S("12345"), 1, 5, S("abcde2345"));
-    test(S("abcde"), 5, 0, S("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("12345"), 2, 1, S("abcde3"));
-    test(S("abcde"), 5, 0, S("12345"), 2, 2, S("abcde34"));
-    test(S("abcde"), 5, 0, S("12345"), 2, 3, S("abcde345"));
-    test(S("abcde"), 5, 0, S("12345"), 2, 4, S("abcde345"));
-    test(S("abcde"), 5, 0, S("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("12345"), 4, 1, S("abcde5"));
-    test(S("abcde"), 5, 0, S("12345"), 4, 2, S("abcde5"));
-    test(S("abcde"), 5, 0, S("12345"), 5, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 5, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 5, 0, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("1234567890"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, 0, S("1234567890"), 0, 5, S("abcde12345"));
-    test(S("abcde"), 5, 0, S("1234567890"), 0, 9, S("abcde123456789"));
-    test(S("abcde"), 5, 0, S("1234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, S("1234567890"), 0, 11, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("1234567890"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, 0, S("1234567890"), 1, 4, S("abcde2345"));
-    test(S("abcde"), 5, 0, S("1234567890"), 1, 8, S("abcde23456789"));
-    test(S("abcde"), 5, 0, S("1234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcde"), 5, 0, S("1234567890"), 1, 10, S("abcde234567890"));
-    test(S("abcde"), 5, 0, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("1234567890"), 5, 1, S("abcde6"));
-    test(S("abcde"), 5, 0, S("1234567890"), 5, 2, S("abcde67"));
-    test(S("abcde"), 5, 0, S("1234567890"), 5, 4, S("abcde6789"));
-    test(S("abcde"), 5, 0, S("1234567890"), 5, 5, S("abcde67890"));
-    test(S("abcde"), 5, 0, S("1234567890"), 5, 6, S("abcde67890"));
-    test(S("abcde"), 5, 0, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("1234567890"), 9, 1, S("abcde0"));
-    test(S("abcde"), 5, 0, S("1234567890"), 9, 2, S("abcde0"));
-    test(S("abcde"), 5, 0, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 5, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 10, 1, S("abcde1"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 10, 5, S("abcde12345"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 10, 9, S("abcde123456789"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 10, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 10, 11, S("abcde1234567890"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 19, 1, S("abcde0"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 19, 2, S("abcde0"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 5, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 5, 1, S(""), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S(""), 0, 1, S("abcde"));
-    test(S("abcde"), 5, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 5, 1, S("12345"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("12345"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, 1, S("12345"), 0, 2, S("abcde12"));
-    test(S("abcde"), 5, 1, S("12345"), 0, 4, S("abcde1234"));
-    test(S("abcde"), 5, 1, S("12345"), 0, 5, S("abcde12345"));
-    test(S("abcde"), 5, 1, S("12345"), 0, 6, S("abcde12345"));
-    test(S("abcde"), 5, 1, S("12345"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("12345"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, 1, S("12345"), 1, 2, S("abcde23"));
-    test(S("abcde"), 5, 1, S("12345"), 1, 3, S("abcde234"));
-    test(S("abcde"), 5, 1, S("12345"), 1, 4, S("abcde2345"));
-    test(S("abcde"), 5, 1, S("12345"), 1, 5, S("abcde2345"));
-    test(S("abcde"), 5, 1, S("12345"), 2, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("12345"), 2, 1, S("abcde3"));
-    test(S("abcde"), 5, 1, S("12345"), 2, 2, S("abcde34"));
-    test(S("abcde"), 5, 1, S("12345"), 2, 3, S("abcde345"));
-    test(S("abcde"), 5, 1, S("12345"), 2, 4, S("abcde345"));
-    test(S("abcde"), 5, 1, S("12345"), 4, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("12345"), 4, 1, S("abcde5"));
-    test(S("abcde"), 5, 1, S("12345"), 4, 2, S("abcde5"));
-    test(S("abcde"), 5, 1, S("12345"), 5, 0, S("abcde"));
+TEST_CONSTEXPR_CXX20 bool test17() {
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 20, 1, S("abcd"));
+  test(S("abcde"), 4, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 5, 0, S(""), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S(""), 0, 1, S("abcde"));
+  test(S("abcde"), 5, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 5, 0, S("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("12345"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, 0, S("12345"), 0, 2, S("abcde12"));
+  test(S("abcde"), 5, 0, S("12345"), 0, 4, S("abcde1234"));
+  test(S("abcde"), 5, 0, S("12345"), 0, 5, S("abcde12345"));
+  test(S("abcde"), 5, 0, S("12345"), 0, 6, S("abcde12345"));
+  test(S("abcde"), 5, 0, S("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("12345"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, 0, S("12345"), 1, 2, S("abcde23"));
+  test(S("abcde"), 5, 0, S("12345"), 1, 3, S("abcde234"));
+  test(S("abcde"), 5, 0, S("12345"), 1, 4, S("abcde2345"));
+  test(S("abcde"), 5, 0, S("12345"), 1, 5, S("abcde2345"));
+  test(S("abcde"), 5, 0, S("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("12345"), 2, 1, S("abcde3"));
+  test(S("abcde"), 5, 0, S("12345"), 2, 2, S("abcde34"));
+  test(S("abcde"), 5, 0, S("12345"), 2, 3, S("abcde345"));
+  test(S("abcde"), 5, 0, S("12345"), 2, 4, S("abcde345"));
+  test(S("abcde"), 5, 0, S("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("12345"), 4, 1, S("abcde5"));
+  test(S("abcde"), 5, 0, S("12345"), 4, 2, S("abcde5"));
+  test(S("abcde"), 5, 0, S("12345"), 5, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 5, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 5, 0, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("1234567890"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, 0, S("1234567890"), 0, 5, S("abcde12345"));
+  test(S("abcde"), 5, 0, S("1234567890"), 0, 9, S("abcde123456789"));
+  test(S("abcde"), 5, 0, S("1234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, S("1234567890"), 0, 11, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("1234567890"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, 0, S("1234567890"), 1, 4, S("abcde2345"));
+  test(S("abcde"), 5, 0, S("1234567890"), 1, 8, S("abcde23456789"));
+  test(S("abcde"), 5, 0, S("1234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcde"), 5, 0, S("1234567890"), 1, 10, S("abcde234567890"));
+  test(S("abcde"), 5, 0, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("1234567890"), 5, 1, S("abcde6"));
+  test(S("abcde"), 5, 0, S("1234567890"), 5, 2, S("abcde67"));
+  test(S("abcde"), 5, 0, S("1234567890"), 5, 4, S("abcde6789"));
+  test(S("abcde"), 5, 0, S("1234567890"), 5, 5, S("abcde67890"));
+  test(S("abcde"), 5, 0, S("1234567890"), 5, 6, S("abcde67890"));
+  test(S("abcde"), 5, 0, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("1234567890"), 9, 1, S("abcde0"));
+  test(S("abcde"), 5, 0, S("1234567890"), 9, 2, S("abcde0"));
+  test(S("abcde"), 5, 0, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 5, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 10, 1, S("abcde1"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 10, 5, S("abcde12345"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 10, 9, S("abcde123456789"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 10, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 10, 11, S("abcde1234567890"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 19, 1, S("abcde0"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 19, 2, S("abcde0"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 5, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 5, 1, S(""), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S(""), 0, 1, S("abcde"));
+  test(S("abcde"), 5, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 5, 1, S("12345"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("12345"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, 1, S("12345"), 0, 2, S("abcde12"));
+  test(S("abcde"), 5, 1, S("12345"), 0, 4, S("abcde1234"));
+  test(S("abcde"), 5, 1, S("12345"), 0, 5, S("abcde12345"));
+  test(S("abcde"), 5, 1, S("12345"), 0, 6, S("abcde12345"));
+  test(S("abcde"), 5, 1, S("12345"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("12345"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, 1, S("12345"), 1, 2, S("abcde23"));
+  test(S("abcde"), 5, 1, S("12345"), 1, 3, S("abcde234"));
+  test(S("abcde"), 5, 1, S("12345"), 1, 4, S("abcde2345"));
+  test(S("abcde"), 5, 1, S("12345"), 1, 5, S("abcde2345"));
+  test(S("abcde"), 5, 1, S("12345"), 2, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("12345"), 2, 1, S("abcde3"));
+  test(S("abcde"), 5, 1, S("12345"), 2, 2, S("abcde34"));
+  test(S("abcde"), 5, 1, S("12345"), 2, 3, S("abcde345"));
+  test(S("abcde"), 5, 1, S("12345"), 2, 4, S("abcde345"));
+  test(S("abcde"), 5, 1, S("12345"), 4, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("12345"), 4, 1, S("abcde5"));
+  test(S("abcde"), 5, 1, S("12345"), 4, 2, S("abcde5"));
+  test(S("abcde"), 5, 1, S("12345"), 5, 0, S("abcde"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test18()
-{
-    test(S("abcde"), 5, 1, S("12345"), 5, 1, S("abcde"));
-    test(S("abcde"), 5, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 5, 1, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("1234567890"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, 1, S("1234567890"), 0, 5, S("abcde12345"));
-    test(S("abcde"), 5, 1, S("1234567890"), 0, 9, S("abcde123456789"));
-    test(S("abcde"), 5, 1, S("1234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 1, S("1234567890"), 0, 11, S("abcde1234567890"));
-    test(S("abcde"), 5, 1, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("1234567890"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, 1, S("1234567890"), 1, 4, S("abcde2345"));
-    test(S("abcde"), 5, 1, S("1234567890"), 1, 8, S("abcde23456789"));
-    test(S("abcde"), 5, 1, S("1234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcde"), 5, 1, S("1234567890"), 1, 10, S("abcde234567890"));
-    test(S("abcde"), 5, 1, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("1234567890"), 5, 1, S("abcde6"));
-    test(S("abcde"), 5, 1, S("1234567890"), 5, 2, S("abcde67"));
-    test(S("abcde"), 5, 1, S("1234567890"), 5, 4, S("abcde6789"));
-    test(S("abcde"), 5, 1, S("1234567890"), 5, 5, S("abcde67890"));
-    test(S("abcde"), 5, 1, S("1234567890"), 5, 6, S("abcde67890"));
-    test(S("abcde"), 5, 1, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("1234567890"), 9, 1, S("abcde0"));
-    test(S("abcde"), 5, 1, S("1234567890"), 9, 2, S("abcde0"));
-    test(S("abcde"), 5, 1, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcde"), 5, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 0, 1, S("abcde1"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 1, 1, S("abcde2"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 10, 1, S("abcde1"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 10, 5, S("abcde12345"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 10, 9, S("abcde123456789"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 10, 10, S("abcde1234567890"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 10, 11, S("abcde1234567890"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 19, 1, S("abcde0"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 19, 2, S("abcde0"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcde"), 5, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S(""), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S(""), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 0, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 0, 4, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 0, 5, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 0, 6, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 1, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 1, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 1, 3, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 1, 4, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 1, 5, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 2, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 2, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 2, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 2, 3, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 2, 4, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 4, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 4, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 4, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 5, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 5, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 0, 5, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 0, 9, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 0, 10, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 0, 11, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 1, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 1, 4, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 1, 8, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 1, 9, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 1, 10, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 5, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 5, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 5, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 5, 4, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 5, 5, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 5, 6, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 9, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 9, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 9, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 10, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 10, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("1234567890"), 11, 0, S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test18() {
+  test(S("abcde"), 5, 1, S("12345"), 5, 1, S("abcde"));
+  test(S("abcde"), 5, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 5, 1, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("1234567890"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, 1, S("1234567890"), 0, 5, S("abcde12345"));
+  test(S("abcde"), 5, 1, S("1234567890"), 0, 9, S("abcde123456789"));
+  test(S("abcde"), 5, 1, S("1234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 1, S("1234567890"), 0, 11, S("abcde1234567890"));
+  test(S("abcde"), 5, 1, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("1234567890"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, 1, S("1234567890"), 1, 4, S("abcde2345"));
+  test(S("abcde"), 5, 1, S("1234567890"), 1, 8, S("abcde23456789"));
+  test(S("abcde"), 5, 1, S("1234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcde"), 5, 1, S("1234567890"), 1, 10, S("abcde234567890"));
+  test(S("abcde"), 5, 1, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("1234567890"), 5, 1, S("abcde6"));
+  test(S("abcde"), 5, 1, S("1234567890"), 5, 2, S("abcde67"));
+  test(S("abcde"), 5, 1, S("1234567890"), 5, 4, S("abcde6789"));
+  test(S("abcde"), 5, 1, S("1234567890"), 5, 5, S("abcde67890"));
+  test(S("abcde"), 5, 1, S("1234567890"), 5, 6, S("abcde67890"));
+  test(S("abcde"), 5, 1, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("1234567890"), 9, 1, S("abcde0"));
+  test(S("abcde"), 5, 1, S("1234567890"), 9, 2, S("abcde0"));
+  test(S("abcde"), 5, 1, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcde"), 5, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 0, 1, S("abcde1"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 1, 1, S("abcde2"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 10, 1, S("abcde1"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 10, 5, S("abcde12345"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 10, 9, S("abcde123456789"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 10, 10, S("abcde1234567890"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 10, 11, S("abcde1234567890"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 19, 1, S("abcde0"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 19, 2, S("abcde0"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcde"), 5, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S(""), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S(""), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 0, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 0, 4, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 0, 5, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 0, 6, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 1, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 1, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 1, 3, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 1, 4, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 1, 5, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 2, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 2, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 2, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 2, 3, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 2, 4, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 4, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 4, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 4, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 5, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 5, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 0, 5, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 0, 9, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 0, 10, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 0, 11, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 1, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 1, 4, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 1, 8, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 1, 9, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 1, 10, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 5, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 5, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 5, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 5, 4, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 5, 5, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 5, 6, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 9, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 9, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 9, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 10, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 10, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("1234567890"), 11, 0, S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test19()
-{
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S("abcde"), 6, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 0, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 0, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 0, 2, S("12abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 0, 4, S("1234abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 0, 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 0, 6, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 1, 1, S("2abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 1, 2, S("23abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 1, 3, S("234abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 1, 4, S("2345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 1, 5, S("2345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 2, 1, S("3abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 2, 2, S("34abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 2, 3, S("345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 2, 4, S("345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 4, 1, S("5abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 4, 2, S("5abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 0, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 0, 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 0, 9, S("123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 0, 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 0, 11, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 1, 1, S("2abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 1, 4, S("2345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 1, 8, S("23456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 1, 9, S("234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 1, 10, S("234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 5, 1, S("6abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 5, 2, S("67abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 5, 4, S("6789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 5, 5, S("67890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 5, 6, S("67890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 9, 1, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 9, 2, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 0, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 0, 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 1, 1, S("2abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 1, 9, S("234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 1, 18, S("234567890123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 10, 1, S("1abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 10, 5, S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 10, 9, S("123456789abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 10, 10, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 10, 11, S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 19, 1, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 19, 2, S("0abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 1, S(""), 0, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S(""), 0, 1, S("bcdefghij"));
+TEST_CONSTEXPR_CXX20 bool test19() {
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S("abcde"), 6, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 0, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 0, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 0, 2, S("12abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 0, 4, S("1234abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 0, 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 0, 6, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 1, 1, S("2abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 1, 2, S("23abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 1, 3, S("234abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 1, 4, S("2345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 1, 5, S("2345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 2, 1, S("3abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 2, 2, S("34abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 2, 3, S("345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 2, 4, S("345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 4, 1, S("5abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 4, 2, S("5abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 0, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 0, 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 0, 9, S("123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 0, 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 0, 11, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 1, 1, S("2abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 1, 4, S("2345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 1, 8, S("23456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 1, 9, S("234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 1, 10, S("234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 5, 1, S("6abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 5, 2, S("67abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 5, 4, S("6789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 5, 5, S("67890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 5, 6, S("67890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 9, 1, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 9, 2, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 0, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 0, 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 1, 1, S("2abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 1, 9, S("234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 1, 18, S("234567890123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 10, 1, S("1abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 10, 5, S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 10, 9, S("123456789abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 10, 10, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 10, 11, S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 19, 1, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 19, 2, S("0abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 1, S(""), 0, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S(""), 0, 1, S("bcdefghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test20()
-{
-    test(S("abcdefghij"), 0, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 0, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 0, 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 0, 2, S("12bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 0, 4, S("1234bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 0, 5, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 0, 6, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 1, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 1, 1, S("2bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 1, 2, S("23bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 1, 3, S("234bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 1, 4, S("2345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 1, 5, S("2345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 2, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 2, 1, S("3bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 2, 2, S("34bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 2, 3, S("345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 2, 4, S("345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 4, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 4, 1, S("5bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 4, 2, S("5bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 5, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 5, 1, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 0, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 0, 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 0, 5, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 0, 9, S("123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 0, 10, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 0, 11, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 1, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 1, 1, S("2bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 1, 4, S("2345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 1, 8, S("23456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 1, 9, S("234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 1, 10, S("234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 5, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 5, 1, S("6bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 5, 2, S("67bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 5, 4, S("6789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 5, 5, S("67890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 5, 6, S("67890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 9, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 9, 1, S("0bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 9, 2, S("0bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 10, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 10, 1, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 0, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 0, 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 0, 10, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 0, 19, S("1234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 0, 20, S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 0, 21, S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 1, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 1, 1, S("2bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 1, 9, S("234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 1, 18, S("234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 1, 19, S("2345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 1, 20, S("2345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 10, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 10, 1, S("1bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 10, 5, S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 10, 9, S("123456789bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 10, 10, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 10, 11, S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 19, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 19, 1, S("0bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 19, 2, S("0bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 20, 0, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 20, 1, S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 5, S(""), 0, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S(""), 0, 1, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 0, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 0, 1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 0, 2, S("12fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 0, 4, S("1234fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 0, 5, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 0, 6, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 1, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 1, 1, S("2fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 1, 2, S("23fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 1, 3, S("234fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 1, 4, S("2345fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 1, 5, S("2345fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 2, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 2, 1, S("3fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 2, 2, S("34fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 2, 3, S("345fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 2, 4, S("345fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 4, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 4, 1, S("5fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 4, 2, S("5fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 5, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 5, 1, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 0, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 0, 1, S("1fghij"));
+TEST_CONSTEXPR_CXX20 bool test20() {
+  test(S("abcdefghij"), 0, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 0, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 0, 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 0, 2, S("12bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 0, 4, S("1234bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 0, 5, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 0, 6, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 1, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 1, 1, S("2bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 1, 2, S("23bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 1, 3, S("234bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 1, 4, S("2345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 1, 5, S("2345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 2, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 2, 1, S("3bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 2, 2, S("34bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 2, 3, S("345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 2, 4, S("345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 4, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 4, 1, S("5bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 4, 2, S("5bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 5, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 5, 1, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 0, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 0, 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 0, 5, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 0, 9, S("123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 0, 10, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 0, 11, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 1, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 1, 1, S("2bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 1, 4, S("2345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 1, 8, S("23456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 1, 9, S("234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 1, 10, S("234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 5, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 5, 1, S("6bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 5, 2, S("67bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 5, 4, S("6789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 5, 5, S("67890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 5, 6, S("67890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 9, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 9, 1, S("0bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 9, 2, S("0bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 10, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 10, 1, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 0, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 0, 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 0, 10, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 0, 19, S("1234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 0, 20, S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 0, 21, S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 1, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 1, 1, S("2bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 1, 9, S("234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 1, 18, S("234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 1, 19, S("2345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 1, 20, S("2345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 10, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 10, 1, S("1bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 10, 5, S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 10, 9, S("123456789bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 10, 10, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 10, 11, S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 19, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 19, 1, S("0bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 19, 2, S("0bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 20, 0, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 20, 1, S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 5, S(""), 0, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S(""), 0, 1, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 0, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 0, 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 0, 2, S("12fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 0, 4, S("1234fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 0, 5, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 0, 6, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 1, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 1, 1, S("2fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 1, 2, S("23fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 1, 3, S("234fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 1, 4, S("2345fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 1, 5, S("2345fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 2, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 2, 1, S("3fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 2, 2, S("34fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 2, 3, S("345fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 2, 4, S("345fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 4, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 4, 1, S("5fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 4, 2, S("5fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 5, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 5, 1, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 0, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 0, 1, S("1fghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test21()
-{
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 0, 5, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 0, 9, S("123456789fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 0, 10, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 0, 11, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 1, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 1, 1, S("2fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 1, 4, S("2345fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 1, 8, S("23456789fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 1, 9, S("234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 1, 10, S("234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 5, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 5, 1, S("6fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 5, 2, S("67fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 5, 4, S("6789fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 5, 5, S("67890fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 5, 6, S("67890fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 9, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 9, 1, S("0fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 9, 2, S("0fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 10, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 10, 1, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 0, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 0, 1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 0, 10, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 0, 19, S("1234567890123456789fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 0, 20, S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 0, 21, S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 1, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 1, 1, S("2fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 1, 9, S("234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 1, 18, S("234567890123456789fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 1, 19, S("2345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 1, 20, S("2345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 10, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 10, 1, S("1fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 10, 5, S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 10, 9, S("123456789fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 10, 10, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 10, 11, S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 19, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 19, 1, S("0fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 19, 2, S("0fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 20, 0, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 20, 1, S("fghij"));
-    test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 9, S(""), 0, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S(""), 0, 1, S("j"));
-    test(S("abcdefghij"), 0, 9, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 0, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 0, 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 0, 2, S("12j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 0, 4, S("1234j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 0, 5, S("12345j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 0, 6, S("12345j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 1, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 1, 1, S("2j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 1, 2, S("23j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 1, 3, S("234j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 1, 4, S("2345j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 1, 5, S("2345j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 2, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 2, 1, S("3j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 2, 2, S("34j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 2, 3, S("345j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 2, 4, S("345j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 4, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 4, 1, S("5j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 4, 2, S("5j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 5, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 5, 1, S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 0, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 0, 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 0, 5, S("12345j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 0, 9, S("123456789j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 0, 10, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 0, 11, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 1, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 1, 1, S("2j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 1, 4, S("2345j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 1, 8, S("23456789j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 1, 9, S("234567890j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 1, 10, S("234567890j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 5, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 5, 1, S("6j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 5, 2, S("67j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 5, 4, S("6789j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 5, 5, S("67890j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 5, 6, S("67890j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 9, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 9, 1, S("0j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 9, 2, S("0j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 10, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 10, 1, S("j"));
-    test(S("abcdefghij"), 0, 9, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 0, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 0, 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 0, 10, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 0, 19, S("1234567890123456789j"));
+TEST_CONSTEXPR_CXX20 bool test21() {
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 0, 5, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 0, 9, S("123456789fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 0, 10, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 0, 11, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 1, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 1, 1, S("2fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 1, 4, S("2345fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 1, 8, S("23456789fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 1, 9, S("234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 1, 10, S("234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 5, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 5, 1, S("6fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 5, 2, S("67fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 5, 4, S("6789fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 5, 5, S("67890fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 5, 6, S("67890fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 9, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 9, 1, S("0fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 9, 2, S("0fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 10, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 10, 1, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 0, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 0, 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 0, 10, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 0, 19, S("1234567890123456789fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 0, 20, S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 0, 21, S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 1, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 1, 1, S("2fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 1, 9, S("234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 1, 18, S("234567890123456789fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 1, 19, S("2345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 1, 20, S("2345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 10, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 10, 1, S("1fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 10, 5, S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 10, 9, S("123456789fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 10, 10, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 10, 11, S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 19, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 19, 1, S("0fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 19, 2, S("0fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 20, 0, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 20, 1, S("fghij"));
+  test(S("abcdefghij"), 0, 5, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 9, S(""), 0, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S(""), 0, 1, S("j"));
+  test(S("abcdefghij"), 0, 9, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 0, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 0, 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 0, 2, S("12j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 0, 4, S("1234j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 0, 5, S("12345j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 0, 6, S("12345j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 1, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 1, 1, S("2j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 1, 2, S("23j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 1, 3, S("234j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 1, 4, S("2345j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 1, 5, S("2345j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 2, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 2, 1, S("3j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 2, 2, S("34j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 2, 3, S("345j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 2, 4, S("345j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 4, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 4, 1, S("5j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 4, 2, S("5j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 5, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 5, 1, S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 0, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 0, 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 0, 5, S("12345j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 0, 9, S("123456789j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 0, 10, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 0, 11, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 1, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 1, 1, S("2j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 1, 4, S("2345j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 1, 8, S("23456789j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 1, 9, S("234567890j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 1, 10, S("234567890j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 5, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 5, 1, S("6j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 5, 2, S("67j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 5, 4, S("6789j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 5, 5, S("67890j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 5, 6, S("67890j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 9, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 9, 1, S("0j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 9, 2, S("0j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 10, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 10, 1, S("j"));
+  test(S("abcdefghij"), 0, 9, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 0, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 0, 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 0, 10, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 0, 19, S("1234567890123456789j"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test22()
-{
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 0, 20, S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 0, 21, S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 1, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 1, 1, S("2j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 1, 9, S("234567890j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 1, 18, S("234567890123456789j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 1, 19, S("2345678901234567890j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 1, 20, S("2345678901234567890j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 10, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 10, 1, S("1j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 10, 5, S("12345j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 10, 9, S("123456789j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 10, 10, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 10, 11, S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 19, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 19, 1, S("0j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 19, 2, S("0j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 20, 0, S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 20, 1, S("j"));
-    test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 10, S(""), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S(""), 0, 1, S(""));
-    test(S("abcdefghij"), 0, 10, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("12345"), 0, 1, S("1"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 0, 2, S("12"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 0, 4, S("1234"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 0, 5, S("12345"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 0, 6, S("12345"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 1, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("12345"), 1, 1, S("2"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 1, 2, S("23"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 1, 3, S("234"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 1, 4, S("2345"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 1, 5, S("2345"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 2, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("12345"), 2, 1, S("3"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 2, 2, S("34"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 2, 3, S("345"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 2, 4, S("345"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 4, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("12345"), 4, 1, S("5"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 4, 2, S("5"));
-    test(S("abcdefghij"), 0, 10, S("12345"), 5, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("12345"), 5, 1, S(""));
-    test(S("abcdefghij"), 0, 10, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 0, 1, S("1"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 0, 5, S("12345"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 0, 9, S("123456789"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 0, 11, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 1, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 1, 1, S("2"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 1, 4, S("2345"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 1, 8, S("23456789"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 1, 10, S("234567890"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 5, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 5, 1, S("6"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 5, 2, S("67"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 5, 4, S("6789"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 5, 5, S("67890"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 5, 6, S("67890"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 9, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 9, 1, S("0"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 9, 2, S("0"));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 10, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 10, 1, S(""));
-    test(S("abcdefghij"), 0, 10, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 0, 1, S("1"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 1, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 1, 1, S("2"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 10, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 10, 1, S("1"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 10, 5, S("12345"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 10, 9, S("123456789"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 19, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 19, 1, S("0"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 19, 2, S("0"));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 20, 0, S(""));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 20, 1, S(""));
-    test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 11, S(""), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S(""), 0, 1, S(""));
-    test(S("abcdefghij"), 0, 11, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("12345"), 0, 1, S("1"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 0, 2, S("12"));
+TEST_CONSTEXPR_CXX20 bool test22() {
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 0, 20, S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 0, 21, S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 1, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 1, 1, S("2j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 1, 9, S("234567890j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 1, 18, S("234567890123456789j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 1, 19, S("2345678901234567890j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 1, 20, S("2345678901234567890j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 10, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 10, 1, S("1j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 10, 5, S("12345j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 10, 9, S("123456789j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 10, 10, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 10, 11, S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 19, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 19, 1, S("0j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 19, 2, S("0j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 20, 0, S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 20, 1, S("j"));
+  test(S("abcdefghij"), 0, 9, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 10, S(""), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S(""), 0, 1, S(""));
+  test(S("abcdefghij"), 0, 10, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("12345"), 0, 1, S("1"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 0, 2, S("12"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 0, 4, S("1234"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 0, 5, S("12345"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 0, 6, S("12345"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 1, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("12345"), 1, 1, S("2"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 1, 2, S("23"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 1, 3, S("234"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 1, 4, S("2345"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 1, 5, S("2345"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 2, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("12345"), 2, 1, S("3"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 2, 2, S("34"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 2, 3, S("345"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 2, 4, S("345"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 4, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("12345"), 4, 1, S("5"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 4, 2, S("5"));
+  test(S("abcdefghij"), 0, 10, S("12345"), 5, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("12345"), 5, 1, S(""));
+  test(S("abcdefghij"), 0, 10, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 0, 1, S("1"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 0, 5, S("12345"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 0, 9, S("123456789"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 0, 11, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 1, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 1, 1, S("2"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 1, 4, S("2345"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 1, 8, S("23456789"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 1, 10, S("234567890"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 5, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 5, 1, S("6"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 5, 2, S("67"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 5, 4, S("6789"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 5, 5, S("67890"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 5, 6, S("67890"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 9, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 9, 1, S("0"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 9, 2, S("0"));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 10, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 10, 1, S(""));
+  test(S("abcdefghij"), 0, 10, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 0, 1, S("1"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 1, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 1, 1, S("2"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 10, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 10, 1, S("1"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 10, 5, S("12345"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 10, 9, S("123456789"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 19, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 19, 1, S("0"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 19, 2, S("0"));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 20, 0, S(""));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 20, 1, S(""));
+  test(S("abcdefghij"), 0, 10, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 11, S(""), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S(""), 0, 1, S(""));
+  test(S("abcdefghij"), 0, 11, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("12345"), 0, 1, S("1"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 0, 2, S("12"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test23()
-{
-    test(S("abcdefghij"), 0, 11, S("12345"), 0, 4, S("1234"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 0, 5, S("12345"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 0, 6, S("12345"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 1, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("12345"), 1, 1, S("2"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 1, 2, S("23"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 1, 3, S("234"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 1, 4, S("2345"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 1, 5, S("2345"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 2, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("12345"), 2, 1, S("3"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 2, 2, S("34"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 2, 3, S("345"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 2, 4, S("345"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 4, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("12345"), 4, 1, S("5"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 4, 2, S("5"));
-    test(S("abcdefghij"), 0, 11, S("12345"), 5, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("12345"), 5, 1, S(""));
-    test(S("abcdefghij"), 0, 11, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 0, 1, S("1"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 0, 5, S("12345"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 0, 9, S("123456789"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 0, 11, S("1234567890"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 1, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 1, 1, S("2"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 1, 4, S("2345"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 1, 8, S("23456789"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 1, 10, S("234567890"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 5, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 5, 1, S("6"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 5, 2, S("67"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 5, 4, S("6789"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 5, 5, S("67890"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 5, 6, S("67890"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 9, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 9, 1, S("0"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 9, 2, S("0"));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 10, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 10, 1, S(""));
-    test(S("abcdefghij"), 0, 11, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 0, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 0, 1, S("1"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 1, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 1, 1, S("2"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 10, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 10, 1, S("1"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 10, 5, S("12345"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 10, 9, S("123456789"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 19, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 19, 1, S("0"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 19, 2, S("0"));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 20, 0, S(""));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 20, 1, S(""));
-    test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 0, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 0, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 0, 2, S("a12bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 0, 4, S("a1234bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 0, 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 0, 6, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 1, 1, S("a2bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 1, 2, S("a23bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 1, 3, S("a234bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 1, 4, S("a2345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 1, 5, S("a2345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 2, 1, S("a3bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 2, 2, S("a34bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 2, 3, S("a345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 2, 4, S("a345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 4, 1, S("a5bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 4, 2, S("a5bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 0, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 0, 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 0, 9, S("a123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 0, 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 0, 11, S("a1234567890bcdefghij"));
+TEST_CONSTEXPR_CXX20 bool test23() {
+  test(S("abcdefghij"), 0, 11, S("12345"), 0, 4, S("1234"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 0, 5, S("12345"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 0, 6, S("12345"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 1, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("12345"), 1, 1, S("2"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 1, 2, S("23"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 1, 3, S("234"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 1, 4, S("2345"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 1, 5, S("2345"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 2, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("12345"), 2, 1, S("3"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 2, 2, S("34"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 2, 3, S("345"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 2, 4, S("345"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 4, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("12345"), 4, 1, S("5"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 4, 2, S("5"));
+  test(S("abcdefghij"), 0, 11, S("12345"), 5, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("12345"), 5, 1, S(""));
+  test(S("abcdefghij"), 0, 11, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 0, 1, S("1"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 0, 5, S("12345"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 0, 9, S("123456789"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 0, 11, S("1234567890"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 1, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 1, 1, S("2"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 1, 4, S("2345"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 1, 8, S("23456789"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 1, 10, S("234567890"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 5, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 5, 1, S("6"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 5, 2, S("67"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 5, 4, S("6789"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 5, 5, S("67890"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 5, 6, S("67890"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 9, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 9, 1, S("0"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 9, 2, S("0"));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 10, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 10, 1, S(""));
+  test(S("abcdefghij"), 0, 11, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 0, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 0, 1, S("1"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 1, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 1, 1, S("2"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 10, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 10, 1, S("1"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 10, 5, S("12345"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 10, 9, S("123456789"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 19, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 19, 1, S("0"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 19, 2, S("0"));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 20, 0, S(""));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 20, 1, S(""));
+  test(S("abcdefghij"), 0, 11, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 0, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 0, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 0, 2, S("a12bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 0, 4, S("a1234bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 0, 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 0, 6, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 1, 1, S("a2bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 1, 2, S("a23bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 1, 3, S("a234bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 1, 4, S("a2345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 1, 5, S("a2345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 2, 1, S("a3bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 2, 2, S("a34bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 2, 3, S("a345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 2, 4, S("a345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 4, 1, S("a5bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 4, 2, S("a5bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 0, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 0, 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 0, 9, S("a123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 0, 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 0, 11, S("a1234567890bcdefghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test24()
-{
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 1, 1, S("a2bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 1, 4, S("a2345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 1, 8, S("a23456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 1, 9, S("a234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 1, 10, S("a234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 5, 1, S("a6bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 5, 2, S("a67bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 5, 4, S("a6789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 5, 5, S("a67890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 5, 6, S("a67890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 9, 1, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 9, 2, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 0, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 0, 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 1, 1, S("a2bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 1, 9, S("a234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 10, 1, S("a1bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 10, 5, S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 10, 9, S("a123456789bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 10, 10, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 10, 11, S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 19, 1, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 19, 2, S("a0bcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 1, S(""), 0, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S(""), 0, 1, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 0, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 0, 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 0, 2, S("a12cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 0, 4, S("a1234cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 0, 5, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 0, 6, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 1, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 1, 1, S("a2cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 1, 2, S("a23cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 1, 3, S("a234cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 1, 4, S("a2345cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 1, 5, S("a2345cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 2, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 2, 1, S("a3cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 2, 2, S("a34cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 2, 3, S("a345cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 2, 4, S("a345cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 4, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 4, 1, S("a5cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 4, 2, S("a5cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 5, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 5, 1, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 0, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 0, 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 0, 5, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 0, 9, S("a123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 0, 10, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 0, 11, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 1, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 1, 1, S("a2cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 1, 4, S("a2345cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 1, 8, S("a23456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 1, 9, S("a234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 1, 10, S("a234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 5, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 5, 1, S("a6cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 5, 2, S("a67cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 5, 4, S("a6789cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 5, 5, S("a67890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 5, 6, S("a67890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 9, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 9, 1, S("a0cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 9, 2, S("a0cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 10, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 10, 1, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 0, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 0, 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 0, 10, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 0, 19, S("a1234567890123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 0, 20, S("a12345678901234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 0, 21, S("a12345678901234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 1, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 1, 1, S("a2cdefghij"));
+TEST_CONSTEXPR_CXX20 bool test24() {
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 1, 1, S("a2bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 1, 4, S("a2345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 1, 8, S("a23456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 1, 9, S("a234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 1, 10, S("a234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 5, 1, S("a6bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 5, 2, S("a67bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 5, 4, S("a6789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 5, 5, S("a67890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 5, 6, S("a67890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 9, 1, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 9, 2, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 0, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 0, 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 1, 1, S("a2bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 1, 9, S("a234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 10, 1, S("a1bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 10, 5, S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 10, 9, S("a123456789bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 10, 10, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 10, 11, S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 19, 1, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 19, 2, S("a0bcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 1, S(""), 0, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S(""), 0, 1, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 0, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 0, 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 0, 2, S("a12cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 0, 4, S("a1234cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 0, 5, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 0, 6, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 1, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 1, 1, S("a2cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 1, 2, S("a23cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 1, 3, S("a234cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 1, 4, S("a2345cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 1, 5, S("a2345cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 2, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 2, 1, S("a3cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 2, 2, S("a34cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 2, 3, S("a345cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 2, 4, S("a345cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 4, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 4, 1, S("a5cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 4, 2, S("a5cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 5, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 5, 1, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 0, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 0, 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 0, 5, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 0, 9, S("a123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 0, 10, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 0, 11, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 1, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 1, 1, S("a2cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 1, 4, S("a2345cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 1, 8, S("a23456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 1, 9, S("a234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 1, 10, S("a234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 5, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 5, 1, S("a6cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 5, 2, S("a67cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 5, 4, S("a6789cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 5, 5, S("a67890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 5, 6, S("a67890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 9, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 9, 1, S("a0cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 9, 2, S("a0cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 10, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 10, 1, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 0, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 0, 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 0, 10, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 0, 19, S("a1234567890123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 0, 20, S("a12345678901234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 0, 21, S("a12345678901234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 1, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 1, 1, S("a2cdefghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test25()
-{
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 1, 9, S("a234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 1, 18, S("a234567890123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 1, 19, S("a2345678901234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 1, 20, S("a2345678901234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 10, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 10, 1, S("a1cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 10, 5, S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 10, 9, S("a123456789cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 10, 10, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 10, 11, S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 19, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 19, 1, S("a0cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 19, 2, S("a0cdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 20, 0, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 20, 1, S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 4, S(""), 0, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S(""), 0, 1, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 0, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 0, 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 0, 2, S("a12fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 0, 4, S("a1234fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 0, 5, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 0, 6, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 1, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 1, 1, S("a2fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 1, 2, S("a23fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 1, 3, S("a234fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 1, 4, S("a2345fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 1, 5, S("a2345fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 2, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 2, 1, S("a3fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 2, 2, S("a34fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 2, 3, S("a345fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 2, 4, S("a345fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 4, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 4, 1, S("a5fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 4, 2, S("a5fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 5, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 5, 1, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 0, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 0, 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 0, 5, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 0, 9, S("a123456789fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 0, 10, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 0, 11, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 1, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 1, 1, S("a2fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 1, 4, S("a2345fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 1, 8, S("a23456789fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 1, 9, S("a234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 1, 10, S("a234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 5, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 5, 1, S("a6fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 5, 2, S("a67fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 5, 4, S("a6789fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 5, 5, S("a67890fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 5, 6, S("a67890fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 9, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 9, 1, S("a0fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 9, 2, S("a0fghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 10, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 10, 1, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 0, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 0, 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 0, 10, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 0, 19, S("a1234567890123456789fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 0, 20, S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 0, 21, S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 1, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 1, 1, S("a2fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 1, 9, S("a234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 1, 18, S("a234567890123456789fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 1, 19, S("a2345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 1, 20, S("a2345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 10, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 10, 1, S("a1fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 10, 5, S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 10, 9, S("a123456789fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 10, 10, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 10, 11, S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 19, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 19, 1, S("a0fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 19, 2, S("a0fghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 20, 0, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 20, 1, S("afghij"));
-    test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 8, S(""), 0, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S(""), 0, 1, S("aj"));
-    test(S("abcdefghij"), 1, 8, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 0, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 0, 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 0, 2, S("a12j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 0, 4, S("a1234j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 0, 5, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 0, 6, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 1, 0, S("aj"));
+TEST_CONSTEXPR_CXX20 bool test25() {
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 1, 9, S("a234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 1, 18, S("a234567890123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 1, 19, S("a2345678901234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 1, 20, S("a2345678901234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 10, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 10, 1, S("a1cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 10, 5, S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 10, 9, S("a123456789cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 10, 10, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 10, 11, S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 19, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 19, 1, S("a0cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 19, 2, S("a0cdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 20, 0, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 20, 1, S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 4, S(""), 0, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S(""), 0, 1, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 0, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 0, 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 0, 2, S("a12fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 0, 4, S("a1234fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 0, 5, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 0, 6, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 1, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 1, 1, S("a2fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 1, 2, S("a23fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 1, 3, S("a234fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 1, 4, S("a2345fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 1, 5, S("a2345fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 2, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 2, 1, S("a3fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 2, 2, S("a34fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 2, 3, S("a345fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 2, 4, S("a345fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 4, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 4, 1, S("a5fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 4, 2, S("a5fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 5, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 5, 1, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 0, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 0, 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 0, 5, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 0, 9, S("a123456789fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 0, 10, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 0, 11, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 1, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 1, 1, S("a2fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 1, 4, S("a2345fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 1, 8, S("a23456789fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 1, 9, S("a234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 1, 10, S("a234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 5, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 5, 1, S("a6fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 5, 2, S("a67fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 5, 4, S("a6789fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 5, 5, S("a67890fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 5, 6, S("a67890fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 9, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 9, 1, S("a0fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 9, 2, S("a0fghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 10, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 10, 1, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 0, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 0, 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 0, 10, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 0, 19, S("a1234567890123456789fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 0, 20, S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 0, 21, S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 1, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 1, 1, S("a2fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 1, 9, S("a234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 1, 18, S("a234567890123456789fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 1, 19, S("a2345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 1, 20, S("a2345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 10, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 10, 1, S("a1fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 10, 5, S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 10, 9, S("a123456789fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 10, 10, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 10, 11, S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 19, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 19, 1, S("a0fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 19, 2, S("a0fghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 20, 0, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 20, 1, S("afghij"));
+  test(S("abcdefghij"), 1, 4, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 8, S(""), 0, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S(""), 0, 1, S("aj"));
+  test(S("abcdefghij"), 1, 8, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 0, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 0, 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 0, 2, S("a12j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 0, 4, S("a1234j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 0, 5, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 0, 6, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 1, 0, S("aj"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test26()
-{
-    test(S("abcdefghij"), 1, 8, S("12345"), 1, 1, S("a2j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 1, 2, S("a23j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 1, 3, S("a234j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 1, 4, S("a2345j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 1, 5, S("a2345j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 2, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 2, 1, S("a3j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 2, 2, S("a34j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 2, 3, S("a345j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 2, 4, S("a345j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 4, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 4, 1, S("a5j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 4, 2, S("a5j"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 5, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 5, 1, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 0, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 0, 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 0, 5, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 0, 9, S("a123456789j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 0, 10, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 0, 11, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 1, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 1, 1, S("a2j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 1, 4, S("a2345j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 1, 8, S("a23456789j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 1, 9, S("a234567890j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 1, 10, S("a234567890j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 5, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 5, 1, S("a6j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 5, 2, S("a67j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 5, 4, S("a6789j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 5, 5, S("a67890j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 5, 6, S("a67890j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 9, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 9, 1, S("a0j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 9, 2, S("a0j"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 10, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 10, 1, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 0, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 0, 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 0, 10, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 0, 19, S("a1234567890123456789j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 0, 20, S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 0, 21, S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 1, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 1, 1, S("a2j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 1, 9, S("a234567890j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 1, 18, S("a234567890123456789j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 1, 19, S("a2345678901234567890j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 1, 20, S("a2345678901234567890j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 10, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 10, 1, S("a1j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 10, 5, S("a12345j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 10, 9, S("a123456789j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 10, 10, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 10, 11, S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 19, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 19, 1, S("a0j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 19, 2, S("a0j"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 20, 0, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 20, 1, S("aj"));
-    test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 9, S(""), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S(""), 0, 1, S("a"));
-    test(S("abcdefghij"), 1, 9, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 0, 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 0, 2, S("a12"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 0, 4, S("a1234"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 0, 5, S("a12345"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 0, 6, S("a12345"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 1, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 1, 1, S("a2"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 1, 2, S("a23"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 1, 3, S("a234"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 1, 4, S("a2345"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 1, 5, S("a2345"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 2, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 2, 1, S("a3"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 2, 2, S("a34"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 2, 3, S("a345"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 2, 4, S("a345"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 4, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 4, 1, S("a5"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 4, 2, S("a5"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 5, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 5, 1, S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 0, 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 0, 5, S("a12345"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 0, 9, S("a123456789"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 0, 11, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 1, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 1, 1, S("a2"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 1, 4, S("a2345"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 1, 8, S("a23456789"));
+TEST_CONSTEXPR_CXX20 bool test26() {
+  test(S("abcdefghij"), 1, 8, S("12345"), 1, 1, S("a2j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 1, 2, S("a23j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 1, 3, S("a234j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 1, 4, S("a2345j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 1, 5, S("a2345j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 2, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 2, 1, S("a3j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 2, 2, S("a34j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 2, 3, S("a345j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 2, 4, S("a345j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 4, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 4, 1, S("a5j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 4, 2, S("a5j"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 5, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 5, 1, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 0, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 0, 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 0, 5, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 0, 9, S("a123456789j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 0, 10, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 0, 11, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 1, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 1, 1, S("a2j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 1, 4, S("a2345j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 1, 8, S("a23456789j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 1, 9, S("a234567890j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 1, 10, S("a234567890j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 5, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 5, 1, S("a6j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 5, 2, S("a67j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 5, 4, S("a6789j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 5, 5, S("a67890j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 5, 6, S("a67890j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 9, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 9, 1, S("a0j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 9, 2, S("a0j"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 10, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 10, 1, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 0, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 0, 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 0, 10, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 0, 19, S("a1234567890123456789j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 0, 20, S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 0, 21, S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 1, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 1, 1, S("a2j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 1, 9, S("a234567890j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 1, 18, S("a234567890123456789j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 1, 19, S("a2345678901234567890j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 1, 20, S("a2345678901234567890j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 10, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 10, 1, S("a1j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 10, 5, S("a12345j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 10, 9, S("a123456789j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 10, 10, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 10, 11, S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 19, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 19, 1, S("a0j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 19, 2, S("a0j"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 20, 0, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 20, 1, S("aj"));
+  test(S("abcdefghij"), 1, 8, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 9, S(""), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S(""), 0, 1, S("a"));
+  test(S("abcdefghij"), 1, 9, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 0, 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 0, 2, S("a12"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 0, 4, S("a1234"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 0, 5, S("a12345"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 0, 6, S("a12345"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 1, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 1, 1, S("a2"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 1, 2, S("a23"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 1, 3, S("a234"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 1, 4, S("a2345"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 1, 5, S("a2345"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 2, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 2, 1, S("a3"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 2, 2, S("a34"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 2, 3, S("a345"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 2, 4, S("a345"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 4, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 4, 1, S("a5"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 4, 2, S("a5"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 5, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 5, 1, S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 0, 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 0, 5, S("a12345"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 0, 9, S("a123456789"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 0, 11, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 1, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 1, 1, S("a2"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 1, 4, S("a2345"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 1, 8, S("a23456789"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test27()
-{
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 1, 10, S("a234567890"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 5, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 5, 1, S("a6"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 5, 2, S("a67"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 5, 4, S("a6789"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 5, 5, S("a67890"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 5, 6, S("a67890"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 9, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 9, 1, S("a0"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 9, 2, S("a0"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 10, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 10, 1, S("a"));
-    test(S("abcdefghij"), 1, 9, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 0, 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 0, 19, S("a1234567890123456789"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 0, 20, S("a12345678901234567890"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 0, 21, S("a12345678901234567890"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 1, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 1, 1, S("a2"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 1, 18, S("a234567890123456789"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 1, 19, S("a2345678901234567890"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 1, 20, S("a2345678901234567890"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 10, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 10, 1, S("a1"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 10, 5, S("a12345"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 10, 9, S("a123456789"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 10, 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 10, 11, S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 19, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 19, 1, S("a0"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 19, 2, S("a0"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 20, 0, S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 20, 1, S("a"));
-    test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 10, S(""), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S(""), 0, 1, S("a"));
-    test(S("abcdefghij"), 1, 10, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 0, 1, S("a1"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 0, 2, S("a12"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 0, 4, S("a1234"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 0, 5, S("a12345"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 0, 6, S("a12345"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 1, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 1, 1, S("a2"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 1, 2, S("a23"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 1, 3, S("a234"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 1, 4, S("a2345"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 1, 5, S("a2345"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 2, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 2, 1, S("a3"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 2, 2, S("a34"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 2, 3, S("a345"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 2, 4, S("a345"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 4, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 4, 1, S("a5"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 4, 2, S("a5"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 5, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 5, 1, S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 0, 1, S("a1"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 0, 5, S("a12345"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 0, 9, S("a123456789"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 0, 11, S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 1, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 1, 1, S("a2"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 1, 4, S("a2345"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 1, 8, S("a23456789"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 1, 10, S("a234567890"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 5, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 5, 1, S("a6"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 5, 2, S("a67"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 5, 4, S("a6789"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 5, 5, S("a67890"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 5, 6, S("a67890"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 9, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 9, 1, S("a0"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 9, 2, S("a0"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 10, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 10, 1, S("a"));
-    test(S("abcdefghij"), 1, 10, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 0, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 0, 1, S("a1"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 0, 19, S("a1234567890123456789"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 0, 20, S("a12345678901234567890"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 0, 21, S("a12345678901234567890"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 1, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 1, 1, S("a2"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 1, 18, S("a234567890123456789"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 1, 19, S("a2345678901234567890"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 1, 20, S("a2345678901234567890"));
+TEST_CONSTEXPR_CXX20 bool test27() {
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 1, 10, S("a234567890"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 5, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 5, 1, S("a6"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 5, 2, S("a67"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 5, 4, S("a6789"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 5, 5, S("a67890"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 5, 6, S("a67890"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 9, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 9, 1, S("a0"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 9, 2, S("a0"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 10, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 10, 1, S("a"));
+  test(S("abcdefghij"), 1, 9, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 0, 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 0, 19, S("a1234567890123456789"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 0, 20, S("a12345678901234567890"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 0, 21, S("a12345678901234567890"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 1, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 1, 1, S("a2"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 1, 18, S("a234567890123456789"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 1, 19, S("a2345678901234567890"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 1, 20, S("a2345678901234567890"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 10, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 10, 1, S("a1"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 10, 5, S("a12345"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 10, 9, S("a123456789"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 10, 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 10, 11, S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 19, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 19, 1, S("a0"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 19, 2, S("a0"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 20, 0, S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 20, 1, S("a"));
+  test(S("abcdefghij"), 1, 9, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 10, S(""), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S(""), 0, 1, S("a"));
+  test(S("abcdefghij"), 1, 10, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 0, 1, S("a1"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 0, 2, S("a12"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 0, 4, S("a1234"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 0, 5, S("a12345"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 0, 6, S("a12345"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 1, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 1, 1, S("a2"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 1, 2, S("a23"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 1, 3, S("a234"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 1, 4, S("a2345"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 1, 5, S("a2345"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 2, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 2, 1, S("a3"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 2, 2, S("a34"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 2, 3, S("a345"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 2, 4, S("a345"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 4, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 4, 1, S("a5"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 4, 2, S("a5"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 5, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 5, 1, S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 0, 1, S("a1"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 0, 5, S("a12345"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 0, 9, S("a123456789"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 0, 11, S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 1, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 1, 1, S("a2"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 1, 4, S("a2345"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 1, 8, S("a23456789"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 1, 10, S("a234567890"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 5, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 5, 1, S("a6"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 5, 2, S("a67"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 5, 4, S("a6789"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 5, 5, S("a67890"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 5, 6, S("a67890"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 9, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 9, 1, S("a0"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 9, 2, S("a0"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 10, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 10, 1, S("a"));
+  test(S("abcdefghij"), 1, 10, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 0, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 0, 1, S("a1"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 0, 19, S("a1234567890123456789"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 0, 20, S("a12345678901234567890"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 0, 21, S("a12345678901234567890"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 1, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 1, 1, S("a2"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 1, 18, S("a234567890123456789"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 1, 19, S("a2345678901234567890"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 1, 20, S("a2345678901234567890"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test28()
-{
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 10, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 10, 1, S("a1"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 10, 5, S("a12345"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 10, 9, S("a123456789"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 10, 10, S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 10, 11, S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 19, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 19, 1, S("a0"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 19, 2, S("a0"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 20, 0, S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 20, 1, S("a"));
-    test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 0, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 0, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 0, 2, S("abcde12fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 0, 4, S("abcde1234fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 0, 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 0, 6, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 1, 1, S("abcde2fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 1, 2, S("abcde23fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 1, 3, S("abcde234fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 1, 4, S("abcde2345fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 1, 5, S("abcde2345fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 2, 1, S("abcde3fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 2, 2, S("abcde34fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 2, 3, S("abcde345fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 2, 4, S("abcde345fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 4, 1, S("abcde5fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 4, 2, S("abcde5fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 0, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 0, 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 0, 9, S("abcde123456789fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 0, 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 0, 11, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 1, 1, S("abcde2fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 1, 4, S("abcde2345fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 1, 8, S("abcde23456789fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 1, 9, S("abcde234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 1, 10, S("abcde234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 5, 1, S("abcde6fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 5, 2, S("abcde67fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 5, 4, S("abcde6789fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 5, 5, S("abcde67890fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 5, 6, S("abcde67890fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 9, 1, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 9, 2, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 0, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 0, 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 1, 1, S("abcde2fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 1, 9, S("abcde234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 1, 18, S("abcde234567890123456789fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 10, 1, S("abcde1fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 10, 5, S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 10, 9, S("abcde123456789fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 10, 10, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 10, 11, S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 19, 1, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 19, 2, S("abcde0fghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 1, S(""), 0, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S(""), 0, 1, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 0, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 0, 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 0, 2, S("abcde12ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 0, 4, S("abcde1234ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 0, 5, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 0, 6, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 1, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 1, 1, S("abcde2ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 1, 2, S("abcde23ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 1, 3, S("abcde234ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 1, 4, S("abcde2345ghij"));
+TEST_CONSTEXPR_CXX20 bool test28() {
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 10, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 10, 1, S("a1"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 10, 5, S("a12345"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 10, 9, S("a123456789"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 10, 10, S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 10, 11, S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 19, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 19, 1, S("a0"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 19, 2, S("a0"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 20, 0, S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 20, 1, S("a"));
+  test(S("abcdefghij"), 1, 10, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 0, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 0, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 0, 2, S("abcde12fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 0, 4, S("abcde1234fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 0, 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 0, 6, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 1, 1, S("abcde2fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 1, 2, S("abcde23fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 1, 3, S("abcde234fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 1, 4, S("abcde2345fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 1, 5, S("abcde2345fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 2, 1, S("abcde3fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 2, 2, S("abcde34fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 2, 3, S("abcde345fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 2, 4, S("abcde345fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 4, 1, S("abcde5fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 4, 2, S("abcde5fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 0, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 0, 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 0, 9, S("abcde123456789fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 0, 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 0, 11, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 1, 1, S("abcde2fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 1, 4, S("abcde2345fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 1, 8, S("abcde23456789fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 1, 9, S("abcde234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 1, 10, S("abcde234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 5, 1, S("abcde6fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 5, 2, S("abcde67fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 5, 4, S("abcde6789fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 5, 5, S("abcde67890fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 5, 6, S("abcde67890fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 9, 1, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 9, 2, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 0, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 0, 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 1, 1, S("abcde2fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 1, 9, S("abcde234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 1, 18, S("abcde234567890123456789fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 10, 1, S("abcde1fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 10, 5, S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 10, 9, S("abcde123456789fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 10, 10, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 10, 11, S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 19, 1, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 19, 2, S("abcde0fghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 1, S(""), 0, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S(""), 0, 1, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 0, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 0, 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 0, 2, S("abcde12ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 0, 4, S("abcde1234ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 0, 5, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 0, 6, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 1, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 1, 1, S("abcde2ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 1, 2, S("abcde23ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 1, 3, S("abcde234ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 1, 4, S("abcde2345ghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test29()
-{
-    test(S("abcdefghij"), 5, 1, S("12345"), 1, 5, S("abcde2345ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 2, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 2, 1, S("abcde3ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 2, 2, S("abcde34ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 2, 3, S("abcde345ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 2, 4, S("abcde345ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 4, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 4, 1, S("abcde5ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 4, 2, S("abcde5ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 5, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 5, 1, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 0, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 0, 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 0, 5, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 0, 9, S("abcde123456789ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 0, 10, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 0, 11, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 1, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 1, 1, S("abcde2ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 1, 4, S("abcde2345ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 1, 8, S("abcde23456789ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 1, 9, S("abcde234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 1, 10, S("abcde234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 5, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 5, 1, S("abcde6ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 5, 2, S("abcde67ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 5, 4, S("abcde6789ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 5, 5, S("abcde67890ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 5, 6, S("abcde67890ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 9, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 9, 1, S("abcde0ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 9, 2, S("abcde0ghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 10, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 10, 1, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 0, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 0, 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 0, 10, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 1, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 1, 1, S("abcde2ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 1, 9, S("abcde234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 1, 18, S("abcde234567890123456789ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 10, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 10, 1, S("abcde1ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 10, 5, S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 10, 9, S("abcde123456789ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 10, 10, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 10, 11, S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 19, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 19, 1, S("abcde0ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 19, 2, S("abcde0ghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 20, 0, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 20, 1, S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 2, S(""), 0, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S(""), 0, 1, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 0, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 0, 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 0, 2, S("abcde12hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 0, 4, S("abcde1234hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 0, 5, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 0, 6, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 1, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 1, 1, S("abcde2hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 1, 2, S("abcde23hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 1, 3, S("abcde234hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 1, 4, S("abcde2345hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 1, 5, S("abcde2345hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 2, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 2, 1, S("abcde3hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 2, 2, S("abcde34hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 2, 3, S("abcde345hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 2, 4, S("abcde345hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 4, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 4, 1, S("abcde5hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 4, 2, S("abcde5hij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 5, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 5, 1, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 0, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 0, 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 0, 5, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 0, 9, S("abcde123456789hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 0, 10, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 0, 11, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 1, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 1, 1, S("abcde2hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 1, 4, S("abcde2345hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 1, 8, S("abcde23456789hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 1, 9, S("abcde234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 1, 10, S("abcde234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 5, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 5, 1, S("abcde6hij"));
+TEST_CONSTEXPR_CXX20 bool test29() {
+  test(S("abcdefghij"), 5, 1, S("12345"), 1, 5, S("abcde2345ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 2, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 2, 1, S("abcde3ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 2, 2, S("abcde34ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 2, 3, S("abcde345ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 2, 4, S("abcde345ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 4, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 4, 1, S("abcde5ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 4, 2, S("abcde5ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 5, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 5, 1, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 0, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 0, 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 0, 5, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 0, 9, S("abcde123456789ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 0, 10, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 0, 11, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 1, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 1, 1, S("abcde2ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 1, 4, S("abcde2345ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 1, 8, S("abcde23456789ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 1, 9, S("abcde234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 1, 10, S("abcde234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 5, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 5, 1, S("abcde6ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 5, 2, S("abcde67ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 5, 4, S("abcde6789ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 5, 5, S("abcde67890ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 5, 6, S("abcde67890ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 9, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 9, 1, S("abcde0ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 9, 2, S("abcde0ghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 10, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 10, 1, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 0, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 0, 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 0, 10, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 1, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 1, 1, S("abcde2ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 1, 9, S("abcde234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 1, 18, S("abcde234567890123456789ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 10, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 10, 1, S("abcde1ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 10, 5, S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 10, 9, S("abcde123456789ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 10, 10, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 10, 11, S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 19, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 19, 1, S("abcde0ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 19, 2, S("abcde0ghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 20, 0, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 20, 1, S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 2, S(""), 0, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S(""), 0, 1, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 0, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 0, 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 0, 2, S("abcde12hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 0, 4, S("abcde1234hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 0, 5, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 0, 6, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 1, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 1, 1, S("abcde2hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 1, 2, S("abcde23hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 1, 3, S("abcde234hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 1, 4, S("abcde2345hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 1, 5, S("abcde2345hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 2, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 2, 1, S("abcde3hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 2, 2, S("abcde34hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 2, 3, S("abcde345hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 2, 4, S("abcde345hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 4, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 4, 1, S("abcde5hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 4, 2, S("abcde5hij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 5, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 5, 1, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 0, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 0, 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 0, 5, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 0, 9, S("abcde123456789hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 0, 10, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 0, 11, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 1, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 1, 1, S("abcde2hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 1, 4, S("abcde2345hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 1, 8, S("abcde23456789hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 1, 9, S("abcde234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 1, 10, S("abcde234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 5, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 5, 1, S("abcde6hij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test30()
-{
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 5, 2, S("abcde67hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 5, 4, S("abcde6789hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 5, 5, S("abcde67890hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 5, 6, S("abcde67890hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 9, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 9, 1, S("abcde0hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 9, 2, S("abcde0hij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 10, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 10, 1, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 0, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 0, 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 0, 10, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 1, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 1, 1, S("abcde2hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 1, 9, S("abcde234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 1, 18, S("abcde234567890123456789hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 10, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 10, 1, S("abcde1hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 10, 5, S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 10, 9, S("abcde123456789hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 10, 10, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 10, 11, S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 19, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 19, 1, S("abcde0hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 19, 2, S("abcde0hij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 20, 0, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 20, 1, S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 4, S(""), 0, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S(""), 0, 1, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 0, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 0, 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 0, 2, S("abcde12j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 0, 4, S("abcde1234j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 0, 5, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 0, 6, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 1, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 1, 1, S("abcde2j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 1, 2, S("abcde23j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 1, 3, S("abcde234j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 1, 4, S("abcde2345j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 1, 5, S("abcde2345j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 2, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 2, 1, S("abcde3j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 2, 2, S("abcde34j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 2, 3, S("abcde345j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 2, 4, S("abcde345j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 4, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 4, 1, S("abcde5j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 4, 2, S("abcde5j"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 5, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 5, 1, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 0, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 0, 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 0, 5, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 0, 9, S("abcde123456789j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 0, 10, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 0, 11, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 1, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 1, 1, S("abcde2j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 1, 4, S("abcde2345j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 1, 8, S("abcde23456789j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 1, 9, S("abcde234567890j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 1, 10, S("abcde234567890j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 5, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 5, 1, S("abcde6j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 5, 2, S("abcde67j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 5, 4, S("abcde6789j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 5, 5, S("abcde67890j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 5, 6, S("abcde67890j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 9, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 9, 1, S("abcde0j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 9, 2, S("abcde0j"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 10, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 10, 1, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 0, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 0, 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 0, 10, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 1, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 1, 1, S("abcde2j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 1, 9, S("abcde234567890j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 1, 18, S("abcde234567890123456789j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 10, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 10, 1, S("abcde1j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 10, 5, S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 10, 9, S("abcde123456789j"));
+TEST_CONSTEXPR_CXX20 bool test30() {
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 5, 2, S("abcde67hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 5, 4, S("abcde6789hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 5, 5, S("abcde67890hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 5, 6, S("abcde67890hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 9, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 9, 1, S("abcde0hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 9, 2, S("abcde0hij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 10, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 10, 1, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 0, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 0, 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 0, 10, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 1, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 1, 1, S("abcde2hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 1, 9, S("abcde234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 1, 18, S("abcde234567890123456789hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 10, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 10, 1, S("abcde1hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 10, 5, S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 10, 9, S("abcde123456789hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 10, 10, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 10, 11, S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 19, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 19, 1, S("abcde0hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 19, 2, S("abcde0hij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 20, 0, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 20, 1, S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 4, S(""), 0, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S(""), 0, 1, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 0, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 0, 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 0, 2, S("abcde12j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 0, 4, S("abcde1234j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 0, 5, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 0, 6, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 1, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 1, 1, S("abcde2j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 1, 2, S("abcde23j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 1, 3, S("abcde234j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 1, 4, S("abcde2345j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 1, 5, S("abcde2345j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 2, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 2, 1, S("abcde3j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 2, 2, S("abcde34j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 2, 3, S("abcde345j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 2, 4, S("abcde345j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 4, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 4, 1, S("abcde5j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 4, 2, S("abcde5j"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 5, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 5, 1, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 0, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 0, 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 0, 5, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 0, 9, S("abcde123456789j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 0, 10, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 0, 11, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 1, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 1, 1, S("abcde2j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 1, 4, S("abcde2345j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 1, 8, S("abcde23456789j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 1, 9, S("abcde234567890j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 1, 10, S("abcde234567890j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 5, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 5, 1, S("abcde6j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 5, 2, S("abcde67j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 5, 4, S("abcde6789j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 5, 5, S("abcde67890j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 5, 6, S("abcde67890j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 9, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 9, 1, S("abcde0j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 9, 2, S("abcde0j"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 10, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 10, 1, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 0, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 0, 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 0, 10, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 1, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 1, 1, S("abcde2j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 1, 9, S("abcde234567890j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 1, 18, S("abcde234567890123456789j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 10, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 10, 1, S("abcde1j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 10, 5, S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 10, 9, S("abcde123456789j"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test31()
-{
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 10, 10, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 10, 11, S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 19, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 19, 1, S("abcde0j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 19, 2, S("abcde0j"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 20, 0, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 20, 1, S("abcdej"));
-    test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 5, S(""), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S(""), 0, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 0, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 0, 2, S("abcde12"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 0, 4, S("abcde1234"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 0, 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 0, 6, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 1, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 1, 1, S("abcde2"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 1, 2, S("abcde23"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 1, 3, S("abcde234"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 1, 4, S("abcde2345"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 1, 5, S("abcde2345"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 2, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 2, 1, S("abcde3"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 2, 2, S("abcde34"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 2, 3, S("abcde345"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 2, 4, S("abcde345"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 4, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 4, 1, S("abcde5"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 4, 2, S("abcde5"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 5, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 5, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 0, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 0, 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 0, 9, S("abcde123456789"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 0, 11, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 1, 1, S("abcde2"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 1, 4, S("abcde2345"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 1, 8, S("abcde23456789"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 1, 10, S("abcde234567890"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 5, 1, S("abcde6"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 5, 2, S("abcde67"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 5, 4, S("abcde6789"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 5, 5, S("abcde67890"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 5, 6, S("abcde67890"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 9, 1, S("abcde0"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 9, 2, S("abcde0"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 0, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 1, 1, S("abcde2"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 10, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 10, 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 10, 9, S("abcde123456789"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 10, 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 10, 11, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 19, 1, S("abcde0"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 19, 2, S("abcde0"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 6, S(""), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S(""), 0, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 0, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 0, 2, S("abcde12"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 0, 4, S("abcde1234"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 0, 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 0, 6, S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 1, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 1, 1, S("abcde2"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 1, 2, S("abcde23"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 1, 3, S("abcde234"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 1, 4, S("abcde2345"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 1, 5, S("abcde2345"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 2, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 2, 1, S("abcde3"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 2, 2, S("abcde34"));
+TEST_CONSTEXPR_CXX20 bool test31() {
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 10, 10, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 10, 11, S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 19, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 19, 1, S("abcde0j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 19, 2, S("abcde0j"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 20, 0, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 20, 1, S("abcdej"));
+  test(S("abcdefghij"), 5, 4, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 5, S(""), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S(""), 0, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 0, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 0, 2, S("abcde12"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 0, 4, S("abcde1234"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 0, 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 0, 6, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 1, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 1, 1, S("abcde2"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 1, 2, S("abcde23"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 1, 3, S("abcde234"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 1, 4, S("abcde2345"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 1, 5, S("abcde2345"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 2, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 2, 1, S("abcde3"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 2, 2, S("abcde34"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 2, 3, S("abcde345"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 2, 4, S("abcde345"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 4, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 4, 1, S("abcde5"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 4, 2, S("abcde5"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 5, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 5, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 0, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 0, 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 0, 9, S("abcde123456789"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 0, 11, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 1, 1, S("abcde2"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 1, 4, S("abcde2345"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 1, 8, S("abcde23456789"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 1, 10, S("abcde234567890"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 5, 1, S("abcde6"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 5, 2, S("abcde67"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 5, 4, S("abcde6789"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 5, 5, S("abcde67890"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 5, 6, S("abcde67890"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 9, 1, S("abcde0"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 9, 2, S("abcde0"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 0, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 1, 1, S("abcde2"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 10, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 10, 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 10, 9, S("abcde123456789"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 10, 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 10, 11, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 19, 1, S("abcde0"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 19, 2, S("abcde0"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 5, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 6, S(""), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S(""), 0, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 0, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 0, 2, S("abcde12"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 0, 4, S("abcde1234"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 0, 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 0, 6, S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 1, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 1, 1, S("abcde2"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 1, 2, S("abcde23"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 1, 3, S("abcde234"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 1, 4, S("abcde2345"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 1, 5, S("abcde2345"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 2, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 2, 1, S("abcde3"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 2, 2, S("abcde34"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test32()
-{
-    test(S("abcdefghij"), 5, 6, S("12345"), 2, 3, S("abcde345"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 2, 4, S("abcde345"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 4, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 4, 1, S("abcde5"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 4, 2, S("abcde5"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 5, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 5, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 0, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 0, 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 0, 9, S("abcde123456789"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 0, 11, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 1, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 1, 1, S("abcde2"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 1, 4, S("abcde2345"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 1, 8, S("abcde23456789"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 1, 10, S("abcde234567890"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 5, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 5, 1, S("abcde6"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 5, 2, S("abcde67"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 5, 4, S("abcde6789"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 5, 5, S("abcde67890"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 5, 6, S("abcde67890"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 9, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 9, 1, S("abcde0"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 9, 2, S("abcde0"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 10, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 10, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 0, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 0, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 0, 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 1, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 1, 1, S("abcde2"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 1, 9, S("abcde234567890"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 10, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 10, 1, S("abcde1"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 10, 5, S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 10, 9, S("abcde123456789"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 10, 10, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 10, 11, S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 19, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 19, 1, S("abcde0"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 19, 2, S("abcde0"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 20, 0, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 20, 1, S("abcde"));
-    test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 0, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 0, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 0, 2, S("abcdefghi12j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 0, 4, S("abcdefghi1234j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 0, 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 0, 6, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 1, 1, S("abcdefghi2j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 1, 2, S("abcdefghi23j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 1, 3, S("abcdefghi234j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 1, 4, S("abcdefghi2345j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 1, 5, S("abcdefghi2345j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 2, 1, S("abcdefghi3j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 2, 2, S("abcdefghi34j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 2, 3, S("abcdefghi345j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 2, 4, S("abcdefghi345j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 4, 1, S("abcdefghi5j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 4, 2, S("abcdefghi5j"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 0, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 0, 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 0, 9, S("abcdefghi123456789j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 0, 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 0, 11, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 1, 1, S("abcdefghi2j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 1, 4, S("abcdefghi2345j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 1, 8, S("abcdefghi23456789j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 1, 9, S("abcdefghi234567890j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 1, 10, S("abcdefghi234567890j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 5, 1, S("abcdefghi6j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 5, 2, S("abcdefghi67j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 5, 4, S("abcdefghi6789j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 5, 5, S("abcdefghi67890j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 5, 6, S("abcdefghi67890j"));
+TEST_CONSTEXPR_CXX20 bool test32() {
+  test(S("abcdefghij"), 5, 6, S("12345"), 2, 3, S("abcde345"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 2, 4, S("abcde345"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 4, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 4, 1, S("abcde5"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 4, 2, S("abcde5"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 5, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 5, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 0, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 0, 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 0, 9, S("abcde123456789"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 0, 11, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 1, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 1, 1, S("abcde2"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 1, 4, S("abcde2345"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 1, 8, S("abcde23456789"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 1, 10, S("abcde234567890"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 5, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 5, 1, S("abcde6"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 5, 2, S("abcde67"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 5, 4, S("abcde6789"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 5, 5, S("abcde67890"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 5, 6, S("abcde67890"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 9, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 9, 1, S("abcde0"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 9, 2, S("abcde0"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 10, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 10, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 0, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 0, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 0, 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 0, 19, S("abcde1234567890123456789"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 0, 20, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 0, 21, S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 1, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 1, 1, S("abcde2"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 1, 9, S("abcde234567890"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 1, 18, S("abcde234567890123456789"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 1, 19, S("abcde2345678901234567890"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 1, 20, S("abcde2345678901234567890"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 10, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 10, 1, S("abcde1"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 10, 5, S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 10, 9, S("abcde123456789"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 10, 10, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 10, 11, S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 19, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 19, 1, S("abcde0"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 19, 2, S("abcde0"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 20, 0, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 20, 1, S("abcde"));
+  test(S("abcdefghij"), 5, 6, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 0, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 0, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 0, 2, S("abcdefghi12j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 0, 4, S("abcdefghi1234j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 0, 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 0, 6, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 1, 1, S("abcdefghi2j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 1, 2, S("abcdefghi23j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 1, 3, S("abcdefghi234j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 1, 4, S("abcdefghi2345j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 1, 5, S("abcdefghi2345j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 2, 1, S("abcdefghi3j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 2, 2, S("abcdefghi34j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 2, 3, S("abcdefghi345j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 2, 4, S("abcdefghi345j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 4, 1, S("abcdefghi5j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 4, 2, S("abcdefghi5j"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 0, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 0, 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 0, 9, S("abcdefghi123456789j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 0, 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 0, 11, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 1, 1, S("abcdefghi2j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 1, 4, S("abcdefghi2345j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 1, 8, S("abcdefghi23456789j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 1, 9, S("abcdefghi234567890j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 1, 10, S("abcdefghi234567890j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 5, 1, S("abcdefghi6j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 5, 2, S("abcdefghi67j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 5, 4, S("abcdefghi6789j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 5, 5, S("abcdefghi67890j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 5, 6, S("abcdefghi67890j"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test33()
-{
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 9, 1, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 9, 2, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 0, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 0, 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 1, 1, S("abcdefghi2j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 1, 9, S("abcdefghi234567890j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 10, 1, S("abcdefghi1j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 10, 5, S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 10, 9, S("abcdefghi123456789j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 10, 10, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 10, 11, S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 19, 1, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 19, 2, S("abcdefghi0j"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 1, S(""), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S(""), 0, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 0, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 0, 2, S("abcdefghi12"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 0, 4, S("abcdefghi1234"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 0, 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 0, 6, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 1, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 1, 1, S("abcdefghi2"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 1, 2, S("abcdefghi23"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 1, 3, S("abcdefghi234"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 1, 4, S("abcdefghi2345"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 1, 5, S("abcdefghi2345"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 2, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 2, 1, S("abcdefghi3"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 2, 2, S("abcdefghi34"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 2, 3, S("abcdefghi345"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 2, 4, S("abcdefghi345"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 4, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 4, 1, S("abcdefghi5"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 4, 2, S("abcdefghi5"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 5, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 5, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 0, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 0, 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 0, 9, S("abcdefghi123456789"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 0, 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 0, 11, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 1, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 1, 1, S("abcdefghi2"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 1, 4, S("abcdefghi2345"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 1, 8, S("abcdefghi23456789"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 1, 9, S("abcdefghi234567890"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 1, 10, S("abcdefghi234567890"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 5, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 5, 1, S("abcdefghi6"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 5, 2, S("abcdefghi67"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 5, 4, S("abcdefghi6789"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 5, 5, S("abcdefghi67890"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 5, 6, S("abcdefghi67890"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 9, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 9, 1, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 9, 2, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 10, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 10, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 0, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 0, 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 1, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 1, 1, S("abcdefghi2"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 1, 9, S("abcdefghi234567890"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, 9, S("abcdefghi123456789"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, 11, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 19, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 19, 1, S("abcdefghi0"));
+TEST_CONSTEXPR_CXX20 bool test33() {
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 9, 1, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 9, 2, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 0, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 0, 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 1, 1, S("abcdefghi2j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 1, 9, S("abcdefghi234567890j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 10, 1, S("abcdefghi1j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 10, 5, S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 10, 9, S("abcdefghi123456789j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 10, 10, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 10, 11, S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 19, 1, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 19, 2, S("abcdefghi0j"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 1, S(""), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S(""), 0, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 0, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 0, 2, S("abcdefghi12"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 0, 4, S("abcdefghi1234"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 0, 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 0, 6, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 1, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 1, 1, S("abcdefghi2"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 1, 2, S("abcdefghi23"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 1, 3, S("abcdefghi234"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 1, 4, S("abcdefghi2345"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 1, 5, S("abcdefghi2345"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 2, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 2, 1, S("abcdefghi3"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 2, 2, S("abcdefghi34"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 2, 3, S("abcdefghi345"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 2, 4, S("abcdefghi345"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 4, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 4, 1, S("abcdefghi5"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 4, 2, S("abcdefghi5"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 5, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 5, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 0, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 0, 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 0, 9, S("abcdefghi123456789"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 0, 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 0, 11, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 1, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 1, 1, S("abcdefghi2"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 1, 4, S("abcdefghi2345"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 1, 8, S("abcdefghi23456789"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 1, 9, S("abcdefghi234567890"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 1, 10, S("abcdefghi234567890"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 5, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 5, 1, S("abcdefghi6"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 5, 2, S("abcdefghi67"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 5, 4, S("abcdefghi6789"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 5, 5, S("abcdefghi67890"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 5, 6, S("abcdefghi67890"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 9, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 9, 1, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 9, 2, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 10, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 10, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 0, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 0, 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 1, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 1, 1, S("abcdefghi2"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 1, 9, S("abcdefghi234567890"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, 9, S("abcdefghi123456789"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, 11, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 19, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 19, 1, S("abcdefghi0"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test34()
-{
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 19, 2, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 20, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 20, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 2, S(""), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S(""), 0, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 0, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 0, 2, S("abcdefghi12"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 0, 4, S("abcdefghi1234"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 0, 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 0, 6, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 1, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 1, 1, S("abcdefghi2"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 1, 2, S("abcdefghi23"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 1, 3, S("abcdefghi234"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 1, 4, S("abcdefghi2345"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 1, 5, S("abcdefghi2345"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 2, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 2, 1, S("abcdefghi3"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 2, 2, S("abcdefghi34"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 2, 3, S("abcdefghi345"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 2, 4, S("abcdefghi345"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 4, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 4, 1, S("abcdefghi5"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 4, 2, S("abcdefghi5"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 5, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 5, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 0, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 0, 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 0, 9, S("abcdefghi123456789"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 0, 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 0, 11, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 1, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 1, 1, S("abcdefghi2"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 1, 4, S("abcdefghi2345"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 1, 8, S("abcdefghi23456789"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 1, 9, S("abcdefghi234567890"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 1, 10, S("abcdefghi234567890"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 5, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 5, 1, S("abcdefghi6"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 5, 2, S("abcdefghi67"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 5, 4, S("abcdefghi6789"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 5, 5, S("abcdefghi67890"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 5, 6, S("abcdefghi67890"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 9, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 9, 1, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 9, 2, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 10, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 10, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 0, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 0, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 0, 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 1, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 1, 1, S("abcdefghi2"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 1, 9, S("abcdefghi234567890"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 10, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 10, 1, S("abcdefghi1"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 10, 5, S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 10, 9, S("abcdefghi123456789"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 10, 10, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 10, 11, S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 19, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 19, 1, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 19, 2, S("abcdefghi0"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 20, 0, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 20, 1, S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 0, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 0, 2, S("abcdefghij12"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 0, 4, S("abcdefghij1234"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 0, 6, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 1, 2, S("abcdefghij23"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 1, 3, S("abcdefghij234"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 1, 5, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 2, 1, S("abcdefghij3"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 2, 2, S("abcdefghij34"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 2, 3, S("abcdefghij345"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 2, 4, S("abcdefghij345"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 4, 1, S("abcdefghij5"));
+TEST_CONSTEXPR_CXX20 bool test34() {
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 19, 2, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 20, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 20, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 2, S(""), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S(""), 0, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 0, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 0, 2, S("abcdefghi12"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 0, 4, S("abcdefghi1234"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 0, 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 0, 6, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 1, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 1, 1, S("abcdefghi2"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 1, 2, S("abcdefghi23"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 1, 3, S("abcdefghi234"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 1, 4, S("abcdefghi2345"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 1, 5, S("abcdefghi2345"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 2, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 2, 1, S("abcdefghi3"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 2, 2, S("abcdefghi34"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 2, 3, S("abcdefghi345"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 2, 4, S("abcdefghi345"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 4, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 4, 1, S("abcdefghi5"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 4, 2, S("abcdefghi5"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 5, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 5, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 0, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 0, 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 0, 9, S("abcdefghi123456789"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 0, 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 0, 11, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 1, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 1, 1, S("abcdefghi2"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 1, 4, S("abcdefghi2345"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 1, 8, S("abcdefghi23456789"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 1, 9, S("abcdefghi234567890"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 1, 10, S("abcdefghi234567890"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 5, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 5, 1, S("abcdefghi6"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 5, 2, S("abcdefghi67"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 5, 4, S("abcdefghi6789"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 5, 5, S("abcdefghi67890"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 5, 6, S("abcdefghi67890"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 9, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 9, 1, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 9, 2, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 10, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 10, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 0, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 0, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 0, 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 0, 19, S("abcdefghi1234567890123456789"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 0, 20, S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 0, 21, S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 1, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 1, 1, S("abcdefghi2"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 1, 9, S("abcdefghi234567890"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 1, 18, S("abcdefghi234567890123456789"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 1, 19, S("abcdefghi2345678901234567890"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 1, 20, S("abcdefghi2345678901234567890"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 10, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 10, 1, S("abcdefghi1"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 10, 5, S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 10, 9, S("abcdefghi123456789"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 10, 10, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 10, 11, S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 19, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 19, 1, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 19, 2, S("abcdefghi0"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 20, 0, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 20, 1, S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 0, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 0, 2, S("abcdefghij12"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 0, 4, S("abcdefghij1234"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 0, 6, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 1, 2, S("abcdefghij23"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 1, 3, S("abcdefghij234"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 1, 5, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 2, 1, S("abcdefghij3"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 2, 2, S("abcdefghij34"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 2, 3, S("abcdefghij345"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 2, 4, S("abcdefghij345"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 4, 1, S("abcdefghij5"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test35()
-{
-    test(S("abcdefghij"), 10, 0, S("12345"), 4, 2, S("abcdefghij5"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 0, 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 0, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 1, 8, S("abcdefghij23456789"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 1, 10, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 5, 1, S("abcdefghij6"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 5, 2, S("abcdefghij67"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 5, 4, S("abcdefghij6789"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 5, 5, S("abcdefghij67890"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 5, 6, S("abcdefghij67890"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 9, 1, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 9, 2, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 10, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 10, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 19, 1, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 19, 2, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 1, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 0, 2, S("abcdefghij12"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 0, 4, S("abcdefghij1234"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 0, 6, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 1, 2, S("abcdefghij23"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 1, 3, S("abcdefghij234"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 1, 5, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 2, 1, S("abcdefghij3"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 2, 2, S("abcdefghij34"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 2, 3, S("abcdefghij345"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 2, 4, S("abcdefghij345"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 4, 1, S("abcdefghij5"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 4, 2, S("abcdefghij5"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 0, 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 0, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 1, 8, S("abcdefghij23456789"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 1, 10, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 5, 1, S("abcdefghij6"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 5, 2, S("abcdefghij67"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 5, 4, S("abcdefghij6789"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 5, 5, S("abcdefghij67890"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 5, 6, S("abcdefghij67890"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 9, 1, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 9, 2, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 10, 0, S("abcdefghij"));
+TEST_CONSTEXPR_CXX20 bool test35() {
+  test(S("abcdefghij"), 10, 0, S("12345"), 4, 2, S("abcdefghij5"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 0, 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 0, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 1, 8, S("abcdefghij23456789"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 1, 10, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 5, 1, S("abcdefghij6"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 5, 2, S("abcdefghij67"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 5, 4, S("abcdefghij6789"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 5, 5, S("abcdefghij67890"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 5, 6, S("abcdefghij67890"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 9, 1, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 9, 2, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 10, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 10, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 19, 1, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 19, 2, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 1, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 0, 2, S("abcdefghij12"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 0, 4, S("abcdefghij1234"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 0, 6, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 1, 2, S("abcdefghij23"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 1, 3, S("abcdefghij234"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 1, 5, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 2, 1, S("abcdefghij3"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 2, 2, S("abcdefghij34"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 2, 3, S("abcdefghij345"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 2, 4, S("abcdefghij345"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 4, 1, S("abcdefghij5"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 4, 2, S("abcdefghij5"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 0, 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 0, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 1, 8, S("abcdefghij23456789"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 1, 10, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 5, 1, S("abcdefghij6"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 5, 2, S("abcdefghij67"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 5, 4, S("abcdefghij6789"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 5, 5, S("abcdefghij67890"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 5, 6, S("abcdefghij67890"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 9, 1, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 9, 2, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 10, 0, S("abcdefghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test36()
-{
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 10, 1, S("abcdefghij1"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 10, 5, S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 19, 1, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 19, 2, S("abcdefghij0"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S(""), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S(""), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 0, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 0, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 0, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 0, 6, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 1, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 1, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 1, 3, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 1, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 1, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 2, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 2, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 2, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 2, 3, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 2, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 4, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 4, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 4, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 5, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 5, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 0, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 0, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 0, 11, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 1, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 1, 8, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 1, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 5, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 5, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 5, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 5, 4, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 5, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 5, 6, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 9, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 9, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 9, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test36() {
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 10, 1, S("abcdefghij1"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 10, 5, S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 19, 1, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 19, 2, S("abcdefghij0"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S(""), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S(""), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 0, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 0, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 0, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 0, 6, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 1, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 1, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 1, 3, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 1, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 1, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 2, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 2, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 2, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 2, 3, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 2, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 4, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 4, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 4, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 5, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 5, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 0, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 0, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 0, 11, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 1, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 1, 8, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 1, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 5, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 5, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 5, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 5, 4, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 5, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 5, 6, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 9, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 9, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 9, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S("abcdefghij"), 11, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test37()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 0, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 0, 2, S("12abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 0, 4, S("1234abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 0, 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 0, 6, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 1, 1, S("2abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 1, 2, S("23abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 1, 3, S("234abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 1, 4, S("2345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 1, 5, S("2345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 2, 1, S("3abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 2, 2, S("34abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 2, 3, S("345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 2, 4, S("345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 4, 1, S("5abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 4, 2, S("5abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 0, 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 0, 9, S("123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 0, 11, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 1, 4, S("2345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 1, 8, S("23456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 1, 10, S("234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 5, 1, S("6abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 5, 2, S("67abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 5, 4, S("6789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 5, 5, S("67890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 5, 6, S("67890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 9, 1, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 9, 2, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 1, 18, S("234567890123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 10, 1, S("1abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 10, 5, S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 10, 9, S("123456789abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 10, 10, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 10, 11, S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 19, 1, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 19, 2, S("0abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 0, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 0, 1, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 0, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 0, 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 0, 2, S("12bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 0, 4, S("1234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 0, 5, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 0, 6, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 1, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 1, 1, S("2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 1, 2, S("23bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 1, 3, S("234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 1, 4, S("2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 1, 5, S("2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 2, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 2, 1, S("3bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 2, 2, S("34bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 2, 3, S("345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 2, 4, S("345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 4, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 4, 1, S("5bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 4, 2, S("5bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 5, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 5, 1, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 6, 0, S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test37() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 0, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 0, 2, S("12abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 0, 4, S("1234abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 0, 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 0, 6, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 1, 1, S("2abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 1, 2, S("23abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 1, 3, S("234abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 1, 4, S("2345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 1, 5, S("2345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 2, 1, S("3abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 2, 2, S("34abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 2, 3, S("345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 2, 4, S("345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 4, 1, S("5abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 4, 2, S("5abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 0, 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 0, 9, S("123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 0, 11, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 1, 4, S("2345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 1, 8, S("23456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 1, 10, S("234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 5, 1, S("6abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 5, 2, S("67abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 5, 4, S("6789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 5, 5, S("67890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 5, 6, S("67890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 9, 1, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 9, 2, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 0, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 0, 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 0, 19, S("1234567890123456789abcdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 0, 20, S("12345678901234567890abcdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 0, 21, S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 1, 1, S("2abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 1, 9, S("234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 1, 18, S("234567890123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 1, 19, S("2345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 1, 20, S("2345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 10, 1, S("1abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 10, 5, S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 10, 9, S("123456789abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 10, 10, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 10, 11, S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 19, 1, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 19, 2, S("0abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 0, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 0, 1, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 0, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 0, 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 0, 2, S("12bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 0, 4, S("1234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 0, 5, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 0, 6, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 1, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 1, 1, S("2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 1, 2, S("23bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 1, 3, S("234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 1, 4, S("2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 1, 5, S("2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 2, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 2, 1, S("3bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 2, 2, S("34bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 2, 3, S("345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 2, 4, S("345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 4, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 4, 1, S("5bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 4, 2, S("5bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 5, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 5, 1, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345"), 6, 0, S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test38()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 0, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 0, 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 0, 5, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 0, 9, S("123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 0, 10, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 0, 11, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 1, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 1, 1, S("2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 1, 4, S("2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 1, 8, S("23456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 1, 9, S("234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 1, 10, S("234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 5, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 5, 1, S("6bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 5, 2, S("67bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 5, 4, S("6789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 5, 5, S("67890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 5, 6, S("67890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 9, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 9, 1, S("0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 9, 2, S("0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 10, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 10, 1, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 0, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 0, 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 0, 10, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 0, 19, S("1234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 0, 20, S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 0, 21, S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 1, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 1, 1, S("2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 1, 9, S("234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 1, 18, S("234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 1, 19, S("2345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 1, 20, S("2345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 10, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 10, 1, S("1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 10, 5, S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 10, 9, S("123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 10, 10, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 10, 11, S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 19, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 19, 1, S("0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 19, 2, S("0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 20, 0, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 20, 1, S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 0, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 0, 1, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 0, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 0, 1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 0, 2, S("12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 0, 4, S("1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 0, 5, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 0, 6, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 1, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 1, 1, S("2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 1, 2, S("23klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 1, 3, S("234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 1, 4, S("2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 1, 5, S("2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 2, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 2, 1, S("3klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 2, 2, S("34klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 2, 3, S("345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 2, 4, S("345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 4, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 4, 1, S("5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 4, 2, S("5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 5, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 5, 1, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 0, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 0, 1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 0, 5, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 0, 9, S("123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 0, 10, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 0, 11, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 1, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 1, 1, S("2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 1, 4, S("2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 1, 8, S("23456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 1, 9, S("234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 1, 10, S("234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 5, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 5, 1, S("6klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 5, 2, S("67klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 5, 4, S("6789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 5, 5, S("67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 5, 6, S("67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 9, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 9, 1, S("0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 9, 2, S("0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 10, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 10, 1, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 0, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 0, 1, S("1klmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test38() {
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 0, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 0, 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 0, 5, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 0, 9, S("123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 0, 10, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 0, 11, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 1, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 1, 1, S("2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 1, 4, S("2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 1, 8, S("23456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 1, 9, S("234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 1, 10, S("234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 5, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 5, 1, S("6bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 5, 2, S("67bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 5, 4, S("6789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 5, 5, S("67890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 5, 6, S("67890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 9, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 9, 1, S("0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 9, 2, S("0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 10, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 10, 1, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 0, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 0, 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 0, 10, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 0, 19, S("1234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 0, 20, S("12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 0, 21, S("12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 1, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 1, 1, S("2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 1, 9, S("234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 1, 18, S("234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 1, 19, S("2345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 1, 20, S("2345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 10, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 10, 1, S("1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 10, 5, S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 10, 9, S("123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 10, 10, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 10, 11, S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 19, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 19, 1, S("0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 19, 2, S("0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 20, 0, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 20, 1, S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 0, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 0, 1, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 0, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 0, 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 0, 2, S("12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 0, 4, S("1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 0, 5, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 0, 6, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 1, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 1, 1, S("2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 1, 2, S("23klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 1, 3, S("234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 1, 4, S("2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 1, 5, S("2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 2, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 2, 1, S("3klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 2, 2, S("34klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 2, 3, S("345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 2, 4, S("345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 4, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 4, 1, S("5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 4, 2, S("5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 5, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 5, 1, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 0, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 0, 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 0, 5, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 0, 9, S("123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 0, 10, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 0, 11, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 1, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 1, 1, S("2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 1, 4, S("2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 1, 8, S("23456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 1, 9, S("234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 1, 10, S("234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 5, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 5, 1, S("6klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 5, 2, S("67klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 5, 4, S("6789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 5, 5, S("67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 5, 6, S("67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 9, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 9, 1, S("0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 9, 2, S("0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 10, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 10, 1, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 0, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 0, 1, S("1klmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test39()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 0, 10, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 0, 19, S("1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 0, 20, S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 0, 21, S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 1, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 1, 1, S("2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 1, 9, S("234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 1, 18, S("234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 1, 19, S("2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 1, 20, S("2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 10, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 10, 1, S("1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 10, 5, S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 10, 9, S("123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 10, 10, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 10, 11, S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 19, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 19, 1, S("0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 19, 2, S("0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 20, 0, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 20, 1, S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 0, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 0, 1, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 0, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 0, 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 0, 2, S("12t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 0, 4, S("1234t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 0, 5, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 0, 6, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 1, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 1, 1, S("2t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 1, 2, S("23t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 1, 3, S("234t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 1, 4, S("2345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 1, 5, S("2345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 2, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 2, 1, S("3t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 2, 2, S("34t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 2, 3, S("345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 2, 4, S("345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 4, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 4, 1, S("5t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 4, 2, S("5t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 5, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 5, 1, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 0, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 0, 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 0, 5, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 0, 9, S("123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 0, 10, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 0, 11, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 1, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 1, 1, S("2t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 1, 4, S("2345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 1, 8, S("23456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 1, 9, S("234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 1, 10, S("234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 5, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 5, 1, S("6t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 5, 2, S("67t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 5, 4, S("6789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 5, 5, S("67890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 5, 6, S("67890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 9, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 9, 1, S("0t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 9, 2, S("0t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 10, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 10, 1, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 0, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 0, 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 0, 10, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 0, 19, S("1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 0, 20, S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 0, 21, S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 1, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 1, 1, S("2t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 1, 9, S("234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 1, 18, S("234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 1, 19, S("2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 1, 20, S("2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 10, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 10, 1, S("1t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 10, 5, S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 10, 9, S("123456789t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 10, 10, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 10, 11, S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 19, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 19, 1, S("0t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 19, 2, S("0t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 20, 0, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 20, 1, S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 0, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 0, 0, S(""));
+TEST_CONSTEXPR_CXX20 bool test39() {
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 0, 10, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 0, 19, S("1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 0, 20, S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 0, 21, S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 1, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 1, 1, S("2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 1, 9, S("234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 1, 18, S("234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 1, 19, S("2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 1, 20, S("2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 10, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 10, 1, S("1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 10, 5, S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 10, 9, S("123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 10, 10, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 10, 11, S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 19, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 19, 1, S("0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 19, 2, S("0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 20, 0, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 20, 1, S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 0, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 0, 1, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 0, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 0, 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 0, 2, S("12t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 0, 4, S("1234t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 0, 5, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 0, 6, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 1, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 1, 1, S("2t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 1, 2, S("23t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 1, 3, S("234t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 1, 4, S("2345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 1, 5, S("2345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 2, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 2, 1, S("3t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 2, 2, S("34t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 2, 3, S("345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 2, 4, S("345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 4, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 4, 1, S("5t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 4, 2, S("5t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 5, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 5, 1, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 0, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 0, 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 0, 5, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 0, 9, S("123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 0, 10, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 0, 11, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 1, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 1, 1, S("2t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 1, 4, S("2345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 1, 8, S("23456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 1, 9, S("234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 1, 10, S("234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 5, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 5, 1, S("6t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 5, 2, S("67t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 5, 4, S("6789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 5, 5, S("67890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 5, 6, S("67890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 9, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 9, 1, S("0t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 9, 2, S("0t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 10, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 10, 1, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 0, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 0, 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 0, 10, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 0, 19, S("1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 0, 20, S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 0, 21, S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 1, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 1, 1, S("2t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 1, 9, S("234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 1, 18, S("234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 1, 19, S("2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 1, 20, S("2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 10, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 10, 1, S("1t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 10, 5, S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 10, 9, S("123456789t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 10, 10, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 10, 11, S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 19, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 19, 1, S("0t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 19, 2, S("0t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 20, 0, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 20, 1, S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 0, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 0, 0, S(""));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test40()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 0, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 0, 2, S("12"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 0, 4, S("1234"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 0, 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 0, 6, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 1, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 1, 1, S("2"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 1, 2, S("23"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 1, 3, S("234"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 1, 4, S("2345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 1, 5, S("2345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 2, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 2, 1, S("3"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 2, 2, S("34"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 2, 3, S("345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 2, 4, S("345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 4, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 4, 1, S("5"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 4, 2, S("5"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 5, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 5, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 0, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 0, 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 0, 9, S("123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 0, 11, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 1, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 1, 1, S("2"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 1, 4, S("2345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 1, 8, S("23456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 1, 10, S("234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 5, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 5, 1, S("6"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 5, 2, S("67"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 5, 4, S("6789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 5, 5, S("67890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 5, 6, S("67890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 9, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 9, 1, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 9, 2, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 10, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 10, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 0, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 1, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 1, 1, S("2"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 10, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 10, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 10, 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 10, 9, S("123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 19, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 19, 1, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 19, 2, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 20, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 20, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 0, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 0, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 0, 2, S("12"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 0, 4, S("1234"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 0, 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 0, 6, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 1, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 1, 1, S("2"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 1, 2, S("23"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 1, 3, S("234"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 1, 4, S("2345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 1, 5, S("2345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 2, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 2, 1, S("3"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 2, 2, S("34"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 2, 3, S("345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 2, 4, S("345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 4, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 4, 1, S("5"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 4, 2, S("5"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 5, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 5, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 0, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 0, 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 0, 9, S("123456789"));
+TEST_CONSTEXPR_CXX20 bool test40() {
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 0, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 0, 2, S("12"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 0, 4, S("1234"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 0, 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 0, 6, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 1, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 1, 1, S("2"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 1, 2, S("23"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 1, 3, S("234"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 1, 4, S("2345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 1, 5, S("2345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 2, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 2, 1, S("3"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 2, 2, S("34"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 2, 3, S("345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 2, 4, S("345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 4, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 4, 1, S("5"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 4, 2, S("5"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 5, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 5, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 0, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 0, 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 0, 9, S("123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 0, 11, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 1, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 1, 1, S("2"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 1, 4, S("2345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 1, 8, S("23456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 1, 10, S("234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 5, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 5, 1, S("6"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 5, 2, S("67"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 5, 4, S("6789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 5, 5, S("67890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 5, 6, S("67890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 9, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 9, 1, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 9, 2, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 10, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 10, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 0, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 1, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 1, 1, S("2"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 10, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 10, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 10, 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 10, 9, S("123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 19, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 19, 1, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 19, 2, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 20, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 20, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 0, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 0, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 0, 2, S("12"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 0, 4, S("1234"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 0, 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 0, 6, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 1, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 1, 1, S("2"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 1, 2, S("23"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 1, 3, S("234"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 1, 4, S("2345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 1, 5, S("2345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 2, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 2, 1, S("3"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 2, 2, S("34"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 2, 3, S("345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 2, 4, S("345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 4, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 4, 1, S("5"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 4, 2, S("5"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 5, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 5, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 0, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 0, 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 0, 9, S("123456789"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test41()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 0, 11, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 1, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 1, 1, S("2"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 1, 4, S("2345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 1, 8, S("23456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 1, 10, S("234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 5, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 5, 1, S("6"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 5, 2, S("67"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 5, 4, S("6789"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 5, 5, S("67890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 5, 6, S("67890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 9, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 9, 1, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 9, 2, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 10, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 10, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 0, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 0, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 0, 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 1, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 1, 1, S("2"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 1, 9, S("234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 1, 18, S("234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 10, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 10, 1, S("1"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 10, 5, S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 10, 9, S("123456789"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 10, 10, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 10, 11, S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 19, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 19, 1, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 19, 2, S("0"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 20, 0, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 20, 1, S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 0, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 0, 2, S("a12bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 0, 4, S("a1234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 0, 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 0, 6, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 1, 1, S("a2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 1, 2, S("a23bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 1, 3, S("a234bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 1, 4, S("a2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 1, 5, S("a2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 2, 1, S("a3bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 2, 2, S("a34bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 2, 3, S("a345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 2, 4, S("a345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 4, 1, S("a5bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 4, 2, S("a5bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 0, 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 0, 9, S("a123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 0, 11, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 1, 4, S("a2345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 1, 8, S("a23456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 1, 10, S("a234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 5, 1, S("a6bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 5, 2, S("a67bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 5, 4, S("a6789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 5, 5, S("a67890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 5, 6, S("a67890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 9, 1, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 9, 2, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghijklmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test41() {
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 0, 11, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 1, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 1, 1, S("2"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 1, 4, S("2345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 1, 8, S("23456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 1, 10, S("234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 5, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 5, 1, S("6"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 5, 2, S("67"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 5, 4, S("6789"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 5, 5, S("67890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 5, 6, S("67890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 9, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 9, 1, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 9, 2, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 10, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 10, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 0, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 0, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 0, 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 0, 19, S("1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 0, 20, S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 0, 21, S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 1, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 1, 1, S("2"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 1, 9, S("234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 1, 18, S("234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 1, 19, S("2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 1, 20, S("2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 10, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 10, 1, S("1"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 10, 5, S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 10, 9, S("123456789"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 10, 10, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 10, 11, S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 19, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 19, 1, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 19, 2, S("0"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 20, 0, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 20, 1, S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 0, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 0, 2, S("a12bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 0, 4, S("a1234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 0, 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 0, 6, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 1, 1, S("a2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 1, 2, S("a23bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 1, 3, S("a234bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 1, 4, S("a2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 1, 5, S("a2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 2, 1, S("a3bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 2, 2, S("a34bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 2, 3, S("a345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 2, 4, S("a345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 4, 1, S("a5bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 4, 2, S("a5bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 0, 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 0, 9, S("a123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 0, 11, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 1, 4, S("a2345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 1, 8, S("a23456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 1, 10, S("a234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 5, 1, S("a6bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 5, 2, S("a67bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 5, 4, S("a6789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 5, 5, S("a67890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 5, 6, S("a67890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 9, 1, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 9, 2, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 0, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 0, 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 0, 19, S("a1234567890123456789bcdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 0, 20, S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 0, 21, S("a12345678901234567890bcdefghijklmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test42()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 10, 1, S("a1bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 10, 5, S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 10, 9, S("a123456789bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 10, 10, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 10, 11, S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 19, 1, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 19, 2, S("a0bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 0, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 0, 1, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 0, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 0, 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 0, 2, S("a12cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 0, 4, S("a1234cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 0, 5, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 0, 6, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 1, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 1, 1, S("a2cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 1, 2, S("a23cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 1, 3, S("a234cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 1, 4, S("a2345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 1, 5, S("a2345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 2, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 2, 1, S("a3cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 2, 2, S("a34cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 2, 3, S("a345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 2, 4, S("a345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 4, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 4, 1, S("a5cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 4, 2, S("a5cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 5, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 5, 1, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 0, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 0, 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 0, 5, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 0, 9, S("a123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 0, 10, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 0, 11, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 1, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 1, 1, S("a2cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 1, 4, S("a2345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 1, 8, S("a23456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 1, 9, S("a234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 1, 10, S("a234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 5, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 5, 1, S("a6cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 5, 2, S("a67cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 5, 4, S("a6789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 5, 5, S("a67890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 5, 6, S("a67890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 9, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 9, 1, S("a0cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 9, 2, S("a0cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 10, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 10, 1, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 0, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 0, 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 0, 10, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 0, 19, S("a1234567890123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 0, 20, S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 0, 21, S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 1, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 1, 1, S("a2cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 1, 9, S("a234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 1, 18, S("a234567890123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 1, 19, S("a2345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 1, 20, S("a2345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 10, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 10, 1, S("a1cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 10, 5, S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 10, 9, S("a123456789cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 10, 10, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 10, 11, S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 19, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 19, 1, S("a0cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 19, 2, S("a0cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 20, 0, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 20, 1, S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 0, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 0, 1, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 0, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 0, 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 0, 2, S("a12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 0, 4, S("a1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 0, 5, S("a12345klmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test42() {
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 1, 1, S("a2bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 1, 9, S("a234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 1, 18, S("a234567890123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 1, 19, S("a2345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 1, 20, S("a2345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 10, 1, S("a1bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 10, 5, S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 10, 9, S("a123456789bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 10, 10, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 10, 11, S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 19, 1, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 19, 2, S("a0bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 0, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 0, 1, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 0, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 0, 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 0, 2, S("a12cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 0, 4, S("a1234cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 0, 5, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 0, 6, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 1, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 1, 1, S("a2cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 1, 2, S("a23cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 1, 3, S("a234cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 1, 4, S("a2345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 1, 5, S("a2345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 2, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 2, 1, S("a3cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 2, 2, S("a34cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 2, 3, S("a345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 2, 4, S("a345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 4, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 4, 1, S("a5cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 4, 2, S("a5cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 5, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 5, 1, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 0, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 0, 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 0, 5, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 0, 9, S("a123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 0, 10, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 0, 11, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 1, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 1, 1, S("a2cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 1, 4, S("a2345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 1, 8, S("a23456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 1, 9, S("a234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 1, 10, S("a234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 5, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 5, 1, S("a6cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 5, 2, S("a67cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 5, 4, S("a6789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 5, 5, S("a67890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 5, 6, S("a67890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 9, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 9, 1, S("a0cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 9, 2, S("a0cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 10, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 10, 1, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 0, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 0, 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 0, 10, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 0, 19, S("a1234567890123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 0, 20, S("a12345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 0, 21, S("a12345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 1, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 1, 1, S("a2cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 1, 9, S("a234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 1, 18, S("a234567890123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 1, 19, S("a2345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 1, 20, S("a2345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 10, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 10, 1, S("a1cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 10, 5, S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 10, 9, S("a123456789cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 10, 10, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 10, 11, S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 19, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 19, 1, S("a0cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 19, 2, S("a0cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 20, 0, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 20, 1, S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 0, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 0, 1, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 0, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 0, 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 0, 2, S("a12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 0, 4, S("a1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 0, 5, S("a12345klmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test43()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 0, 6, S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 1, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 1, 1, S("a2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 1, 2, S("a23klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 1, 3, S("a234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 1, 4, S("a2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 1, 5, S("a2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 2, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 2, 1, S("a3klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 2, 2, S("a34klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 2, 3, S("a345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 2, 4, S("a345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 4, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 4, 1, S("a5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 4, 2, S("a5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 5, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 5, 1, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 0, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 0, 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 0, 5, S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 0, 9, S("a123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 0, 10, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 0, 11, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 1, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 1, 1, S("a2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 1, 4, S("a2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 1, 8, S("a23456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 1, 9, S("a234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 1, 10, S("a234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 5, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 5, 1, S("a6klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 5, 2, S("a67klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 5, 4, S("a6789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 5, 5, S("a67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 5, 6, S("a67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 9, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 9, 1, S("a0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 9, 2, S("a0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 10, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 10, 1, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 0, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 0, 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 0, 10, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 0, 19, S("a1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 0, 20, S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 0, 21, S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 1, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 1, 1, S("a2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 1, 9, S("a234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 1, 18, S("a234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 1, 19, S("a2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 1, 20, S("a2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 10, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 10, 1, S("a1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 10, 5, S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 10, 9, S("a123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 10, 10, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 10, 11, S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 19, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 19, 1, S("a0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 19, 2, S("a0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 20, 0, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 20, 1, S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 0, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 0, 1, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 0, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 0, 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 0, 2, S("a12t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 0, 4, S("a1234t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 0, 5, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 0, 6, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 1, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 1, 1, S("a2t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 1, 2, S("a23t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 1, 3, S("a234t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 1, 4, S("a2345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 1, 5, S("a2345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 2, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 2, 1, S("a3t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 2, 2, S("a34t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 2, 3, S("a345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 2, 4, S("a345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 4, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 4, 1, S("a5t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 4, 2, S("a5t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 5, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 5, 1, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 0, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 0, 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 0, 5, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 0, 9, S("a123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 0, 10, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 0, 11, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 1, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 1, 1, S("a2t"));
+TEST_CONSTEXPR_CXX20 bool test43() {
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 0, 6, S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 1, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 1, 1, S("a2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 1, 2, S("a23klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 1, 3, S("a234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 1, 4, S("a2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 1, 5, S("a2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 2, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 2, 1, S("a3klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 2, 2, S("a34klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 2, 3, S("a345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 2, 4, S("a345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 4, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 4, 1, S("a5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 4, 2, S("a5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 5, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 5, 1, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 0, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 0, 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 0, 5, S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 0, 9, S("a123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 0, 10, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 0, 11, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 1, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 1, 1, S("a2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 1, 4, S("a2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 1, 8, S("a23456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 1, 9, S("a234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 1, 10, S("a234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 5, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 5, 1, S("a6klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 5, 2, S("a67klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 5, 4, S("a6789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 5, 5, S("a67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 5, 6, S("a67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 9, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 9, 1, S("a0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 9, 2, S("a0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 10, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 10, 1, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 0, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 0, 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 0, 10, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 0, 19, S("a1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 0, 20, S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 0, 21, S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 1, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 1, 1, S("a2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 1, 9, S("a234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 1, 18, S("a234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 1, 19, S("a2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 1, 20, S("a2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 10, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 10, 1, S("a1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 10, 5, S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 10, 9, S("a123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 10, 10, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 10, 11, S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 19, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 19, 1, S("a0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 19, 2, S("a0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 20, 0, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 20, 1, S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 0, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 0, 1, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 0, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 0, 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 0, 2, S("a12t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 0, 4, S("a1234t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 0, 5, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 0, 6, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 1, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 1, 1, S("a2t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 1, 2, S("a23t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 1, 3, S("a234t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 1, 4, S("a2345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 1, 5, S("a2345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 2, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 2, 1, S("a3t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 2, 2, S("a34t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 2, 3, S("a345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 2, 4, S("a345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 4, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 4, 1, S("a5t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 4, 2, S("a5t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 5, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 5, 1, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 0, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 0, 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 0, 5, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 0, 9, S("a123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 0, 10, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 0, 11, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 1, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 1, 1, S("a2t"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test44()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 1, 4, S("a2345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 1, 8, S("a23456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 1, 9, S("a234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 1, 10, S("a234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 5, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 5, 1, S("a6t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 5, 2, S("a67t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 5, 4, S("a6789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 5, 5, S("a67890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 5, 6, S("a67890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 9, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 9, 1, S("a0t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 9, 2, S("a0t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 10, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 10, 1, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 0, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 0, 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 0, 10, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 0, 19, S("a1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 0, 20, S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 0, 21, S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 1, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 1, 1, S("a2t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 1, 9, S("a234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 1, 18, S("a234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 1, 19, S("a2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 1, 20, S("a2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 10, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 10, 1, S("a1t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 10, 5, S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 10, 9, S("a123456789t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 10, 10, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 10, 11, S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 19, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 19, 1, S("a0t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 19, 2, S("a0t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 20, 0, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 20, 1, S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 0, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 0, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 0, 2, S("a12"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 0, 4, S("a1234"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 0, 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 0, 6, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 1, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 1, 1, S("a2"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 1, 2, S("a23"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 1, 3, S("a234"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 1, 4, S("a2345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 1, 5, S("a2345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 2, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 2, 1, S("a3"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 2, 2, S("a34"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 2, 3, S("a345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 2, 4, S("a345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 4, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 4, 1, S("a5"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 4, 2, S("a5"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 5, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 5, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 0, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 0, 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 0, 9, S("a123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 0, 11, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 1, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 1, 1, S("a2"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 1, 4, S("a2345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 1, 8, S("a23456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 1, 10, S("a234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 5, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 5, 1, S("a6"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 5, 2, S("a67"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 5, 4, S("a6789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 5, 5, S("a67890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 5, 6, S("a67890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 9, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 9, 1, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 9, 2, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 10, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 10, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 0, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 0, 19, S("a1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 0, 20, S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 0, 21, S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 1, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 1, 1, S("a2"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 1, 18, S("a234567890123456789"));
+TEST_CONSTEXPR_CXX20 bool test44() {
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 1, 4, S("a2345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 1, 8, S("a23456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 1, 9, S("a234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 1, 10, S("a234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 5, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 5, 1, S("a6t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 5, 2, S("a67t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 5, 4, S("a6789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 5, 5, S("a67890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 5, 6, S("a67890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 9, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 9, 1, S("a0t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 9, 2, S("a0t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 10, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 10, 1, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 0, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 0, 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 0, 10, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 0, 19, S("a1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 0, 20, S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 0, 21, S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 1, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 1, 1, S("a2t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 1, 9, S("a234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 1, 18, S("a234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 1, 19, S("a2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 1, 20, S("a2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 10, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 10, 1, S("a1t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 10, 5, S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 10, 9, S("a123456789t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 10, 10, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 10, 11, S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 19, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 19, 1, S("a0t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 19, 2, S("a0t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 20, 0, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 20, 1, S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 0, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 0, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 0, 2, S("a12"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 0, 4, S("a1234"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 0, 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 0, 6, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 1, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 1, 1, S("a2"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 1, 2, S("a23"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 1, 3, S("a234"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 1, 4, S("a2345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 1, 5, S("a2345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 2, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 2, 1, S("a3"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 2, 2, S("a34"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 2, 3, S("a345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 2, 4, S("a345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 4, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 4, 1, S("a5"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 4, 2, S("a5"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 5, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 5, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 0, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 0, 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 0, 9, S("a123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 0, 11, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 1, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 1, 1, S("a2"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 1, 4, S("a2345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 1, 8, S("a23456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 1, 10, S("a234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 5, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 5, 1, S("a6"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 5, 2, S("a67"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 5, 4, S("a6789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 5, 5, S("a67890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 5, 6, S("a67890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 9, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 9, 1, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 9, 2, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 10, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 10, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 0, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 0, 19, S("a1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 0, 20, S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 0, 21, S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 1, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 1, 1, S("a2"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 1, 18, S("a234567890123456789"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test45()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 1, 19, S("a2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 1, 20, S("a2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 10, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 10, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 10, 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 10, 9, S("a123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 10, 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 10, 11, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 19, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 19, 1, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 19, 2, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 20, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 20, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 0, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 0, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 0, 2, S("a12"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 0, 4, S("a1234"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 0, 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 0, 6, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 1, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 1, 1, S("a2"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 1, 2, S("a23"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 1, 3, S("a234"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 1, 4, S("a2345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 1, 5, S("a2345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 2, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 2, 1, S("a3"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 2, 2, S("a34"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 2, 3, S("a345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 2, 4, S("a345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 4, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 4, 1, S("a5"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 4, 2, S("a5"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 5, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 5, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 0, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 0, 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 0, 9, S("a123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 0, 11, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 1, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 1, 1, S("a2"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 1, 4, S("a2345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 1, 8, S("a23456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 1, 10, S("a234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 5, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 5, 1, S("a6"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 5, 2, S("a67"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 5, 4, S("a6789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 5, 5, S("a67890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 5, 6, S("a67890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 9, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 9, 1, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 9, 2, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 10, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 10, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 0, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 0, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 0, 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 0, 19, S("a1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 0, 20, S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 0, 21, S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 1, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 1, 1, S("a2"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 1, 9, S("a234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 1, 18, S("a234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 1, 19, S("a2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 1, 20, S("a2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 10, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 10, 1, S("a1"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 10, 5, S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 10, 9, S("a123456789"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 10, 10, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 10, 11, S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 19, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 19, 1, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 19, 2, S("a0"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 20, 0, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 20, 1, S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 0, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 0, 2, S("abcdefghij12klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 0, 4, S("abcdefghij1234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 0, 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 0, 6, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 1, 1, S("abcdefghij2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 1, 2, S("abcdefghij23klmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test45() {
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 1, 19, S("a2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 1, 20, S("a2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 10, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 10, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 10, 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 10, 9, S("a123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 10, 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 10, 11, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 19, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 19, 1, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 19, 2, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 20, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 20, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 0, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 0, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 0, 2, S("a12"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 0, 4, S("a1234"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 0, 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 0, 6, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 1, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 1, 1, S("a2"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 1, 2, S("a23"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 1, 3, S("a234"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 1, 4, S("a2345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 1, 5, S("a2345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 2, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 2, 1, S("a3"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 2, 2, S("a34"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 2, 3, S("a345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 2, 4, S("a345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 4, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 4, 1, S("a5"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 4, 2, S("a5"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 5, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 5, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 0, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 0, 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 0, 9, S("a123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 0, 11, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 1, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 1, 1, S("a2"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 1, 4, S("a2345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 1, 8, S("a23456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 1, 10, S("a234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 5, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 5, 1, S("a6"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 5, 2, S("a67"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 5, 4, S("a6789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 5, 5, S("a67890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 5, 6, S("a67890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 9, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 9, 1, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 9, 2, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 10, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 10, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 0, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 0, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 0, 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 0, 19, S("a1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 0, 20, S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 0, 21, S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 1, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 1, 1, S("a2"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 1, 9, S("a234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 1, 18, S("a234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 1, 19, S("a2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 1, 20, S("a2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 10, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 10, 1, S("a1"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 10, 5, S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 10, 9, S("a123456789"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 10, 10, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 10, 11, S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 19, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 19, 1, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 19, 2, S("a0"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 20, 0, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 20, 1, S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 0, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 0, 2, S("abcdefghij12klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 0, 4, S("abcdefghij1234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 0, 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 0, 6, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 1, 1, S("abcdefghij2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 1, 2, S("abcdefghij23klmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test46()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 1, 3, S("abcdefghij234klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 1, 4, S("abcdefghij2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 1, 5, S("abcdefghij2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 2, 1, S("abcdefghij3klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 2, 2, S("abcdefghij34klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 2, 3, S("abcdefghij345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 2, 4, S("abcdefghij345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 4, 1, S("abcdefghij5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 4, 2, S("abcdefghij5klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 0, 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 0, 9, S("abcdefghij123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 0, 11, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 1, 4, S("abcdefghij2345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 1, 8, S("abcdefghij23456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 1, 10, S("abcdefghij234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 5, 1, S("abcdefghij6klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 5, 2, S("abcdefghij67klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 5, 4, S("abcdefghij6789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 5, 5, S("abcdefghij67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 5, 6, S("abcdefghij67890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 9, 1, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 9, 2, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 10, 1, S("abcdefghij1klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 10, 5, S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 10, 9, S("abcdefghij123456789klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 19, 1, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 19, 2, S("abcdefghij0klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 0, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 0, 1, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 0, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 0, 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 0, 2, S("abcdefghij12lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 0, 4, S("abcdefghij1234lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 0, 5, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 0, 6, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 1, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 1, 1, S("abcdefghij2lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 1, 2, S("abcdefghij23lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 1, 3, S("abcdefghij234lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 1, 4, S("abcdefghij2345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 1, 5, S("abcdefghij2345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 2, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 2, 1, S("abcdefghij3lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 2, 2, S("abcdefghij34lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 2, 3, S("abcdefghij345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 2, 4, S("abcdefghij345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 4, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 4, 1, S("abcdefghij5lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 4, 2, S("abcdefghij5lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 5, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 5, 1, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 0, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 0, 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 0, 5, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 0, 9, S("abcdefghij123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 0, 10, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 0, 11, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 1, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 1, 1, S("abcdefghij2lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 1, 4, S("abcdefghij2345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 1, 8, S("abcdefghij23456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 1, 9, S("abcdefghij234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 1, 10, S("abcdefghij234567890lmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test46() {
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 1, 3, S("abcdefghij234klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 1, 4, S("abcdefghij2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 1, 5, S("abcdefghij2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 2, 1, S("abcdefghij3klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 2, 2, S("abcdefghij34klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 2, 3, S("abcdefghij345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 2, 4, S("abcdefghij345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 4, 1, S("abcdefghij5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 4, 2, S("abcdefghij5klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 0, 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 0, 9, S("abcdefghij123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 0, 11, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 1, 4, S("abcdefghij2345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 1, 8, S("abcdefghij23456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 1, 10, S("abcdefghij234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 5, 1, S("abcdefghij6klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 5, 2, S("abcdefghij67klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 5, 4, S("abcdefghij6789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 5, 5, S("abcdefghij67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 5, 6, S("abcdefghij67890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 9, 1, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 9, 2, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 0, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890klmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       10,
+       0,
+       S("12345678901234567890"),
+       0,
+       20,
+       S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"),
+       10,
+       0,
+       S("12345678901234567890"),
+       0,
+       21,
+       S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 1, 1, S("abcdefghij2klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 1, 9, S("abcdefghij234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789klmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890klmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 10, 1, S("abcdefghij1klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 10, 5, S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 10, 9, S("abcdefghij123456789klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 19, 1, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 19, 2, S("abcdefghij0klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 0, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 0, 1, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 0, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 0, 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 0, 2, S("abcdefghij12lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 0, 4, S("abcdefghij1234lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 0, 5, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 0, 6, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 1, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 1, 1, S("abcdefghij2lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 1, 2, S("abcdefghij23lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 1, 3, S("abcdefghij234lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 1, 4, S("abcdefghij2345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 1, 5, S("abcdefghij2345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 2, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 2, 1, S("abcdefghij3lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 2, 2, S("abcdefghij34lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 2, 3, S("abcdefghij345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 2, 4, S("abcdefghij345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 4, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 4, 1, S("abcdefghij5lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 4, 2, S("abcdefghij5lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 5, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 5, 1, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 0, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 0, 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 0, 5, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 0, 9, S("abcdefghij123456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 0, 10, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 0, 11, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 1, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 1, 1, S("abcdefghij2lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 1, 4, S("abcdefghij2345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 1, 8, S("abcdefghij23456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 1, 9, S("abcdefghij234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 1, 10, S("abcdefghij234567890lmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test47()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 5, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 5, 1, S("abcdefghij6lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 5, 2, S("abcdefghij67lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 5, 4, S("abcdefghij6789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 5, 5, S("abcdefghij67890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 5, 6, S("abcdefghij67890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 9, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 9, 1, S("abcdefghij0lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 9, 2, S("abcdefghij0lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 10, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 10, 1, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 0, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 0, 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 1, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 1, 1, S("abcdefghij2lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 1, 9, S("abcdefghij234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 10, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 10, 1, S("abcdefghij1lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 10, 5, S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 10, 9, S("abcdefghij123456789lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 19, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 19, 1, S("abcdefghij0lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 19, 2, S("abcdefghij0lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 20, 0, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 20, 1, S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 0, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 0, 1, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 0, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 0, 1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 0, 2, S("abcdefghij12pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 0, 4, S("abcdefghij1234pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 0, 5, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 0, 6, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 1, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 1, 1, S("abcdefghij2pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 1, 2, S("abcdefghij23pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 1, 3, S("abcdefghij234pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 1, 4, S("abcdefghij2345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 1, 5, S("abcdefghij2345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 2, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 2, 1, S("abcdefghij3pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 2, 2, S("abcdefghij34pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 2, 3, S("abcdefghij345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 2, 4, S("abcdefghij345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 4, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 4, 1, S("abcdefghij5pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 4, 2, S("abcdefghij5pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 5, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 5, 1, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 0, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 0, 1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 0, 5, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 0, 9, S("abcdefghij123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 0, 10, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 0, 11, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 1, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 1, 1, S("abcdefghij2pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 1, 4, S("abcdefghij2345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 1, 8, S("abcdefghij23456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 1, 9, S("abcdefghij234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 1, 10, S("abcdefghij234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 5, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 5, 1, S("abcdefghij6pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 5, 2, S("abcdefghij67pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 5, 4, S("abcdefghij6789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 5, 5, S("abcdefghij67890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 5, 6, S("abcdefghij67890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 9, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 9, 1, S("abcdefghij0pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 9, 2, S("abcdefghij0pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 10, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 10, 1, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 0, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 0, 1, S("abcdefghij1pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 1, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 1, 1, S("abcdefghij2pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 1, 9, S("abcdefghij234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 10, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 10, 1, S("abcdefghij1pqrst"));
+TEST_CONSTEXPR_CXX20 bool test47() {
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 5, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 5, 1, S("abcdefghij6lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 5, 2, S("abcdefghij67lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 5, 4, S("abcdefghij6789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 5, 5, S("abcdefghij67890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 5, 6, S("abcdefghij67890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 9, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 9, 1, S("abcdefghij0lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 9, 2, S("abcdefghij0lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 10, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 10, 1, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 0, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 0, 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789lmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890lmnopqrst"));
+  test(
+      S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 1, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 1, 1, S("abcdefghij2lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 1, 9, S("abcdefghij234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 10, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 10, 1, S("abcdefghij1lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 10, 5, S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 10, 9, S("abcdefghij123456789lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 19, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 19, 1, S("abcdefghij0lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 19, 2, S("abcdefghij0lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 20, 0, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 20, 1, S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 0, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 0, 1, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 0, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 0, 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 0, 2, S("abcdefghij12pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 0, 4, S("abcdefghij1234pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 0, 5, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 0, 6, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 1, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 1, 1, S("abcdefghij2pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 1, 2, S("abcdefghij23pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 1, 3, S("abcdefghij234pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 1, 4, S("abcdefghij2345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 1, 5, S("abcdefghij2345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 2, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 2, 1, S("abcdefghij3pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 2, 2, S("abcdefghij34pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 2, 3, S("abcdefghij345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 2, 4, S("abcdefghij345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 4, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 4, 1, S("abcdefghij5pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 4, 2, S("abcdefghij5pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 5, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 5, 1, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 0, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 0, 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 0, 5, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 0, 9, S("abcdefghij123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 0, 10, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 0, 11, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 1, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 1, 1, S("abcdefghij2pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 1, 4, S("abcdefghij2345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 1, 8, S("abcdefghij23456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 1, 9, S("abcdefghij234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 1, 10, S("abcdefghij234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 5, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 5, 1, S("abcdefghij6pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 5, 2, S("abcdefghij67pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 5, 4, S("abcdefghij6789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 5, 5, S("abcdefghij67890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 5, 6, S("abcdefghij67890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 9, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 9, 1, S("abcdefghij0pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 9, 2, S("abcdefghij0pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 10, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 10, 1, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 0, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 0, 1, S("abcdefghij1pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 1, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 1, 1, S("abcdefghij2pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 1, 9, S("abcdefghij234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 10, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 10, 1, S("abcdefghij1pqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test48()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 10, 5, S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 10, 9, S("abcdefghij123456789pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 19, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 19, 1, S("abcdefghij0pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 19, 2, S("abcdefghij0pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 20, 0, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 20, 1, S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 0, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 0, 1, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 0, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 0, 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 0, 2, S("abcdefghij12t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 0, 4, S("abcdefghij1234t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 0, 5, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 0, 6, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 1, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 1, 1, S("abcdefghij2t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 1, 2, S("abcdefghij23t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 1, 3, S("abcdefghij234t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 1, 4, S("abcdefghij2345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 1, 5, S("abcdefghij2345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 2, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 2, 1, S("abcdefghij3t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 2, 2, S("abcdefghij34t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 2, 3, S("abcdefghij345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 2, 4, S("abcdefghij345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 4, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 4, 1, S("abcdefghij5t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 4, 2, S("abcdefghij5t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 5, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 5, 1, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 0, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 0, 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 0, 5, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 0, 9, S("abcdefghij123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 0, 10, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 0, 11, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 1, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 1, 1, S("abcdefghij2t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 1, 4, S("abcdefghij2345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 1, 8, S("abcdefghij23456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 1, 9, S("abcdefghij234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 1, 10, S("abcdefghij234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 5, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 5, 1, S("abcdefghij6t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 5, 2, S("abcdefghij67t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 5, 4, S("abcdefghij6789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 5, 5, S("abcdefghij67890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 5, 6, S("abcdefghij67890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 9, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 9, 1, S("abcdefghij0t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 9, 2, S("abcdefghij0t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 10, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 10, 1, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 0, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 0, 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 1, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 1, 1, S("abcdefghij2t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 1, 9, S("abcdefghij234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 10, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 10, 1, S("abcdefghij1t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 10, 5, S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 10, 9, S("abcdefghij123456789t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 19, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 19, 1, S("abcdefghij0t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 19, 2, S("abcdefghij0t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 20, 0, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 20, 1, S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 0, 2, S("abcdefghij12"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 0, 4, S("abcdefghij1234"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 0, 6, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 1, 2, S("abcdefghij23"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 1, 3, S("abcdefghij234"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 1, 5, S("abcdefghij2345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 2, 0, S("abcdefghij"));
+TEST_CONSTEXPR_CXX20 bool test48() {
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 10, 5, S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 10, 9, S("abcdefghij123456789pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 19, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 19, 1, S("abcdefghij0pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 19, 2, S("abcdefghij0pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 20, 0, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 20, 1, S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 0, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 0, 1, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 0, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 0, 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 0, 2, S("abcdefghij12t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 0, 4, S("abcdefghij1234t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 0, 5, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 0, 6, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 1, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 1, 1, S("abcdefghij2t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 1, 2, S("abcdefghij23t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 1, 3, S("abcdefghij234t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 1, 4, S("abcdefghij2345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 1, 5, S("abcdefghij2345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 2, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 2, 1, S("abcdefghij3t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 2, 2, S("abcdefghij34t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 2, 3, S("abcdefghij345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 2, 4, S("abcdefghij345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 4, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 4, 1, S("abcdefghij5t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 4, 2, S("abcdefghij5t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 5, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 5, 1, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 0, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 0, 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 0, 5, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 0, 9, S("abcdefghij123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 0, 10, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 0, 11, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 1, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 1, 1, S("abcdefghij2t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 1, 4, S("abcdefghij2345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 1, 8, S("abcdefghij23456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 1, 9, S("abcdefghij234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 1, 10, S("abcdefghij234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 5, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 5, 1, S("abcdefghij6t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 5, 2, S("abcdefghij67t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 5, 4, S("abcdefghij6789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 5, 5, S("abcdefghij67890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 5, 6, S("abcdefghij67890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 9, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 9, 1, S("abcdefghij0t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 9, 2, S("abcdefghij0t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 10, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 10, 1, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 0, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 0, 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 1, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 1, 1, S("abcdefghij2t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 1, 9, S("abcdefghij234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 10, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 10, 1, S("abcdefghij1t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 10, 5, S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 10, 9, S("abcdefghij123456789t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 19, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 19, 1, S("abcdefghij0t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 19, 2, S("abcdefghij0t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 20, 0, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 20, 1, S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 0, 2, S("abcdefghij12"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 0, 4, S("abcdefghij1234"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 0, 6, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 1, 2, S("abcdefghij23"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 1, 3, S("abcdefghij234"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 1, 5, S("abcdefghij2345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 2, 0, S("abcdefghij"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test49()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 2, 1, S("abcdefghij3"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 2, 2, S("abcdefghij34"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 2, 3, S("abcdefghij345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 2, 4, S("abcdefghij345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 4, 1, S("abcdefghij5"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 4, 2, S("abcdefghij5"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 0, 9, S("abcdefghij123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 0, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 1, 8, S("abcdefghij23456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 1, 10, S("abcdefghij234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 5, 1, S("abcdefghij6"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 5, 2, S("abcdefghij67"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 5, 4, S("abcdefghij6789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 5, 5, S("abcdefghij67890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 5, 6, S("abcdefghij67890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 9, 1, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 9, 2, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 10, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 10, 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 19, 1, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 19, 2, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 0, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 0, 2, S("abcdefghij12"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 0, 4, S("abcdefghij1234"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 0, 6, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 1, 2, S("abcdefghij23"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 1, 3, S("abcdefghij234"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 1, 5, S("abcdefghij2345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 2, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 2, 1, S("abcdefghij3"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 2, 2, S("abcdefghij34"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 2, 3, S("abcdefghij345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 2, 4, S("abcdefghij345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 4, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 4, 1, S("abcdefghij5"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 4, 2, S("abcdefghij5"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 5, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 0, 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 0, 9, S("abcdefghij123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 0, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 1, 4, S("abcdefghij2345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 1, 8, S("abcdefghij23456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 1, 10, S("abcdefghij234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 5, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 5, 1, S("abcdefghij6"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 5, 2, S("abcdefghij67"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 5, 4, S("abcdefghij6789"));
+TEST_CONSTEXPR_CXX20 bool test49() {
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 2, 1, S("abcdefghij3"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 2, 2, S("abcdefghij34"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 2, 3, S("abcdefghij345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 2, 4, S("abcdefghij345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 4, 1, S("abcdefghij5"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 4, 2, S("abcdefghij5"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 0, 9, S("abcdefghij123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 0, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 1, 8, S("abcdefghij23456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 1, 10, S("abcdefghij234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 5, 1, S("abcdefghij6"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 5, 2, S("abcdefghij67"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 5, 4, S("abcdefghij6789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 5, 5, S("abcdefghij67890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 5, 6, S("abcdefghij67890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 9, 1, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 9, 2, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 10, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 10, 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 19, 1, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 19, 2, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 0, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 0, 2, S("abcdefghij12"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 0, 4, S("abcdefghij1234"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 0, 6, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 1, 2, S("abcdefghij23"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 1, 3, S("abcdefghij234"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 1, 5, S("abcdefghij2345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 2, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 2, 1, S("abcdefghij3"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 2, 2, S("abcdefghij34"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 2, 3, S("abcdefghij345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 2, 4, S("abcdefghij345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 4, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 4, 1, S("abcdefghij5"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 4, 2, S("abcdefghij5"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 5, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 0, 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 0, 9, S("abcdefghij123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 0, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 1, 4, S("abcdefghij2345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 1, 8, S("abcdefghij23456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 1, 10, S("abcdefghij234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 5, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 5, 1, S("abcdefghij6"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 5, 2, S("abcdefghij67"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 5, 4, S("abcdefghij6789"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test50()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 5, 5, S("abcdefghij67890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 5, 6, S("abcdefghij67890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 9, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 9, 1, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 9, 2, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 10, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 0, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 0, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 1, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 1, 1, S("abcdefghij2"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 10, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 10, 1, S("abcdefghij1"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 10, 5, S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 19, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 19, 1, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 19, 2, S("abcdefghij0"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 20, 0, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 20, 1, S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 0, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 0, 2, S("abcdefghijklmnopqrs12t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 0, 4, S("abcdefghijklmnopqrs1234t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 0, 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 0, 6, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 1, 1, S("abcdefghijklmnopqrs2t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 1, 2, S("abcdefghijklmnopqrs23t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 1, 3, S("abcdefghijklmnopqrs234t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 1, 4, S("abcdefghijklmnopqrs2345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 1, 5, S("abcdefghijklmnopqrs2345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 2, 1, S("abcdefghijklmnopqrs3t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 2, 2, S("abcdefghijklmnopqrs34t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 2, 3, S("abcdefghijklmnopqrs345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 2, 4, S("abcdefghijklmnopqrs345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 4, 1, S("abcdefghijklmnopqrs5t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 4, 2, S("abcdefghijklmnopqrs5t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 5, 1, S("abcdefghijklmnopqrs6t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 5, 2, S("abcdefghijklmnopqrs67t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 9, 1, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 9, 2, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890t"));
+TEST_CONSTEXPR_CXX20 bool test50() {
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 5, 5, S("abcdefghij67890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 5, 6, S("abcdefghij67890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 9, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 9, 1, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 9, 2, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 10, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 0, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 0, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 0, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 0, 19, S("abcdefghij1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 0, 20, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 0, 21, S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 1, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 1, 1, S("abcdefghij2"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 1, 9, S("abcdefghij234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 1, 18, S("abcdefghij234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 1, 19, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 1, 20, S("abcdefghij2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 10, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 10, 1, S("abcdefghij1"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 10, 5, S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 10, 9, S("abcdefghij123456789"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 10, 10, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 10, 11, S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 19, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 19, 1, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 19, 2, S("abcdefghij0"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 20, 0, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 20, 1, S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 0, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 0, 2, S("abcdefghijklmnopqrs12t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 0, 4, S("abcdefghijklmnopqrs1234t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 0, 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 0, 6, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 1, 1, S("abcdefghijklmnopqrs2t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 1, 2, S("abcdefghijklmnopqrs23t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 1, 3, S("abcdefghijklmnopqrs234t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 1, 4, S("abcdefghijklmnopqrs2345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 1, 5, S("abcdefghijklmnopqrs2345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 2, 1, S("abcdefghijklmnopqrs3t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 2, 2, S("abcdefghijklmnopqrs34t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 2, 3, S("abcdefghijklmnopqrs345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 2, 4, S("abcdefghijklmnopqrs345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 4, 1, S("abcdefghijklmnopqrs5t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 4, 2, S("abcdefghijklmnopqrs5t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 5, 1, S("abcdefghijklmnopqrs6t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 5, 2, S("abcdefghijklmnopqrs67t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 9, 1, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 9, 2, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789t"));
+  test(S("abcdefghijklmnopqrst"),
+       19,
+       0,
+       S("12345678901234567890"),
+       0,
+       20,
+       S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"),
+       19,
+       0,
+       S("12345678901234567890"),
+       0,
+       21,
+       S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789t"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890t"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890t"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test51()
-{
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 0, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 0, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 0, 2, S("abcdefghijklmnopqrs12"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 0, 4, S("abcdefghijklmnopqrs1234"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 0, 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 0, 6, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 1, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 1, 1, S("abcdefghijklmnopqrs2"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 1, 2, S("abcdefghijklmnopqrs23"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 1, 3, S("abcdefghijklmnopqrs234"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 1, 4, S("abcdefghijklmnopqrs2345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 1, 5, S("abcdefghijklmnopqrs2345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 2, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 2, 1, S("abcdefghijklmnopqrs3"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 2, 2, S("abcdefghijklmnopqrs34"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 2, 3, S("abcdefghijklmnopqrs345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 2, 4, S("abcdefghijklmnopqrs345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 4, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 4, 1, S("abcdefghijklmnopqrs5"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 4, 2, S("abcdefghijklmnopqrs5"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 5, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 5, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 1, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 5, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 5, 1, S("abcdefghijklmnopqrs6"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 5, 2, S("abcdefghijklmnopqrs67"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 9, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 9, 1, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 9, 2, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 10, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 10, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 0, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 0, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 0, 2, S("abcdefghijklmnopqrs12"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 0, 4, S("abcdefghijklmnopqrs1234"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 0, 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 0, 6, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 1, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 1, 1, S("abcdefghijklmnopqrs2"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 1, 2, S("abcdefghijklmnopqrs23"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 1, 3, S("abcdefghijklmnopqrs234"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 1, 4, S("abcdefghijklmnopqrs2345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 1, 5, S("abcdefghijklmnopqrs2345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 2, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 2, 1, S("abcdefghijklmnopqrs3"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 2, 2, S("abcdefghijklmnopqrs34"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 2, 3, S("abcdefghijklmnopqrs345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 2, 4, S("abcdefghijklmnopqrs345"));
+TEST_CONSTEXPR_CXX20 bool test51() {
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 0, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 0, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 0, 2, S("abcdefghijklmnopqrs12"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 0, 4, S("abcdefghijklmnopqrs1234"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 0, 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 0, 6, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 1, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 1, 1, S("abcdefghijklmnopqrs2"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 1, 2, S("abcdefghijklmnopqrs23"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 1, 3, S("abcdefghijklmnopqrs234"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 1, 4, S("abcdefghijklmnopqrs2345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 1, 5, S("abcdefghijklmnopqrs2345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 2, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 2, 1, S("abcdefghijklmnopqrs3"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 2, 2, S("abcdefghijklmnopqrs34"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 2, 3, S("abcdefghijklmnopqrs345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 2, 4, S("abcdefghijklmnopqrs345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 4, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 4, 1, S("abcdefghijklmnopqrs5"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 4, 2, S("abcdefghijklmnopqrs5"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 5, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 5, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 1, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 5, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 5, 1, S("abcdefghijklmnopqrs6"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 5, 2, S("abcdefghijklmnopqrs67"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 9, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 9, 1, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 9, 2, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 10, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 10, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrs12345678901234567890"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 0, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 0, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 0, 2, S("abcdefghijklmnopqrs12"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 0, 4, S("abcdefghijklmnopqrs1234"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 0, 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 0, 6, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 1, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 1, 1, S("abcdefghijklmnopqrs2"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 1, 2, S("abcdefghijklmnopqrs23"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 1, 3, S("abcdefghijklmnopqrs234"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 1, 4, S("abcdefghijklmnopqrs2345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 1, 5, S("abcdefghijklmnopqrs2345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 2, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 2, 1, S("abcdefghijklmnopqrs3"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 2, 2, S("abcdefghijklmnopqrs34"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 2, 3, S("abcdefghijklmnopqrs345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 2, 4, S("abcdefghijklmnopqrs345"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test52()
-{
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 4, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 4, 1, S("abcdefghijklmnopqrs5"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 4, 2, S("abcdefghijklmnopqrs5"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 5, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 5, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 1, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 5, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 5, 1, S("abcdefghijklmnopqrs6"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 5, 2, S("abcdefghijklmnopqrs67"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 9, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 9, 1, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 9, 2, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 10, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 10, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 0, 2, S("abcdefghijklmnopqrst12"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 0, 4, S("abcdefghijklmnopqrst1234"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 0, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 0, 6, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 1, 2, S("abcdefghijklmnopqrst23"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 1, 3, S("abcdefghijklmnopqrst234"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 1, 4, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 1, 5, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 2, 1, S("abcdefghijklmnopqrst3"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 2, 2, S("abcdefghijklmnopqrst34"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 2, 3, S("abcdefghijklmnopqrst345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 2, 4, S("abcdefghijklmnopqrst345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 4, 1, S("abcdefghijklmnopqrst5"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 4, 2, S("abcdefghijklmnopqrst5"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 0, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 0, 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 0, 11, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 1, 4, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 1, 8, S("abcdefghijklmnopqrst23456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 1, 10, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 5, 1, S("abcdefghijklmnopqrst6"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 5, 2, S("abcdefghijklmnopqrst67"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 5, 4, S("abcdefghijklmnopqrst6789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 5, 5, S("abcdefghijklmnopqrst67890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 5, 6, S("abcdefghijklmnopqrst67890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 9, 1, S("abcdefghijklmnopqrst0"));
+TEST_CONSTEXPR_CXX20 bool test52() {
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 4, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 4, 1, S("abcdefghijklmnopqrs5"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 4, 2, S("abcdefghijklmnopqrs5"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 5, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 5, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 0, 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 0, 9, S("abcdefghijklmnopqrs123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 0, 11, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 1, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 1, 4, S("abcdefghijklmnopqrs2345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 1, 8, S("abcdefghijklmnopqrs23456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 1, 10, S("abcdefghijklmnopqrs234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 5, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 5, 1, S("abcdefghijklmnopqrs6"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 5, 2, S("abcdefghijklmnopqrs67"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 5, 4, S("abcdefghijklmnopqrs6789"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 5, 5, S("abcdefghijklmnopqrs67890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 5, 6, S("abcdefghijklmnopqrs67890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 9, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 9, 1, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 9, 2, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 10, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 10, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrs1234567890123456789"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrs12345678901234567890"));
+  test(
+      S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrs2"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrs234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrs234567890123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrs2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrs2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrs1"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrs123456789"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrs0"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 0, 2, S("abcdefghijklmnopqrst12"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 0, 4, S("abcdefghijklmnopqrst1234"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 0, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 0, 6, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 1, 2, S("abcdefghijklmnopqrst23"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 1, 3, S("abcdefghijklmnopqrst234"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 1, 4, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 1, 5, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 2, 1, S("abcdefghijklmnopqrst3"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 2, 2, S("abcdefghijklmnopqrst34"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 2, 3, S("abcdefghijklmnopqrst345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 2, 4, S("abcdefghijklmnopqrst345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 4, 1, S("abcdefghijklmnopqrst5"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 4, 2, S("abcdefghijklmnopqrst5"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 0, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 0, 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 0, 11, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 1, 4, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 1, 8, S("abcdefghijklmnopqrst23456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 1, 10, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 5, 1, S("abcdefghijklmnopqrst6"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 5, 2, S("abcdefghijklmnopqrst67"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 5, 4, S("abcdefghijklmnopqrst6789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 5, 5, S("abcdefghijklmnopqrst67890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 5, 6, S("abcdefghijklmnopqrst67890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 9, 1, S("abcdefghijklmnopqrst0"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test53()
-{
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 9, 2, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrst1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrst234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrst2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrst2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 0, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 0, 2, S("abcdefghijklmnopqrst12"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 0, 4, S("abcdefghijklmnopqrst1234"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 0, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 0, 6, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 1, 2, S("abcdefghijklmnopqrst23"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 1, 3, S("abcdefghijklmnopqrst234"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 1, 4, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 1, 5, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 2, 1, S("abcdefghijklmnopqrst3"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 2, 2, S("abcdefghijklmnopqrst34"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 2, 3, S("abcdefghijklmnopqrst345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 2, 4, S("abcdefghijklmnopqrst345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 4, 1, S("abcdefghijklmnopqrst5"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 4, 2, S("abcdefghijklmnopqrst5"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 0, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 0, 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 0, 11, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 1, 4, S("abcdefghijklmnopqrst2345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 1, 8, S("abcdefghijklmnopqrst23456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 1, 10, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 5, 1, S("abcdefghijklmnopqrst6"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 5, 2, S("abcdefghijklmnopqrst67"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 5, 4, S("abcdefghijklmnopqrst6789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 5, 5, S("abcdefghijklmnopqrst67890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 5, 6, S("abcdefghijklmnopqrst67890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 9, 1, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 9, 2, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrst1234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 0, 20, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 0, 21, S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrst234567890123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrst2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrst2345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrst1"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrst123456789"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrst0"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+TEST_CONSTEXPR_CXX20 bool test53() {
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 9, 2, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(
+      S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrst1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       0,
+       S("12345678901234567890"),
+       0,
+       20,
+       S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       0,
+       S("12345678901234567890"),
+       0,
+       21,
+       S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrst234567890123456789"));
+  test(
+      S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrst2345678901234567890"));
+  test(
+      S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrst2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 0, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 0, 2, S("abcdefghijklmnopqrst12"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 0, 4, S("abcdefghijklmnopqrst1234"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 0, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 0, 6, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 1, 2, S("abcdefghijklmnopqrst23"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 1, 3, S("abcdefghijklmnopqrst234"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 1, 4, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 1, 5, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 2, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 2, 1, S("abcdefghijklmnopqrst3"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 2, 2, S("abcdefghijklmnopqrst34"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 2, 3, S("abcdefghijklmnopqrst345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 2, 4, S("abcdefghijklmnopqrst345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 4, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 4, 1, S("abcdefghijklmnopqrst5"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 4, 2, S("abcdefghijklmnopqrst5"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 5, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 0, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 0, 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 0, 11, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 1, 4, S("abcdefghijklmnopqrst2345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 1, 8, S("abcdefghijklmnopqrst23456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 1, 10, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 5, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 5, 1, S("abcdefghijklmnopqrst6"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 5, 2, S("abcdefghijklmnopqrst67"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 5, 4, S("abcdefghijklmnopqrst6789"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 5, 5, S("abcdefghijklmnopqrst67890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 5, 6, S("abcdefghijklmnopqrst67890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 9, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 9, 1, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 9, 2, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 10, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 0, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 0, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 0, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(
+      S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 0, 19, S("abcdefghijklmnopqrst1234567890123456789"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       1,
+       S("12345678901234567890"),
+       0,
+       20,
+       S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"),
+       20,
+       1,
+       S("12345678901234567890"),
+       0,
+       21,
+       S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 1, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 1, 1, S("abcdefghijklmnopqrst2"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 1, 9, S("abcdefghijklmnopqrst234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 1, 18, S("abcdefghijklmnopqrst234567890123456789"));
+  test(
+      S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 1, 19, S("abcdefghijklmnopqrst2345678901234567890"));
+  test(
+      S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 1, 20, S("abcdefghijklmnopqrst2345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 10, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 10, 1, S("abcdefghijklmnopqrst1"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 10, 5, S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 10, 9, S("abcdefghijklmnopqrst123456789"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 10, 10, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 10, 11, S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 19, 0, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 19, 1, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 19, 2, S("abcdefghijklmnopqrst0"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 20, 0, S("abcdefghijklmnopqrst"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test54()
-{
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 0, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 0, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 0, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 0, 6, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 1, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 1, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 1, 3, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 1, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 1, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 2, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 2, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 2, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 2, 3, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 2, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 4, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 4, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 4, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 5, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 5, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 6, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 0, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 0, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 0, 11, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 1, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 1, 8, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 1, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 5, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 5, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 5, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 5, 4, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 5, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 5, 6, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 9, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 9, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 9, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 11, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 0, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 0, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 0, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 0, 19, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 0, 20, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 0, 21, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 1, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 1, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 1, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 1, 18, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 1, 19, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 1, 20, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 10, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 10, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 10, 5, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 10, 9, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 10, 10, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 10, 11, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 19, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 19, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 19, 2, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 20, 0, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 20, 1, S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test54() {
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 20, 1, S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("12345678901234567890"), 21, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 0, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 0, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 0, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 0, 6, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 1, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 1, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 1, 3, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 1, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 1, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 2, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 2, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 2, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 2, 3, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 2, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 4, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 4, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 4, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 5, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 5, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345"), 6, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 0, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 0, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 0, 11, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 1, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 1, 8, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 1, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 5, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 5, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 5, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 5, 4, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 5, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 5, 6, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 9, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 9, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 9, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("1234567890"), 11, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 0, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 0, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 0, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 0, 19, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 0, 20, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 0, 21, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 1, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 1, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 1, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 1, 18, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 1, 19, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 1, 20, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 10, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 10, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 10, 5, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 10, 9, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 10, 10, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 10, 11, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 19, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 19, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 19, 2, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 20, 0, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 20, 1, S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("12345678901234567890"), 21, 0, S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test55()
-{
-    test_npos(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, S("abcdefghi1234567890"));
-    test_npos(S("abcdefghij"), 9, 1, S("12345678901234567890"), 19, S("abcdefghi0"));
-    test_npos(S("abcdefghij"), 9, 1, S("12345678901234567890"), 20, S("abcdefghi"));
-    test_npos(S("abcdefghij"), 9, 1, S("12345678901234567890"), 20, S("abcdefghi"));
-    test_npos(S("abcdefghij"), 9, 1, S("12345678901234567890"), 21, S("can't happen"));
-    test_npos(S("abcdefghij"), 9, 2, S(""), 0, S("abcdefghi"));
-    test_npos(S("abcdefghij"), 9, 2, S(""), 1, S("can't happen"));
-    test_npos(S("abcdefghij"), 9, 2, S("12345"), 0, S("abcdefghi12345"));
-    test_npos(S("abcdefghij"), 9, 2, S("12345"), 1, S("abcdefghi2345"));
-    test_npos(S("abcdefghij"), 9, 2, S("12345"), 2, S("abcdefghi345"));
-    test_npos(S("abcdefghij"), 9, 2, S("12345"), 4, S("abcdefghi5"));
-    test_npos(S("abcdefghij"), 9, 2, S("12345"), 5, S("abcdefghi"));
-    test_npos(S("abcdefghij"), 9, 2, S("12345"), 6, S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test55() {
+  test_npos(S("abcdefghij"), 9, 1, S("12345678901234567890"), 10, S("abcdefghi1234567890"));
+  test_npos(S("abcdefghij"), 9, 1, S("12345678901234567890"), 19, S("abcdefghi0"));
+  test_npos(S("abcdefghij"), 9, 1, S("12345678901234567890"), 20, S("abcdefghi"));
+  test_npos(S("abcdefghij"), 9, 1, S("12345678901234567890"), 20, S("abcdefghi"));
+  test_npos(S("abcdefghij"), 9, 1, S("12345678901234567890"), 21, S("can't happen"));
+  test_npos(S("abcdefghij"), 9, 2, S(""), 0, S("abcdefghi"));
+  test_npos(S("abcdefghij"), 9, 2, S(""), 1, S("can't happen"));
+  test_npos(S("abcdefghij"), 9, 2, S("12345"), 0, S("abcdefghi12345"));
+  test_npos(S("abcdefghij"), 9, 2, S("12345"), 1, S("abcdefghi2345"));
+  test_npos(S("abcdefghij"), 9, 2, S("12345"), 2, S("abcdefghi345"));
+  test_npos(S("abcdefghij"), 9, 2, S("12345"), 4, S("abcdefghi5"));
+  test_npos(S("abcdefghij"), 9, 2, S("12345"), 5, S("abcdefghi"));
+  test_npos(S("abcdefghij"), 9, 2, S("12345"), 6, S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
@@ -6092,8 +6095,7 @@ void test() {
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_view.pass.cpp
index fb22f84fa686e7a..1e9965511f14a3d 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_replace/size_size_string_view.pass.cpp
@@ -20,352 +20,342 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(S s, typename S::size_type pos1, typename S::size_type n1, SV sv, S expected)
-{
-    const typename S::size_type old_size = s.size();
-    S s0 = s;
-    if (pos1 <= old_size)
-    {
-        s.replace(pos1, n1, sv);
-        LIBCPP_ASSERT(s.__invariants());
-        assert(s == expected);
-        typename S::size_type xlen = std::min(n1, old_size - pos1);
-        typename S::size_type rlen = sv.size();
-        assert(s.size() == old_size - xlen + rlen);
-    }
+TEST_CONSTEXPR_CXX20 void test(S s, typename S::size_type pos1, typename S::size_type n1, SV sv, S expected) {
+  const typename S::size_type old_size = s.size();
+  S s0                                 = s;
+  if (pos1 <= old_size) {
+    s.replace(pos1, n1, sv);
+    LIBCPP_ASSERT(s.__invariants());
+    assert(s == expected);
+    typename S::size_type xlen = std::min(n1, old_size - pos1);
+    typename S::size_type rlen = sv.size();
+    assert(s.size() == old_size - xlen + rlen);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            s.replace(pos1, n1, sv);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > old_size);
-            assert(s == s0);
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      s.replace(pos1, n1, sv);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > old_size);
+      assert(s == s0);
     }
+  }
 #endif
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, SV(""), S(""));
-    test(S(""), 0, 0, SV("12345"), S("12345"));
-    test(S(""), 0, 0, SV("1234567890"), S("1234567890"));
-    test(S(""), 0, 0, SV("12345678901234567890"), S("12345678901234567890"));
-    test(S(""), 0, 1, SV(""), S(""));
-    test(S(""), 0, 1, SV("12345"), S("12345"));
-    test(S(""), 0, 1, SV("1234567890"), S("1234567890"));
-    test(S(""), 0, 1, SV("12345678901234567890"), S("12345678901234567890"));
-    test(S(""), 1, 0, SV(""), S("can't happen"));
-    test(S(""), 1, 0, SV("12345"), S("can't happen"));
-    test(S(""), 1, 0, SV("1234567890"), S("can't happen"));
-    test(S(""), 1, 0, SV("12345678901234567890"), S("can't happen"));
-    test(S("abcde"), 0, 0, SV(""), S("abcde"));
-    test(S("abcde"), 0, 0, SV("12345"), S("12345abcde"));
-    test(S("abcde"), 0, 0, SV("1234567890"), S("1234567890abcde"));
-    test(S("abcde"), 0, 0, SV("12345678901234567890"), S("12345678901234567890abcde"));
-    test(S("abcde"), 0, 1, SV(""), S("bcde"));
-    test(S("abcde"), 0, 1, SV("12345"), S("12345bcde"));
-    test(S("abcde"), 0, 1, SV("1234567890"), S("1234567890bcde"));
-    test(S("abcde"), 0, 1, SV("12345678901234567890"), S("12345678901234567890bcde"));
-    test(S("abcde"), 0, 2, SV(""), S("cde"));
-    test(S("abcde"), 0, 2, SV("12345"), S("12345cde"));
-    test(S("abcde"), 0, 2, SV("1234567890"), S("1234567890cde"));
-    test(S("abcde"), 0, 2, SV("12345678901234567890"), S("12345678901234567890cde"));
-    test(S("abcde"), 0, 4, SV(""), S("e"));
-    test(S("abcde"), 0, 4, SV("12345"), S("12345e"));
-    test(S("abcde"), 0, 4, SV("1234567890"), S("1234567890e"));
-    test(S("abcde"), 0, 4, SV("12345678901234567890"), S("12345678901234567890e"));
-    test(S("abcde"), 0, 5, SV(""), S(""));
-    test(S("abcde"), 0, 5, SV("12345"), S("12345"));
-    test(S("abcde"), 0, 5, SV("1234567890"), S("1234567890"));
-    test(S("abcde"), 0, 5, SV("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcde"), 0, 6, SV(""), S(""));
-    test(S("abcde"), 0, 6, SV("12345"), S("12345"));
-    test(S("abcde"), 0, 6, SV("1234567890"), S("1234567890"));
-    test(S("abcde"), 0, 6, SV("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcde"), 1, 0, SV(""), S("abcde"));
-    test(S("abcde"), 1, 0, SV("12345"), S("a12345bcde"));
-    test(S("abcde"), 1, 0, SV("1234567890"), S("a1234567890bcde"));
-    test(S("abcde"), 1, 0, SV("12345678901234567890"), S("a12345678901234567890bcde"));
-    test(S("abcde"), 1, 1, SV(""), S("acde"));
-    test(S("abcde"), 1, 1, SV("12345"), S("a12345cde"));
-    test(S("abcde"), 1, 1, SV("1234567890"), S("a1234567890cde"));
-    test(S("abcde"), 1, 1, SV("12345678901234567890"), S("a12345678901234567890cde"));
-    test(S("abcde"), 1, 2, SV(""), S("ade"));
-    test(S("abcde"), 1, 2, SV("12345"), S("a12345de"));
-    test(S("abcde"), 1, 2, SV("1234567890"), S("a1234567890de"));
-    test(S("abcde"), 1, 2, SV("12345678901234567890"), S("a12345678901234567890de"));
-    test(S("abcde"), 1, 3, SV(""), S("ae"));
-    test(S("abcde"), 1, 3, SV("12345"), S("a12345e"));
-    test(S("abcde"), 1, 3, SV("1234567890"), S("a1234567890e"));
-    test(S("abcde"), 1, 3, SV("12345678901234567890"), S("a12345678901234567890e"));
-    test(S("abcde"), 1, 4, SV(""), S("a"));
-    test(S("abcde"), 1, 4, SV("12345"), S("a12345"));
-    test(S("abcde"), 1, 4, SV("1234567890"), S("a1234567890"));
-    test(S("abcde"), 1, 4, SV("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcde"), 1, 5, SV(""), S("a"));
-    test(S("abcde"), 1, 5, SV("12345"), S("a12345"));
-    test(S("abcde"), 1, 5, SV("1234567890"), S("a1234567890"));
-    test(S("abcde"), 1, 5, SV("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcde"), 2, 0, SV(""), S("abcde"));
-    test(S("abcde"), 2, 0, SV("12345"), S("ab12345cde"));
-    test(S("abcde"), 2, 0, SV("1234567890"), S("ab1234567890cde"));
-    test(S("abcde"), 2, 0, SV("12345678901234567890"), S("ab12345678901234567890cde"));
-    test(S("abcde"), 2, 1, SV(""), S("abde"));
-    test(S("abcde"), 2, 1, SV("12345"), S("ab12345de"));
-    test(S("abcde"), 2, 1, SV("1234567890"), S("ab1234567890de"));
-    test(S("abcde"), 2, 1, SV("12345678901234567890"), S("ab12345678901234567890de"));
-    test(S("abcde"), 2, 2, SV(""), S("abe"));
-    test(S("abcde"), 2, 2, SV("12345"), S("ab12345e"));
-    test(S("abcde"), 2, 2, SV("1234567890"), S("ab1234567890e"));
-    test(S("abcde"), 2, 2, SV("12345678901234567890"), S("ab12345678901234567890e"));
-    test(S("abcde"), 2, 3, SV(""), S("ab"));
-    test(S("abcde"), 2, 3, SV("12345"), S("ab12345"));
-    test(S("abcde"), 2, 3, SV("1234567890"), S("ab1234567890"));
-    test(S("abcde"), 2, 3, SV("12345678901234567890"), S("ab12345678901234567890"));
-    test(S("abcde"), 2, 4, SV(""), S("ab"));
-    test(S("abcde"), 2, 4, SV("12345"), S("ab12345"));
-    test(S("abcde"), 2, 4, SV("1234567890"), S("ab1234567890"));
-    test(S("abcde"), 2, 4, SV("12345678901234567890"), S("ab12345678901234567890"));
-    test(S("abcde"), 4, 0, SV(""), S("abcde"));
-    test(S("abcde"), 4, 0, SV("12345"), S("abcd12345e"));
-    test(S("abcde"), 4, 0, SV("1234567890"), S("abcd1234567890e"));
-    test(S("abcde"), 4, 0, SV("12345678901234567890"), S("abcd12345678901234567890e"));
-    test(S("abcde"), 4, 1, SV(""), S("abcd"));
-    test(S("abcde"), 4, 1, SV("12345"), S("abcd12345"));
-    test(S("abcde"), 4, 1, SV("1234567890"), S("abcd1234567890"));
-    test(S("abcde"), 4, 1, SV("12345678901234567890"), S("abcd12345678901234567890"));
-    test(S("abcde"), 4, 2, SV(""), S("abcd"));
-    test(S("abcde"), 4, 2, SV("12345"), S("abcd12345"));
-    test(S("abcde"), 4, 2, SV("1234567890"), S("abcd1234567890"));
-    test(S("abcde"), 4, 2, SV("12345678901234567890"), S("abcd12345678901234567890"));
-    test(S("abcde"), 5, 0, SV(""), S("abcde"));
-    test(S("abcde"), 5, 0, SV("12345"), S("abcde12345"));
-    test(S("abcde"), 5, 0, SV("1234567890"), S("abcde1234567890"));
-    test(S("abcde"), 5, 0, SV("12345678901234567890"), S("abcde12345678901234567890"));
-    test(S("abcde"), 5, 1, SV(""), S("abcde"));
-    test(S("abcde"), 5, 1, SV("12345"), S("abcde12345"));
-    test(S("abcde"), 5, 1, SV("1234567890"), S("abcde1234567890"));
-    test(S("abcde"), 5, 1, SV("12345678901234567890"), S("abcde12345678901234567890"));
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, SV(""), S(""));
+  test(S(""), 0, 0, SV("12345"), S("12345"));
+  test(S(""), 0, 0, SV("1234567890"), S("1234567890"));
+  test(S(""), 0, 0, SV("12345678901234567890"), S("12345678901234567890"));
+  test(S(""), 0, 1, SV(""), S(""));
+  test(S(""), 0, 1, SV("12345"), S("12345"));
+  test(S(""), 0, 1, SV("1234567890"), S("1234567890"));
+  test(S(""), 0, 1, SV("12345678901234567890"), S("12345678901234567890"));
+  test(S(""), 1, 0, SV(""), S("can't happen"));
+  test(S(""), 1, 0, SV("12345"), S("can't happen"));
+  test(S(""), 1, 0, SV("1234567890"), S("can't happen"));
+  test(S(""), 1, 0, SV("12345678901234567890"), S("can't happen"));
+  test(S("abcde"), 0, 0, SV(""), S("abcde"));
+  test(S("abcde"), 0, 0, SV("12345"), S("12345abcde"));
+  test(S("abcde"), 0, 0, SV("1234567890"), S("1234567890abcde"));
+  test(S("abcde"), 0, 0, SV("12345678901234567890"), S("12345678901234567890abcde"));
+  test(S("abcde"), 0, 1, SV(""), S("bcde"));
+  test(S("abcde"), 0, 1, SV("12345"), S("12345bcde"));
+  test(S("abcde"), 0, 1, SV("1234567890"), S("1234567890bcde"));
+  test(S("abcde"), 0, 1, SV("12345678901234567890"), S("12345678901234567890bcde"));
+  test(S("abcde"), 0, 2, SV(""), S("cde"));
+  test(S("abcde"), 0, 2, SV("12345"), S("12345cde"));
+  test(S("abcde"), 0, 2, SV("1234567890"), S("1234567890cde"));
+  test(S("abcde"), 0, 2, SV("12345678901234567890"), S("12345678901234567890cde"));
+  test(S("abcde"), 0, 4, SV(""), S("e"));
+  test(S("abcde"), 0, 4, SV("12345"), S("12345e"));
+  test(S("abcde"), 0, 4, SV("1234567890"), S("1234567890e"));
+  test(S("abcde"), 0, 4, SV("12345678901234567890"), S("12345678901234567890e"));
+  test(S("abcde"), 0, 5, SV(""), S(""));
+  test(S("abcde"), 0, 5, SV("12345"), S("12345"));
+  test(S("abcde"), 0, 5, SV("1234567890"), S("1234567890"));
+  test(S("abcde"), 0, 5, SV("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcde"), 0, 6, SV(""), S(""));
+  test(S("abcde"), 0, 6, SV("12345"), S("12345"));
+  test(S("abcde"), 0, 6, SV("1234567890"), S("1234567890"));
+  test(S("abcde"), 0, 6, SV("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcde"), 1, 0, SV(""), S("abcde"));
+  test(S("abcde"), 1, 0, SV("12345"), S("a12345bcde"));
+  test(S("abcde"), 1, 0, SV("1234567890"), S("a1234567890bcde"));
+  test(S("abcde"), 1, 0, SV("12345678901234567890"), S("a12345678901234567890bcde"));
+  test(S("abcde"), 1, 1, SV(""), S("acde"));
+  test(S("abcde"), 1, 1, SV("12345"), S("a12345cde"));
+  test(S("abcde"), 1, 1, SV("1234567890"), S("a1234567890cde"));
+  test(S("abcde"), 1, 1, SV("12345678901234567890"), S("a12345678901234567890cde"));
+  test(S("abcde"), 1, 2, SV(""), S("ade"));
+  test(S("abcde"), 1, 2, SV("12345"), S("a12345de"));
+  test(S("abcde"), 1, 2, SV("1234567890"), S("a1234567890de"));
+  test(S("abcde"), 1, 2, SV("12345678901234567890"), S("a12345678901234567890de"));
+  test(S("abcde"), 1, 3, SV(""), S("ae"));
+  test(S("abcde"), 1, 3, SV("12345"), S("a12345e"));
+  test(S("abcde"), 1, 3, SV("1234567890"), S("a1234567890e"));
+  test(S("abcde"), 1, 3, SV("12345678901234567890"), S("a12345678901234567890e"));
+  test(S("abcde"), 1, 4, SV(""), S("a"));
+  test(S("abcde"), 1, 4, SV("12345"), S("a12345"));
+  test(S("abcde"), 1, 4, SV("1234567890"), S("a1234567890"));
+  test(S("abcde"), 1, 4, SV("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcde"), 1, 5, SV(""), S("a"));
+  test(S("abcde"), 1, 5, SV("12345"), S("a12345"));
+  test(S("abcde"), 1, 5, SV("1234567890"), S("a1234567890"));
+  test(S("abcde"), 1, 5, SV("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcde"), 2, 0, SV(""), S("abcde"));
+  test(S("abcde"), 2, 0, SV("12345"), S("ab12345cde"));
+  test(S("abcde"), 2, 0, SV("1234567890"), S("ab1234567890cde"));
+  test(S("abcde"), 2, 0, SV("12345678901234567890"), S("ab12345678901234567890cde"));
+  test(S("abcde"), 2, 1, SV(""), S("abde"));
+  test(S("abcde"), 2, 1, SV("12345"), S("ab12345de"));
+  test(S("abcde"), 2, 1, SV("1234567890"), S("ab1234567890de"));
+  test(S("abcde"), 2, 1, SV("12345678901234567890"), S("ab12345678901234567890de"));
+  test(S("abcde"), 2, 2, SV(""), S("abe"));
+  test(S("abcde"), 2, 2, SV("12345"), S("ab12345e"));
+  test(S("abcde"), 2, 2, SV("1234567890"), S("ab1234567890e"));
+  test(S("abcde"), 2, 2, SV("12345678901234567890"), S("ab12345678901234567890e"));
+  test(S("abcde"), 2, 3, SV(""), S("ab"));
+  test(S("abcde"), 2, 3, SV("12345"), S("ab12345"));
+  test(S("abcde"), 2, 3, SV("1234567890"), S("ab1234567890"));
+  test(S("abcde"), 2, 3, SV("12345678901234567890"), S("ab12345678901234567890"));
+  test(S("abcde"), 2, 4, SV(""), S("ab"));
+  test(S("abcde"), 2, 4, SV("12345"), S("ab12345"));
+  test(S("abcde"), 2, 4, SV("1234567890"), S("ab1234567890"));
+  test(S("abcde"), 2, 4, SV("12345678901234567890"), S("ab12345678901234567890"));
+  test(S("abcde"), 4, 0, SV(""), S("abcde"));
+  test(S("abcde"), 4, 0, SV("12345"), S("abcd12345e"));
+  test(S("abcde"), 4, 0, SV("1234567890"), S("abcd1234567890e"));
+  test(S("abcde"), 4, 0, SV("12345678901234567890"), S("abcd12345678901234567890e"));
+  test(S("abcde"), 4, 1, SV(""), S("abcd"));
+  test(S("abcde"), 4, 1, SV("12345"), S("abcd12345"));
+  test(S("abcde"), 4, 1, SV("1234567890"), S("abcd1234567890"));
+  test(S("abcde"), 4, 1, SV("12345678901234567890"), S("abcd12345678901234567890"));
+  test(S("abcde"), 4, 2, SV(""), S("abcd"));
+  test(S("abcde"), 4, 2, SV("12345"), S("abcd12345"));
+  test(S("abcde"), 4, 2, SV("1234567890"), S("abcd1234567890"));
+  test(S("abcde"), 4, 2, SV("12345678901234567890"), S("abcd12345678901234567890"));
+  test(S("abcde"), 5, 0, SV(""), S("abcde"));
+  test(S("abcde"), 5, 0, SV("12345"), S("abcde12345"));
+  test(S("abcde"), 5, 0, SV("1234567890"), S("abcde1234567890"));
+  test(S("abcde"), 5, 0, SV("12345678901234567890"), S("abcde12345678901234567890"));
+  test(S("abcde"), 5, 1, SV(""), S("abcde"));
+  test(S("abcde"), 5, 1, SV("12345"), S("abcde12345"));
+  test(S("abcde"), 5, 1, SV("1234567890"), S("abcde1234567890"));
+  test(S("abcde"), 5, 1, SV("12345678901234567890"), S("abcde12345678901234567890"));
 
-    return true;
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S("abcde"), 6, 0, SV(""), S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345"), S("can't happen"));
-    test(S("abcde"), 6, 0, SV("1234567890"), S("can't happen"));
-    test(S("abcde"), 6, 0, SV("12345678901234567890"), S("can't happen"));
-    test(S("abcdefghij"), 0, 0, SV(""), S("abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345"), S("12345abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("1234567890"), S("1234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), S("12345678901234567890abcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV(""), S("bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345"), S("12345bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("1234567890"), S("1234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), S("12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 0, 5, SV(""), S("fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345"), S("12345fghij"));
-    test(S("abcdefghij"), 0, 5, SV("1234567890"), S("1234567890fghij"));
-    test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), S("12345678901234567890fghij"));
-    test(S("abcdefghij"), 0, 9, SV(""), S("j"));
-    test(S("abcdefghij"), 0, 9, SV("12345"), S("12345j"));
-    test(S("abcdefghij"), 0, 9, SV("1234567890"), S("1234567890j"));
-    test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), S("12345678901234567890j"));
-    test(S("abcdefghij"), 0, 10, SV(""), S(""));
-    test(S("abcdefghij"), 0, 10, SV("12345"), S("12345"));
-    test(S("abcdefghij"), 0, 10, SV("1234567890"), S("1234567890"));
-    test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcdefghij"), 0, 11, SV(""), S(""));
-    test(S("abcdefghij"), 0, 11, SV("12345"), S("12345"));
-    test(S("abcdefghij"), 0, 11, SV("1234567890"), S("1234567890"));
-    test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcdefghij"), 1, 0, SV(""), S("abcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345"), S("a12345bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("1234567890"), S("a1234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), S("a12345678901234567890bcdefghij"));
-    test(S("abcdefghij"), 1, 1, SV(""), S("acdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345"), S("a12345cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("1234567890"), S("a1234567890cdefghij"));
-    test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), S("a12345678901234567890cdefghij"));
-    test(S("abcdefghij"), 1, 4, SV(""), S("afghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345"), S("a12345fghij"));
-    test(S("abcdefghij"), 1, 4, SV("1234567890"), S("a1234567890fghij"));
-    test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), S("a12345678901234567890fghij"));
-    test(S("abcdefghij"), 1, 8, SV(""), S("aj"));
-    test(S("abcdefghij"), 1, 8, SV("12345"), S("a12345j"));
-    test(S("abcdefghij"), 1, 8, SV("1234567890"), S("a1234567890j"));
-    test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), S("a12345678901234567890j"));
-    test(S("abcdefghij"), 1, 9, SV(""), S("a"));
-    test(S("abcdefghij"), 1, 9, SV("12345"), S("a12345"));
-    test(S("abcdefghij"), 1, 9, SV("1234567890"), S("a1234567890"));
-    test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcdefghij"), 1, 10, SV(""), S("a"));
-    test(S("abcdefghij"), 1, 10, SV("12345"), S("a12345"));
-    test(S("abcdefghij"), 1, 10, SV("1234567890"), S("a1234567890"));
-    test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcdefghij"), 5, 0, SV(""), S("abcdefghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345"), S("abcde12345fghij"));
-    test(S("abcdefghij"), 5, 0, SV("1234567890"), S("abcde1234567890fghij"));
-    test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), S("abcde12345678901234567890fghij"));
-    test(S("abcdefghij"), 5, 1, SV(""), S("abcdeghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345"), S("abcde12345ghij"));
-    test(S("abcdefghij"), 5, 1, SV("1234567890"), S("abcde1234567890ghij"));
-    test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), S("abcde12345678901234567890ghij"));
-    test(S("abcdefghij"), 5, 2, SV(""), S("abcdehij"));
-    test(S("abcdefghij"), 5, 2, SV("12345"), S("abcde12345hij"));
-    test(S("abcdefghij"), 5, 2, SV("1234567890"), S("abcde1234567890hij"));
-    test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), S("abcde12345678901234567890hij"));
-    test(S("abcdefghij"), 5, 4, SV(""), S("abcdej"));
-    test(S("abcdefghij"), 5, 4, SV("12345"), S("abcde12345j"));
-    test(S("abcdefghij"), 5, 4, SV("1234567890"), S("abcde1234567890j"));
-    test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), S("abcde12345678901234567890j"));
-    test(S("abcdefghij"), 5, 5, SV(""), S("abcde"));
-    test(S("abcdefghij"), 5, 5, SV("12345"), S("abcde12345"));
-    test(S("abcdefghij"), 5, 5, SV("1234567890"), S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 5, 6, SV(""), S("abcde"));
-    test(S("abcdefghij"), 5, 6, SV("12345"), S("abcde12345"));
-    test(S("abcdefghij"), 5, 6, SV("1234567890"), S("abcde1234567890"));
-    test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), S("abcde12345678901234567890"));
-    test(S("abcdefghij"), 9, 0, SV(""), S("abcdefghij"));
-    test(S("abcdefghij"), 9, 0, SV("12345"), S("abcdefghi12345j"));
-    test(S("abcdefghij"), 9, 0, SV("1234567890"), S("abcdefghi1234567890j"));
-    test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), S("abcdefghi12345678901234567890j"));
-    test(S("abcdefghij"), 9, 1, SV(""), S("abcdefghi"));
-    test(S("abcdefghij"), 9, 1, SV("12345"), S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 1, SV("1234567890"), S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 9, 2, SV(""), S("abcdefghi"));
-    test(S("abcdefghij"), 9, 2, SV("12345"), S("abcdefghi12345"));
-    test(S("abcdefghij"), 9, 2, SV("1234567890"), S("abcdefghi1234567890"));
-    test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), S("abcdefghi12345678901234567890"));
-    test(S("abcdefghij"), 10, 0, SV(""), S("abcdefghij"));
-    test(S("abcdefghij"), 10, 0, SV("12345"), S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 0, SV("1234567890"), S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 10, 1, SV(""), S("abcdefghij"));
-    test(S("abcdefghij"), 10, 1, SV("12345"), S("abcdefghij12345"));
-    test(S("abcdefghij"), 10, 1, SV("1234567890"), S("abcdefghij1234567890"));
-    test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), S("abcdefghij12345678901234567890"));
-    test(S("abcdefghij"), 11, 0, SV(""), S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345"), S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("1234567890"), S("can't happen"));
-    test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S("abcde"), 6, 0, SV(""), S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345"), S("can't happen"));
+  test(S("abcde"), 6, 0, SV("1234567890"), S("can't happen"));
+  test(S("abcde"), 6, 0, SV("12345678901234567890"), S("can't happen"));
+  test(S("abcdefghij"), 0, 0, SV(""), S("abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345"), S("12345abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("1234567890"), S("1234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 0, SV("12345678901234567890"), S("12345678901234567890abcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV(""), S("bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345"), S("12345bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("1234567890"), S("1234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 1, SV("12345678901234567890"), S("12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 0, 5, SV(""), S("fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345"), S("12345fghij"));
+  test(S("abcdefghij"), 0, 5, SV("1234567890"), S("1234567890fghij"));
+  test(S("abcdefghij"), 0, 5, SV("12345678901234567890"), S("12345678901234567890fghij"));
+  test(S("abcdefghij"), 0, 9, SV(""), S("j"));
+  test(S("abcdefghij"), 0, 9, SV("12345"), S("12345j"));
+  test(S("abcdefghij"), 0, 9, SV("1234567890"), S("1234567890j"));
+  test(S("abcdefghij"), 0, 9, SV("12345678901234567890"), S("12345678901234567890j"));
+  test(S("abcdefghij"), 0, 10, SV(""), S(""));
+  test(S("abcdefghij"), 0, 10, SV("12345"), S("12345"));
+  test(S("abcdefghij"), 0, 10, SV("1234567890"), S("1234567890"));
+  test(S("abcdefghij"), 0, 10, SV("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcdefghij"), 0, 11, SV(""), S(""));
+  test(S("abcdefghij"), 0, 11, SV("12345"), S("12345"));
+  test(S("abcdefghij"), 0, 11, SV("1234567890"), S("1234567890"));
+  test(S("abcdefghij"), 0, 11, SV("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcdefghij"), 1, 0, SV(""), S("abcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345"), S("a12345bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("1234567890"), S("a1234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 0, SV("12345678901234567890"), S("a12345678901234567890bcdefghij"));
+  test(S("abcdefghij"), 1, 1, SV(""), S("acdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345"), S("a12345cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("1234567890"), S("a1234567890cdefghij"));
+  test(S("abcdefghij"), 1, 1, SV("12345678901234567890"), S("a12345678901234567890cdefghij"));
+  test(S("abcdefghij"), 1, 4, SV(""), S("afghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345"), S("a12345fghij"));
+  test(S("abcdefghij"), 1, 4, SV("1234567890"), S("a1234567890fghij"));
+  test(S("abcdefghij"), 1, 4, SV("12345678901234567890"), S("a12345678901234567890fghij"));
+  test(S("abcdefghij"), 1, 8, SV(""), S("aj"));
+  test(S("abcdefghij"), 1, 8, SV("12345"), S("a12345j"));
+  test(S("abcdefghij"), 1, 8, SV("1234567890"), S("a1234567890j"));
+  test(S("abcdefghij"), 1, 8, SV("12345678901234567890"), S("a12345678901234567890j"));
+  test(S("abcdefghij"), 1, 9, SV(""), S("a"));
+  test(S("abcdefghij"), 1, 9, SV("12345"), S("a12345"));
+  test(S("abcdefghij"), 1, 9, SV("1234567890"), S("a1234567890"));
+  test(S("abcdefghij"), 1, 9, SV("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcdefghij"), 1, 10, SV(""), S("a"));
+  test(S("abcdefghij"), 1, 10, SV("12345"), S("a12345"));
+  test(S("abcdefghij"), 1, 10, SV("1234567890"), S("a1234567890"));
+  test(S("abcdefghij"), 1, 10, SV("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcdefghij"), 5, 0, SV(""), S("abcdefghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345"), S("abcde12345fghij"));
+  test(S("abcdefghij"), 5, 0, SV("1234567890"), S("abcde1234567890fghij"));
+  test(S("abcdefghij"), 5, 0, SV("12345678901234567890"), S("abcde12345678901234567890fghij"));
+  test(S("abcdefghij"), 5, 1, SV(""), S("abcdeghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345"), S("abcde12345ghij"));
+  test(S("abcdefghij"), 5, 1, SV("1234567890"), S("abcde1234567890ghij"));
+  test(S("abcdefghij"), 5, 1, SV("12345678901234567890"), S("abcde12345678901234567890ghij"));
+  test(S("abcdefghij"), 5, 2, SV(""), S("abcdehij"));
+  test(S("abcdefghij"), 5, 2, SV("12345"), S("abcde12345hij"));
+  test(S("abcdefghij"), 5, 2, SV("1234567890"), S("abcde1234567890hij"));
+  test(S("abcdefghij"), 5, 2, SV("12345678901234567890"), S("abcde12345678901234567890hij"));
+  test(S("abcdefghij"), 5, 4, SV(""), S("abcdej"));
+  test(S("abcdefghij"), 5, 4, SV("12345"), S("abcde12345j"));
+  test(S("abcdefghij"), 5, 4, SV("1234567890"), S("abcde1234567890j"));
+  test(S("abcdefghij"), 5, 4, SV("12345678901234567890"), S("abcde12345678901234567890j"));
+  test(S("abcdefghij"), 5, 5, SV(""), S("abcde"));
+  test(S("abcdefghij"), 5, 5, SV("12345"), S("abcde12345"));
+  test(S("abcdefghij"), 5, 5, SV("1234567890"), S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 5, SV("12345678901234567890"), S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 5, 6, SV(""), S("abcde"));
+  test(S("abcdefghij"), 5, 6, SV("12345"), S("abcde12345"));
+  test(S("abcdefghij"), 5, 6, SV("1234567890"), S("abcde1234567890"));
+  test(S("abcdefghij"), 5, 6, SV("12345678901234567890"), S("abcde12345678901234567890"));
+  test(S("abcdefghij"), 9, 0, SV(""), S("abcdefghij"));
+  test(S("abcdefghij"), 9, 0, SV("12345"), S("abcdefghi12345j"));
+  test(S("abcdefghij"), 9, 0, SV("1234567890"), S("abcdefghi1234567890j"));
+  test(S("abcdefghij"), 9, 0, SV("12345678901234567890"), S("abcdefghi12345678901234567890j"));
+  test(S("abcdefghij"), 9, 1, SV(""), S("abcdefghi"));
+  test(S("abcdefghij"), 9, 1, SV("12345"), S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 1, SV("1234567890"), S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 1, SV("12345678901234567890"), S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 9, 2, SV(""), S("abcdefghi"));
+  test(S("abcdefghij"), 9, 2, SV("12345"), S("abcdefghi12345"));
+  test(S("abcdefghij"), 9, 2, SV("1234567890"), S("abcdefghi1234567890"));
+  test(S("abcdefghij"), 9, 2, SV("12345678901234567890"), S("abcdefghi12345678901234567890"));
+  test(S("abcdefghij"), 10, 0, SV(""), S("abcdefghij"));
+  test(S("abcdefghij"), 10, 0, SV("12345"), S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 0, SV("1234567890"), S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 0, SV("12345678901234567890"), S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 10, 1, SV(""), S("abcdefghij"));
+  test(S("abcdefghij"), 10, 1, SV("12345"), S("abcdefghij12345"));
+  test(S("abcdefghij"), 10, 1, SV("1234567890"), S("abcdefghij1234567890"));
+  test(S("abcdefghij"), 10, 1, SV("12345678901234567890"), S("abcdefghij12345678901234567890"));
+  test(S("abcdefghij"), 11, 0, SV(""), S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345"), S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("1234567890"), S("can't happen"));
+  test(S("abcdefghij"), 11, 0, SV("12345678901234567890"), S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), S("12345abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), S("1234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), S("12345678901234567890abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), S("bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), S("12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), S("1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), S("12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), S("klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), S("12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), S("1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), S("12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), S("t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), S("12345t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), S("1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), S("12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), S(""));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), S("12345"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), S("1234567890"));
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), S("12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), S("a12345bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), S("a1234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), S("a12345678901234567890bcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), S("acdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), S("a12345cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), S("a1234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), S("a12345678901234567890cdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), S("aklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), S("a12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), S("a1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), S("a12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), S("at"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), S("a12345t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), S("a1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), S("a12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), S("a"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), S("a12345"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), S("a1234567890"));
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), S("a12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), S("abcdefghij12345klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), S("abcdefghij1234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), S("abcdefghij12345678901234567890klmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), S("abcdefghijlmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), S("abcdefghij12345lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), S("abcdefghij1234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), S("abcdefghij12345678901234567890lmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), S("abcdefghijpqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), S("abcdefghij12345pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), S("abcdefghij1234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), S("abcdefghij12345678901234567890pqrst"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), S("abcdefghijt"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), S("abcdefghij12345t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), S("abcdefghij1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), S("abcdefghij12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), S("abcdefghij"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), S("abcdefghij12345"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), S("abcdefghij1234567890"));
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), S("abcdefghij12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), S("abcdefghijklmnopqrs12345t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), S("abcdefghijklmnopqrs1234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890t"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), S("abcdefghijklmnopqrs"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), S("abcdefghijklmnopqrs12345"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), S("abcdefghijklmnopqrs1234567890"));
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), S("abcdefghijklmnopqrst"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), S("abcdefghijklmnopqrst12345"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), S("abcdefghijklmnopqrst1234567890"));
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), S("can't happen"));
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), S("can't happen"));
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345"), S("12345abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("1234567890"), S("1234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("12345678901234567890"), S("12345678901234567890abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), S("bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345"), S("12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("1234567890"), S("1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("12345678901234567890"), S("12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), S("klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345"), S("12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("1234567890"), S("1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("12345678901234567890"), S("12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), S("t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345"), S("12345t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("1234567890"), S("1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("12345678901234567890"), S("12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345"), S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("1234567890"), S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), S(""));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345"), S("12345"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("1234567890"), S("1234567890"));
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("12345678901234567890"), S("12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345"), S("a12345bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("1234567890"), S("a1234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("12345678901234567890"), S("a12345678901234567890bcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), S("acdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345"), S("a12345cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("1234567890"), S("a1234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("12345678901234567890"), S("a12345678901234567890cdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), S("aklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345"), S("a12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("1234567890"), S("a1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("12345678901234567890"), S("a12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), S("at"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345"), S("a12345t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("1234567890"), S("a1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("12345678901234567890"), S("a12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345"), S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("1234567890"), S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), S("a"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345"), S("a12345"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("1234567890"), S("a1234567890"));
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("12345678901234567890"), S("a12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345"), S("abcdefghij12345klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("1234567890"), S("abcdefghij1234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("12345678901234567890"), S("abcdefghij12345678901234567890klmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), S("abcdefghijlmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345"), S("abcdefghij12345lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("1234567890"), S("abcdefghij1234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("12345678901234567890"), S("abcdefghij12345678901234567890lmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), S("abcdefghijpqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345"), S("abcdefghij12345pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("1234567890"), S("abcdefghij1234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("12345678901234567890"), S("abcdefghij12345678901234567890pqrst"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), S("abcdefghijt"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345"), S("abcdefghij12345t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("1234567890"), S("abcdefghij1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("12345678901234567890"), S("abcdefghij12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345"), S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("1234567890"), S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("12345678901234567890"), S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), S("abcdefghij"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345"), S("abcdefghij12345"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("1234567890"), S("abcdefghij1234567890"));
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("12345678901234567890"), S("abcdefghij12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345"), S("abcdefghijklmnopqrs12345t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("1234567890"), S("abcdefghijklmnopqrs1234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890t"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345"), S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("1234567890"), S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), S("abcdefghijklmnopqrs"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345"), S("abcdefghijklmnopqrs12345"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("1234567890"), S("abcdefghijklmnopqrs1234567890"));
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("12345678901234567890"), S("abcdefghijklmnopqrs12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345"), S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), S("abcdefghijklmnopqrst"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345"), S("abcdefghijklmnopqrst12345"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345"), S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("1234567890"), S("can't happen"));
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("12345678901234567890"), S("can't happen"));
 
-    return true;
+  return true;
 }
 
 template <class S>
@@ -383,8 +373,7 @@ void test() {
   }
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_swap/swap.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_swap/swap.pass.cpp
index f11b7a09718ae5d..3d9ec016bcfbd3a 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_swap/swap.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_swap/swap.pass.cpp
@@ -19,16 +19,14 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s1, S s2)
-{
-    S s1_ = s1;
-    S s2_ = s2;
-    s1.swap(s2);
-    LIBCPP_ASSERT(s1.__invariants());
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s1 == s2_);
-    assert(s2 == s1_);
+TEST_CONSTEXPR_CXX20 void test(S s1, S s2) {
+  S s1_ = s1;
+  S s2_ = s2;
+  s1.swap(s2);
+  LIBCPP_ASSERT(s1.__invariants());
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s1 == s2_);
+  assert(s2 == s1_);
 }
 
 template <class S>
@@ -60,8 +58,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line.pass.cpp
index aa00fc90d192b1c..1a1981fe89f4644 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line.pass.cpp
@@ -20,151 +20,150 @@
 #include "min_allocator.h"
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    {
-        std::istringstream in(" abc\n  def\n   ghij");
-        std::string s("initial text");
-        std::getline(in, s);
-        assert(in.good());
-        assert(s == " abc");
-        std::getline(in, s);
-        assert(in.good());
-        assert(s == "  def");
-        std::getline(in, s);
-        assert(in.eof());
-        assert(s == "   ghij");
-    }
+int main(int, char**) {
+  {
+    std::istringstream in(" abc\n  def\n   ghij");
+    std::string s("initial text");
+    std::getline(in, s);
+    assert(in.good());
+    assert(s == " abc");
+    std::getline(in, s);
+    assert(in.good());
+    assert(s == "  def");
+    std::getline(in, s);
+    assert(in.eof());
+    assert(s == "   ghij");
+  }
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        std::wistringstream in(L" abc\n  def\n   ghij");
-        std::wstring s(L"initial text");
-        std::getline(in, s);
-        assert(in.good());
-        assert(s == L" abc");
-        std::getline(in, s);
-        assert(in.good());
-        assert(s == L"  def");
-        std::getline(in, s);
-        assert(in.eof());
-        assert(s == L"   ghij");
-    }
+  {
+    std::wistringstream in(L" abc\n  def\n   ghij");
+    std::wstring s(L"initial text");
+    std::getline(in, s);
+    assert(in.good());
+    assert(s == L" abc");
+    std::getline(in, s);
+    assert(in.good());
+    assert(s == L"  def");
+    std::getline(in, s);
+    assert(in.eof());
+    assert(s == L"   ghij");
+  }
 #endif
 #if TEST_STD_VER >= 11
-    {
-        typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
-        std::istringstream in(" abc\n  def\n   ghij");
-        S s("initial text");
-        std::getline(in, s);
-        assert(in.good());
-        assert(s == " abc");
-        std::getline(in, s);
-        assert(in.good());
-        assert(s == "  def");
-        std::getline(in, s);
-        assert(in.eof());
-        assert(s == "   ghij");
-    }
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t>> S;
-        std::wistringstream in(L" abc\n  def\n   ghij");
-        S s(L"initial text");
-        std::getline(in, s);
-        assert(in.good());
-        assert(s == L" abc");
-        std::getline(in, s);
-        assert(in.good());
-        assert(s == L"  def");
-        std::getline(in, s);
-        assert(in.eof());
-        assert(s == L"   ghij");
-    }
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
-#endif // TEST_STD_VER >= 11
+  {
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
+    std::istringstream in(" abc\n  def\n   ghij");
+    S s("initial text");
+    std::getline(in, s);
+    assert(in.good());
+    assert(s == " abc");
+    std::getline(in, s);
+    assert(in.good());
+    assert(s == "  def");
+    std::getline(in, s);
+    assert(in.eof());
+    assert(s == "   ghij");
+  }
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  {
+    typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t>> S;
+    std::wistringstream in(L" abc\n  def\n   ghij");
+    S s(L"initial text");
+    std::getline(in, s);
+    assert(in.good());
+    assert(s == L" abc");
+    std::getline(in, s);
+    assert(in.good());
+    assert(s == L"  def");
+    std::getline(in, s);
+    assert(in.eof());
+    assert(s == L"   ghij");
+  }
+#  endif // TEST_HAS_NO_WIDE_CHARACTERS
+#endif   // TEST_STD_VER >= 11
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::basic_stringbuf<char> sb("hello");
-        std::basic_istream<char> is(&sb);
-        is.exceptions(std::ios_base::eofbit);
-
-        std::basic_string<char> s;
-        bool threw = false;
-        try {
-            std::getline(is, s);
-        } catch (std::ios::failure const&) {
-            threw = true;
-        }
+  {
+    std::basic_stringbuf<char> sb("hello");
+    std::basic_istream<char> is(&sb);
+    is.exceptions(std::ios_base::eofbit);
 
-        assert(!is.bad());
-        assert(!is.fail());
-        assert( is.eof());
-        assert(threw);
-        assert(s == "hello");
+    std::basic_string<char> s;
+    bool threw = false;
+    try {
+      std::getline(is, s);
+    } catch (std::ios::failure const&) {
+      threw = true;
     }
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        std::basic_stringbuf<wchar_t> sb(L"hello");
-        std::basic_istream<wchar_t> is(&sb);
-        is.exceptions(std::ios_base::eofbit);
 
-        std::basic_string<wchar_t> s;
-        bool threw = false;
-        try {
-            std::getline(is, s);
-        } catch (std::ios::failure const&) {
-            threw = true;
-        }
+    assert(!is.bad());
+    assert(!is.fail());
+    assert(is.eof());
+    assert(threw);
+    assert(s == "hello");
+  }
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  {
+    std::basic_stringbuf<wchar_t> sb(L"hello");
+    std::basic_istream<wchar_t> is(&sb);
+    is.exceptions(std::ios_base::eofbit);
 
-        assert(!is.bad());
-        assert(!is.fail());
-        assert( is.eof());
-        assert(threw);
-        assert(s == L"hello");
+    std::basic_string<wchar_t> s;
+    bool threw = false;
+    try {
+      std::getline(is, s);
+    } catch (std::ios::failure const&) {
+      threw = true;
     }
-#endif
 
-    {
-        std::basic_stringbuf<char> sb;
-        std::basic_istream<char> is(&sb);
-        is.exceptions(std::ios_base::failbit);
+    assert(!is.bad());
+    assert(!is.fail());
+    assert(is.eof());
+    assert(threw);
+    assert(s == L"hello");
+  }
+#  endif
 
-        std::basic_string<char> s;
-        bool threw = false;
-        try {
-            std::getline(is, s);
-        } catch (std::ios::failure const&) {
-            threw = true;
-        }
+  {
+    std::basic_stringbuf<char> sb;
+    std::basic_istream<char> is(&sb);
+    is.exceptions(std::ios_base::failbit);
 
-        assert(!is.bad());
-        assert( is.fail());
-        assert( is.eof());
-        assert(threw);
-        assert(s == "");
+    std::basic_string<char> s;
+    bool threw = false;
+    try {
+      std::getline(is, s);
+    } catch (std::ios::failure const&) {
+      threw = true;
     }
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        std::basic_stringbuf<wchar_t> sb;
-        std::basic_istream<wchar_t> is(&sb);
-        is.exceptions(std::ios_base::failbit);
 
-        std::basic_string<wchar_t> s;
-        bool threw = false;
-        try {
-            std::getline(is, s);
-        } catch (std::ios::failure const&) {
-            threw = true;
-        }
+    assert(!is.bad());
+    assert(is.fail());
+    assert(is.eof());
+    assert(threw);
+    assert(s == "");
+  }
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  {
+    std::basic_stringbuf<wchar_t> sb;
+    std::basic_istream<wchar_t> is(&sb);
+    is.exceptions(std::ios_base::failbit);
 
-        assert(!is.bad());
-        assert( is.fail());
-        assert( is.eof());
-        assert(threw);
-        assert(s == L"");
+    std::basic_string<wchar_t> s;
+    bool threw = false;
+    try {
+      std::getline(is, s);
+    } catch (std::ios::failure const&) {
+      threw = true;
     }
-#endif
+
+    assert(!is.bad());
+    assert(is.fail());
+    assert(is.eof());
+    assert(threw);
+    assert(s == L"");
+  }
+#  endif
 #endif // TEST_HAS_NO_EXCEPTIONS
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp
index 189979409c406fd..00abd249f15d302 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp
@@ -20,162 +20,161 @@
 #include "min_allocator.h"
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    {
-        std::istringstream in(" abc*  def**   ghij");
-        std::string s("initial text");
-        std::getline(in, s, '*');
-        assert(in.good());
-        assert(s == " abc");
-        std::getline(in, s, '*');
-        assert(in.good());
-        assert(s == "  def");
-        std::getline(in, s, '*');
-        assert(in.good());
-        assert(s == "");
-        std::getline(in, s, '*');
-        assert(in.eof());
-        assert(s == "   ghij");
-    }
+int main(int, char**) {
+  {
+    std::istringstream in(" abc*  def**   ghij");
+    std::string s("initial text");
+    std::getline(in, s, '*');
+    assert(in.good());
+    assert(s == " abc");
+    std::getline(in, s, '*');
+    assert(in.good());
+    assert(s == "  def");
+    std::getline(in, s, '*');
+    assert(in.good());
+    assert(s == "");
+    std::getline(in, s, '*');
+    assert(in.eof());
+    assert(s == "   ghij");
+  }
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        std::wistringstream in(L" abc*  def**   ghij");
-        std::wstring s(L"initial text");
-        std::getline(in, s, L'*');
-        assert(in.good());
-        assert(s == L" abc");
-        std::getline(in, s, L'*');
-        assert(in.good());
-        assert(s == L"  def");
-        std::getline(in, s, L'*');
-        assert(in.good());
-        assert(s == L"");
-        std::getline(in, s, L'*');
-        assert(in.eof());
-        assert(s == L"   ghij");
-    }
+  {
+    std::wistringstream in(L" abc*  def**   ghij");
+    std::wstring s(L"initial text");
+    std::getline(in, s, L'*');
+    assert(in.good());
+    assert(s == L" abc");
+    std::getline(in, s, L'*');
+    assert(in.good());
+    assert(s == L"  def");
+    std::getline(in, s, L'*');
+    assert(in.good());
+    assert(s == L"");
+    std::getline(in, s, L'*');
+    assert(in.eof());
+    assert(s == L"   ghij");
+  }
 #endif
 #if TEST_STD_VER >= 11
-    {
-        typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
-        std::istringstream in(" abc*  def**   ghij");
-        S s("initial text");
-        std::getline(in, s, '*');
-        assert(in.good());
-        assert(s == " abc");
-        std::getline(in, s, '*');
-        assert(in.good());
-        assert(s == "  def");
-        std::getline(in, s, '*');
-        assert(in.good());
-        assert(s == "");
-        std::getline(in, s, '*');
-        assert(in.eof());
-        assert(s == "   ghij");
-    }
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t>> S;
-        std::wistringstream in(L" abc*  def**   ghij");
-        S s(L"initial text");
-        std::getline(in, s, L'*');
-        assert(in.good());
-        assert(s == L" abc");
-        std::getline(in, s, L'*');
-        assert(in.good());
-        assert(s == L"  def");
-        std::getline(in, s, L'*');
-        assert(in.good());
-        assert(s == L"");
-        std::getline(in, s, L'*');
-        assert(in.eof());
-        assert(s == L"   ghij");
-    }
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
-#endif // TEST_STD_VER >= 11
+  {
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
+    std::istringstream in(" abc*  def**   ghij");
+    S s("initial text");
+    std::getline(in, s, '*');
+    assert(in.good());
+    assert(s == " abc");
+    std::getline(in, s, '*');
+    assert(in.good());
+    assert(s == "  def");
+    std::getline(in, s, '*');
+    assert(in.good());
+    assert(s == "");
+    std::getline(in, s, '*');
+    assert(in.eof());
+    assert(s == "   ghij");
+  }
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  {
+    typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t>> S;
+    std::wistringstream in(L" abc*  def**   ghij");
+    S s(L"initial text");
+    std::getline(in, s, L'*');
+    assert(in.good());
+    assert(s == L" abc");
+    std::getline(in, s, L'*');
+    assert(in.good());
+    assert(s == L"  def");
+    std::getline(in, s, L'*');
+    assert(in.good());
+    assert(s == L"");
+    std::getline(in, s, L'*');
+    assert(in.eof());
+    assert(s == L"   ghij");
+  }
+#  endif // TEST_HAS_NO_WIDE_CHARACTERS
+#endif   // TEST_STD_VER >= 11
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::basic_stringbuf<char> sb("hello");
-        std::basic_istream<char> is(&sb);
-        is.exceptions(std::ios::eofbit);
+  {
+    std::basic_stringbuf<char> sb("hello");
+    std::basic_istream<char> is(&sb);
+    is.exceptions(std::ios::eofbit);
 
-        std::basic_string<char> s;
-        bool threw = false;
-        try {
-            std::getline(is, s, '\n');
-        } catch (std::ios::failure const&) {
-            threw = true;
-        }
-
-        assert(!is.bad());
-        assert(!is.fail());
-        assert( is.eof());
-        assert(threw);
-        assert(s == "hello");
+    std::basic_string<char> s;
+    bool threw = false;
+    try {
+      std::getline(is, s, '\n');
+    } catch (std::ios::failure const&) {
+      threw = true;
     }
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        std::basic_stringbuf<wchar_t> sb(L"hello");
-        std::basic_istream<wchar_t> is(&sb);
-        is.exceptions(std::ios::eofbit);
 
-        std::basic_string<wchar_t> s;
-        bool threw = false;
-        try {
-            std::getline(is, s, L'\n');
-        } catch (std::ios::failure const&) {
-            threw = true;
-        }
+    assert(!is.bad());
+    assert(!is.fail());
+    assert(is.eof());
+    assert(threw);
+    assert(s == "hello");
+  }
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  {
+    std::basic_stringbuf<wchar_t> sb(L"hello");
+    std::basic_istream<wchar_t> is(&sb);
+    is.exceptions(std::ios::eofbit);
 
-        assert(!is.bad());
-        assert(!is.fail());
-        assert( is.eof());
-        assert(threw);
-        assert(s == L"hello");
+    std::basic_string<wchar_t> s;
+    bool threw = false;
+    try {
+      std::getline(is, s, L'\n');
+    } catch (std::ios::failure const&) {
+      threw = true;
     }
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        std::basic_stringbuf<char> sb;
-        std::basic_istream<char> is(&sb);
-        is.exceptions(std::ios::failbit);
 
-        std::basic_string<char> s;
-        bool threw = false;
-        try {
-            std::getline(is, s, '\n');
-        } catch (std::ios::failure const&) {
-            threw = true;
-        }
+    assert(!is.bad());
+    assert(!is.fail());
+    assert(is.eof());
+    assert(threw);
+    assert(s == L"hello");
+  }
+#  endif // TEST_HAS_NO_WIDE_CHARACTERS
+  {
+    std::basic_stringbuf<char> sb;
+    std::basic_istream<char> is(&sb);
+    is.exceptions(std::ios::failbit);
 
-        assert(!is.bad());
-        assert( is.fail());
-        assert( is.eof());
-        assert(threw);
-        assert(s == "");
+    std::basic_string<char> s;
+    bool threw = false;
+    try {
+      std::getline(is, s, '\n');
+    } catch (std::ios::failure const&) {
+      threw = true;
     }
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        std::basic_stringbuf<wchar_t> sb;
-        std::basic_istream<wchar_t> is(&sb);
-        is.exceptions(std::ios::failbit);
 
-        std::basic_string<wchar_t> s;
-        bool threw = false;
-        try {
-            std::getline(is, s, L'\n');
-        } catch (std::ios::failure const&) {
-            threw = true;
-        }
+    assert(!is.bad());
+    assert(is.fail());
+    assert(is.eof());
+    assert(threw);
+    assert(s == "");
+  }
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  {
+    std::basic_stringbuf<wchar_t> sb;
+    std::basic_istream<wchar_t> is(&sb);
+    is.exceptions(std::ios::failbit);
 
-        assert(!is.bad());
-        assert( is.fail());
-        assert( is.eof());
-        assert(threw);
-        assert(s == L"");
+    std::basic_string<wchar_t> s;
+    bool threw = false;
+    try {
+      std::getline(is, s, L'\n');
+    } catch (std::ios::failure const&) {
+      threw = true;
     }
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
-#endif // TEST_HAS_NO_EXCEPTIONS
 
-    return 0;
+    assert(!is.bad());
+    assert(is.fail());
+    assert(is.eof());
+    assert(threw);
+    assert(s == L"");
+  }
+#  endif // TEST_HAS_NO_WIDE_CHARACTERS
+#endif   // TEST_HAS_NO_EXCEPTIONS
+
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim_rv.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim_rv.pass.cpp
index 8e14148207b25c3..f195d0aebe5efb2 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim_rv.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_delim_rv.pass.cpp
@@ -20,33 +20,32 @@
 #include "test_macros.h"
 #include "min_allocator.h"
 
-int main(int, char**)
-{
-    {
-        std::string s("initial text");
-        std::getline(std::istringstream(" abc*  def*   ghij"), s, '*');
-        assert(s == " abc");
-    }
+int main(int, char**) {
+  {
+    std::string s("initial text");
+    std::getline(std::istringstream(" abc*  def*   ghij"), s, '*');
+    assert(s == " abc");
+  }
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        std::wstring s(L"initial text");
-        std::getline(std::wistringstream(L" abc*  def*   ghij"), s, L'*');
-        assert(s == L" abc");
-    }
+  {
+    std::wstring s(L"initial text");
+    std::getline(std::wistringstream(L" abc*  def*   ghij"), s, L'*');
+    assert(s == L" abc");
+  }
 #endif
-    {
-        typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
-        S s("initial text");
-        std::getline(std::istringstream(" abc*  def*   ghij"), s, '*');
-        assert(s == " abc");
-    }
+  {
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
+    S s("initial text");
+    std::getline(std::istringstream(" abc*  def*   ghij"), s, '*');
+    assert(s == " abc");
+  }
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t> > S;
-        S s(L"initial text");
-        std::getline(std::wistringstream(L" abc*  def*   ghij"), s, L'*');
-        assert(s == L" abc");
-    }
+  {
+    typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t> > S;
+    S s(L"initial text");
+    std::getline(std::wistringstream(L" abc*  def*   ghij"), s, L'*');
+    assert(s == L" abc");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_rv.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_rv.pass.cpp
index 146b56285f94cae..57802a08f1001ea 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_rv.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/get_line_rv.pass.cpp
@@ -20,33 +20,32 @@
 #include "test_macros.h"
 #include "min_allocator.h"
 
-int main(int, char**)
-{
-    {
-        std::string s("initial text");
-        std::getline(std::istringstream(" abc\n  def\n   ghij"), s);
-        assert(s == " abc");
-    }
+int main(int, char**) {
+  {
+    std::string s("initial text");
+    std::getline(std::istringstream(" abc\n  def\n   ghij"), s);
+    assert(s == " abc");
+  }
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        std::wstring s(L"initial text");
-        std::getline(std::wistringstream(L" abc\n  def\n   ghij"), s);
-        assert(s == L" abc");
-    }
+  {
+    std::wstring s(L"initial text");
+    std::getline(std::wistringstream(L" abc\n  def\n   ghij"), s);
+    assert(s == L" abc");
+  }
 #endif
-    {
-        typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
-        S s("initial text");
-        std::getline(std::istringstream(" abc\n  def\n   ghij"), s);
-        assert(s == " abc");
-    }
+  {
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
+    S s("initial text");
+    std::getline(std::istringstream(" abc\n  def\n   ghij"), s);
+    assert(s == " abc");
+  }
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t> > S;
-        S s(L"initial text");
-        std::getline(std::wistringstream(L" abc\n  def\n   ghij"), s);
-        assert(s == L" abc");
-    }
+  {
+    typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t> > S;
+    S s(L"initial text");
+    std::getline(std::wistringstream(L" abc\n  def\n   ghij"), s);
+    assert(s == L" abc");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/lit.local.cfg b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/lit.local.cfg
index 42a86f7728f02e0..bc4efe19911e6f0 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/lit.local.cfg
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/lit.local.cfg
@@ -1,3 +1,3 @@
-# These std::string functions require iostreams, which requires localization
-if "no-localization" in config.available_features:
-    config.unsupported = True
+#These std::string functions require iostreams, which requires localization
+if
+"no-localization" in config.available_features : config.unsupported = True

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_extract.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_extract.pass.cpp
index 686b7a97e4f2d7e..b5d0184c78f85df 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_extract.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_extract.pass.cpp
@@ -20,142 +20,141 @@
 #include "min_allocator.h"
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    {
-        std::istringstream in("a bc defghij");
-        std::string s("initial text");
-        in >> s;
-        assert(in.good());
-        assert(s == "a");
-        assert(in.peek() == ' ');
-        in >> s;
-        assert(in.good());
-        assert(s == "bc");
-        assert(in.peek() == ' ');
-        in.width(3);
-        in >> s;
-        assert(in.good());
-        assert(s == "def");
-        assert(in.peek() == 'g');
-        in >> s;
-        assert(in.eof());
-        assert(s == "ghij");
-        in >> s;
-        assert(in.fail());
-    }
+int main(int, char**) {
+  {
+    std::istringstream in("a bc defghij");
+    std::string s("initial text");
+    in >> s;
+    assert(in.good());
+    assert(s == "a");
+    assert(in.peek() == ' ');
+    in >> s;
+    assert(in.good());
+    assert(s == "bc");
+    assert(in.peek() == ' ');
+    in.width(3);
+    in >> s;
+    assert(in.good());
+    assert(s == "def");
+    assert(in.peek() == 'g');
+    in >> s;
+    assert(in.eof());
+    assert(s == "ghij");
+    in >> s;
+    assert(in.fail());
+  }
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        std::wistringstream in(L"a bc defghij");
-        std::wstring s(L"initial text");
-        in >> s;
-        assert(in.good());
-        assert(s == L"a");
-        assert(in.peek() == L' ');
-        in >> s;
-        assert(in.good());
-        assert(s == L"bc");
-        assert(in.peek() == L' ');
-        in.width(3);
-        in >> s;
-        assert(in.good());
-        assert(s == L"def");
-        assert(in.peek() == L'g');
-        in >> s;
-        assert(in.eof());
-        assert(s == L"ghij");
-        in >> s;
-        assert(in.fail());
-    }
+  {
+    std::wistringstream in(L"a bc defghij");
+    std::wstring s(L"initial text");
+    in >> s;
+    assert(in.good());
+    assert(s == L"a");
+    assert(in.peek() == L' ');
+    in >> s;
+    assert(in.good());
+    assert(s == L"bc");
+    assert(in.peek() == L' ');
+    in.width(3);
+    in >> s;
+    assert(in.good());
+    assert(s == L"def");
+    assert(in.peek() == L'g');
+    in >> s;
+    assert(in.eof());
+    assert(s == L"ghij");
+    in >> s;
+    assert(in.fail());
+  }
 #endif
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::stringbuf sb;
-        std::istream is(&sb);
-        is.exceptions(std::ios::failbit);
+  {
+    std::stringbuf sb;
+    std::istream is(&sb);
+    is.exceptions(std::ios::failbit);
 
-        bool threw = false;
-        try {
-            std::string s;
-            is >> s;
-        } catch (std::ios::failure const&) {
-            threw = true;
-        }
-
-        assert(!is.bad());
-        assert(is.fail());
-        assert(is.eof());
-        assert(threw);
+    bool threw = false;
+    try {
+      std::string s;
+      is >> s;
+    } catch (std::ios::failure const&) {
+      threw = true;
     }
-    {
-        std::stringbuf sb;
-        std::istream is(&sb);
-        is.exceptions(std::ios::eofbit);
 
-        bool threw = false;
-        try {
-            std::string s;
-            is >> s;
-        } catch (std::ios::failure const&) {
-            threw = true;
-        }
+    assert(!is.bad());
+    assert(is.fail());
+    assert(is.eof());
+    assert(threw);
+  }
+  {
+    std::stringbuf sb;
+    std::istream is(&sb);
+    is.exceptions(std::ios::eofbit);
 
-        assert(!is.bad());
-        assert(is.fail());
-        assert(is.eof());
-        assert(threw);
+    bool threw = false;
+    try {
+      std::string s;
+      is >> s;
+    } catch (std::ios::failure const&) {
+      threw = true;
     }
+
+    assert(!is.bad());
+    assert(is.fail());
+    assert(is.eof());
+    assert(threw);
+  }
 #endif // TEST_HAS_NO_EXCEPTIONS
 #if TEST_STD_VER >= 11
-    {
-        typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
-        std::istringstream in("a bc defghij");
-        S s("initial text");
-        in >> s;
-        assert(in.good());
-        assert(s == "a");
-        assert(in.peek() == ' ');
-        in >> s;
-        assert(in.good());
-        assert(s == "bc");
-        assert(in.peek() == ' ');
-        in.width(3);
-        in >> s;
-        assert(in.good());
-        assert(s == "def");
-        assert(in.peek() == 'g');
-        in >> s;
-        assert(in.eof());
-        assert(s == "ghij");
-        in >> s;
-        assert(in.fail());
-    }
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t>> S;
-        std::wistringstream in(L"a bc defghij");
-        S s(L"initial text");
-        in >> s;
-        assert(in.good());
-        assert(s == L"a");
-        assert(in.peek() == L' ');
-        in >> s;
-        assert(in.good());
-        assert(s == L"bc");
-        assert(in.peek() == L' ');
-        in.width(3);
-        in >> s;
-        assert(in.good());
-        assert(s == L"def");
-        assert(in.peek() == L'g');
-        in >> s;
-        assert(in.eof());
-        assert(s == L"ghij");
-        in >> s;
-        assert(in.fail());
-    }
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
-#endif // TEST_STD_VER >= 11
+  {
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
+    std::istringstream in("a bc defghij");
+    S s("initial text");
+    in >> s;
+    assert(in.good());
+    assert(s == "a");
+    assert(in.peek() == ' ');
+    in >> s;
+    assert(in.good());
+    assert(s == "bc");
+    assert(in.peek() == ' ');
+    in.width(3);
+    in >> s;
+    assert(in.good());
+    assert(s == "def");
+    assert(in.peek() == 'g');
+    in >> s;
+    assert(in.eof());
+    assert(s == "ghij");
+    in >> s;
+    assert(in.fail());
+  }
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  {
+    typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t>> S;
+    std::wistringstream in(L"a bc defghij");
+    S s(L"initial text");
+    in >> s;
+    assert(in.good());
+    assert(s == L"a");
+    assert(in.peek() == L' ');
+    in >> s;
+    assert(in.good());
+    assert(s == L"bc");
+    assert(in.peek() == L' ');
+    in.width(3);
+    in >> s;
+    assert(in.good());
+    assert(s == L"def");
+    assert(in.peek() == L'g');
+    in >> s;
+    assert(in.eof());
+    assert(s == L"ghij");
+    in >> s;
+    assert(in.fail());
+  }
+#  endif // TEST_HAS_NO_WIDE_CHARACTERS
+#endif   // TEST_STD_VER >= 11
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_insert.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_insert.pass.cpp
index d2b289084455aa9..ae6cb3d2e92ab6c 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_insert.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.io/stream_insert.pass.cpp
@@ -20,78 +20,77 @@
 #include "test_macros.h"
 #include "min_allocator.h"
 
-int main(int, char**)
-{
-    {
-        std::ostringstream out;
-        std::string s("some text");
-        out << s;
-        assert(out.good());
-        assert(s == out.str());
-    }
-    {
-        std::ostringstream out;
-        std::string s("some text");
-        out.width(12);
-        out << s;
-        assert(out.good());
-        assert("   " + s == out.str());
-    }
+int main(int, char**) {
+  {
+    std::ostringstream out;
+    std::string s("some text");
+    out << s;
+    assert(out.good());
+    assert(s == out.str());
+  }
+  {
+    std::ostringstream out;
+    std::string s("some text");
+    out.width(12);
+    out << s;
+    assert(out.good());
+    assert("   " + s == out.str());
+  }
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        std::wostringstream out;
-        std::wstring s(L"some text");
-        out << s;
-        assert(out.good());
-        assert(s == out.str());
-    }
-    {
-        std::wostringstream out;
-        std::wstring s(L"some text");
-        out.width(12);
-        out << s;
-        assert(out.good());
-        assert(L"   " + s == out.str());
-    }
+  {
+    std::wostringstream out;
+    std::wstring s(L"some text");
+    out << s;
+    assert(out.good());
+    assert(s == out.str());
+  }
+  {
+    std::wostringstream out;
+    std::wstring s(L"some text");
+    out.width(12);
+    out << s;
+    assert(out.good());
+    assert(L"   " + s == out.str());
+  }
 #endif
 #if TEST_STD_VER >= 11
-    {
-        typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
-        std::basic_ostringstream<S::value_type, S::traits_type, S::allocator_type> out;
-        S s("some text");
-        out << s;
-        assert(out.good());
-        assert(s == out.str());
-    }
-    {
-        typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
-        std::basic_ostringstream<S::value_type, S::traits_type, S::allocator_type> out;
-        S s("some text");
-        out.width(12);
-        out << s;
-        assert(out.good());
-        assert("   " + s == out.str());
-    }
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t>> S;
-        std::basic_ostringstream<S::value_type, S::traits_type, S::allocator_type> out;
-        S s(L"some text");
-        out << s;
-        assert(out.good());
-        assert(s == out.str());
-    }
-    {
-        typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t>> S;
-        std::basic_ostringstream<S::value_type, S::traits_type, S::allocator_type> out;
-        S s(L"some text");
-        out.width(12);
-        out << s;
-        assert(out.good());
-        assert(L"   " + s == out.str());
-    }
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
-#endif // TEST_STD_VER >= 11
+  {
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
+    std::basic_ostringstream<S::value_type, S::traits_type, S::allocator_type> out;
+    S s("some text");
+    out << s;
+    assert(out.good());
+    assert(s == out.str());
+  }
+  {
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
+    std::basic_ostringstream<S::value_type, S::traits_type, S::allocator_type> out;
+    S s("some text");
+    out.width(12);
+    out << s;
+    assert(out.good());
+    assert("   " + s == out.str());
+  }
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  {
+    typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t>> S;
+    std::basic_ostringstream<S::value_type, S::traits_type, S::allocator_type> out;
+    S s(L"some text");
+    out << s;
+    assert(out.good());
+    assert(s == out.str());
+  }
+  {
+    typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t>> S;
+    std::basic_ostringstream<S::value_type, S::traits_type, S::allocator_type> out;
+    S s(L"some text");
+    out.width(12);
+    out << s;
+    assert(out.good());
+    assert(L"   " + s == out.str());
+  }
+#  endif // TEST_HAS_NO_WIDE_CHARACTERS
+#endif   // TEST_STD_VER >= 11
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap.pass.cpp
index 0425cd5b468c994..8dc8c70fb36cfc7 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap.pass.cpp
@@ -21,16 +21,14 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(S s1, S s2)
-{
-    S s1_ = s1;
-    S s2_ = s2;
-    swap(s1, s2);
-    LIBCPP_ASSERT(s1.__invariants());
-    LIBCPP_ASSERT(s2.__invariants());
-    assert(s1 == s2_);
-    assert(s2 == s1_);
+TEST_CONSTEXPR_CXX20 void test(S s1, S s2) {
+  S s1_ = s1;
+  S s2_ = s2;
+  swap(s1, s2);
+  LIBCPP_ASSERT(s1.__invariants());
+  LIBCPP_ASSERT(s2.__invariants());
+  assert(s1 == s2_);
+  assert(s2 == s1_);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -78,8 +76,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap_noexcept.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap_noexcept.pass.cpp
index 9a5513b90c11126..e3465400fbae48a 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap_noexcept.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string.special/swap_noexcept.pass.cpp
@@ -28,58 +28,55 @@
 #include "test_allocator.h"
 
 template <class T>
-struct some_alloc
-{
-    typedef T value_type;
+struct some_alloc {
+  typedef T value_type;
 
-    some_alloc() {}
-    some_alloc(const some_alloc&);
-    T *allocate(std::size_t);
-    void deallocate(void*, unsigned) {}
-    typedef std::true_type propagate_on_container_swap;
+  some_alloc() {}
+  some_alloc(const some_alloc&);
+  T* allocate(std::size_t);
+  void deallocate(void*, unsigned) {}
+  typedef std::true_type propagate_on_container_swap;
 };
 
 template <class T>
-struct some_alloc2
-{
-    typedef T value_type;
+struct some_alloc2 {
+  typedef T value_type;
 
-    some_alloc2() {}
-    some_alloc2(const some_alloc2&);
-    T *allocate(std::size_t);
-    void deallocate(void*, unsigned) {}
+  some_alloc2() {}
+  some_alloc2(const some_alloc2&);
+  T* allocate(std::size_t);
+  void deallocate(void*, unsigned) {}
 
-    typedef std::false_type propagate_on_container_swap;
-    typedef std::true_type is_always_equal;
+  typedef std::false_type propagate_on_container_swap;
+  typedef std::true_type is_always_equal;
 };
 
-int main(int, char**)
-{
-    {
-        typedef std::string C;
-        static_assert(noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
-    }
+int main(int, char**) {
+  {
+    typedef std::string C;
+    static_assert(noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
+  }
 #if defined(_LIBCPP_VERSION)
-    {
-        typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> C;
-        static_assert(noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
-    }
+  {
+    typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> C;
+    static_assert(noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
+  }
 #endif // _LIBCPP_VERSION
-    {
-        typedef std::basic_string<char, std::char_traits<char>, some_alloc<char>> C;
+  {
+    typedef std::basic_string<char, std::char_traits<char>, some_alloc<char>> C;
 #if TEST_STD_VER >= 14
     //  In C++14, if POCS is set, swapping the allocator is required not to throw
-        static_assert( noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
+    static_assert(noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
 #else
-        static_assert(!noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
+    static_assert(!noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
 #endif
-    }
+  }
 #if TEST_STD_VER >= 14
-    {
-        typedef std::basic_string<char, std::char_traits<char>, some_alloc2<char>> C;
+  {
+    typedef std::basic_string<char, std::char_traits<char>, some_alloc2<char>> C;
     //  if the allocators are always equal, then the swap can be noexcept
-        static_assert( noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
-    }
+    static_assert(noexcept(swap(std::declval<C&>(), std::declval<C&>())), "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/pointer_string.pass.cpp
index bb1580d4f10f657..11cfcfcf4299570 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/pointer_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/pointer_string.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const typename S::value_type* lhs, const S& rhs, bool x)
-{
-    assert((lhs != rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const typename S::value_type* lhs, const S& rhs, bool x) {
+  assert((lhs != rhs) == x);
 }
 
 template <class S>
@@ -53,8 +51,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_pointer.pass.cpp
index f2f51e251818720..c04c06243cd258b 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_pointer.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, const typename S::value_type* rhs, bool x)
-{
-    assert((lhs != rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) {
+  assert((lhs != rhs) == x);
 }
 
 template <class S>
@@ -53,8 +51,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string.pass.cpp
index 2f74920ee3b784b..881770e421bb04c 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string.pass.cpp
@@ -19,10 +19,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, const S& rhs, bool x)
-{
-    assert((lhs != rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, const S& rhs, bool x) {
+  assert((lhs != rhs) == x);
 }
 
 template <class S>
@@ -54,8 +52,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string_view.pass.cpp
index 744c883e34e0ef8..1595ec501f4e90c 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_string_view.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, SV rhs, bool x)
-{
-    assert((lhs != rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, SV rhs, bool x) {
+  assert((lhs != rhs) == x);
 }
 
 template <class S>
@@ -53,8 +51,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_view_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_view_string.pass.cpp
index 7f5bb20cc638912..246b98bc5e107cf 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_view_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op!=/string_view_string.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(SV lhs, const S& rhs, bool x)
-{
-    assert((lhs != rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(SV lhs, const S& rhs, bool x) {
+  assert((lhs != rhs) == x);
 }
 
 template <class S>
@@ -53,8 +51,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/allocator_propagation.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/allocator_propagation.pass.cpp
index 1918bcf8cedf6d5..2fe0bbd3c8f5a1e 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/allocator_propagation.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/allocator_propagation.pass.cpp
@@ -196,9 +196,9 @@ int main(int, char**) {
 #endif
 #if TEST_STD_VER > 17
   static_assert(test<char>());
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
   static_assert(test<wchar_t>());
-#endif
+#  endif
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/char_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/char_string.pass.cpp
index 8229d57aa01ab97..da06df99a13797a 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/char_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/char_string.pass.cpp
@@ -52,9 +52,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test1('a', S("12345678901234567890"), S("a12345678901234567890"));
   }
   {
-    typedef std::basic_string<char, std::char_traits<char>,
-                              min_allocator<char> >
-        S;
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
     test0('a', S(""), S("a"));
     test0('a', S("12345"), S("a12345"));
     test0('a', S("1234567890"), S("a1234567890"));

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/pointer_string.pass.cpp
index a54024e4af09e73..0dc5a06b1ac0836 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/pointer_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/pointer_string.pass.cpp
@@ -49,14 +49,11 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test0("abcdefghij", S(""), S("abcdefghij"));
     test0("abcdefghij", S("12345"), S("abcdefghij12345"));
     test0("abcdefghij", S("1234567890"), S("abcdefghij1234567890"));
-    test0("abcdefghij", S("12345678901234567890"),
-          S("abcdefghij12345678901234567890"));
+    test0("abcdefghij", S("12345678901234567890"), S("abcdefghij12345678901234567890"));
     test0("abcdefghijklmnopqrst", S(""), S("abcdefghijklmnopqrst"));
     test0("abcdefghijklmnopqrst", S("12345"), S("abcdefghijklmnopqrst12345"));
-    test0("abcdefghijklmnopqrst", S("1234567890"),
-          S("abcdefghijklmnopqrst1234567890"));
-    test0("abcdefghijklmnopqrst", S("12345678901234567890"),
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test0("abcdefghijklmnopqrst", S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test0("abcdefghijklmnopqrst", S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
   }
 
 #if TEST_STD_VER >= 11
@@ -73,19 +70,14 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test1("abcdefghij", S(""), S("abcdefghij"));
     test1("abcdefghij", S("12345"), S("abcdefghij12345"));
     test1("abcdefghij", S("1234567890"), S("abcdefghij1234567890"));
-    test1("abcdefghij", S("12345678901234567890"),
-          S("abcdefghij12345678901234567890"));
+    test1("abcdefghij", S("12345678901234567890"), S("abcdefghij12345678901234567890"));
     test1("abcdefghijklmnopqrst", S(""), S("abcdefghijklmnopqrst"));
     test1("abcdefghijklmnopqrst", S("12345"), S("abcdefghijklmnopqrst12345"));
-    test1("abcdefghijklmnopqrst", S("1234567890"),
-          S("abcdefghijklmnopqrst1234567890"));
-    test1("abcdefghijklmnopqrst", S("12345678901234567890"),
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test1("abcdefghijklmnopqrst", S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test1("abcdefghijklmnopqrst", S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
   }
   {
-    typedef std::basic_string<char, std::char_traits<char>,
-                              min_allocator<char> >
-        S;
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
     test0("", S(""), S(""));
     test0("", S("12345"), S("12345"));
     test0("", S("1234567890"), S("1234567890"));
@@ -97,14 +89,11 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test0("abcdefghij", S(""), S("abcdefghij"));
     test0("abcdefghij", S("12345"), S("abcdefghij12345"));
     test0("abcdefghij", S("1234567890"), S("abcdefghij1234567890"));
-    test0("abcdefghij", S("12345678901234567890"),
-          S("abcdefghij12345678901234567890"));
+    test0("abcdefghij", S("12345678901234567890"), S("abcdefghij12345678901234567890"));
     test0("abcdefghijklmnopqrst", S(""), S("abcdefghijklmnopqrst"));
     test0("abcdefghijklmnopqrst", S("12345"), S("abcdefghijklmnopqrst12345"));
-    test0("abcdefghijklmnopqrst", S("1234567890"),
-          S("abcdefghijklmnopqrst1234567890"));
-    test0("abcdefghijklmnopqrst", S("12345678901234567890"),
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test0("abcdefghijklmnopqrst", S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test0("abcdefghijklmnopqrst", S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
 
     test1("", S(""), S(""));
     test1("", S("12345"), S("12345"));
@@ -117,14 +106,11 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test1("abcdefghij", S(""), S("abcdefghij"));
     test1("abcdefghij", S("12345"), S("abcdefghij12345"));
     test1("abcdefghij", S("1234567890"), S("abcdefghij1234567890"));
-    test1("abcdefghij", S("12345678901234567890"),
-          S("abcdefghij12345678901234567890"));
+    test1("abcdefghij", S("12345678901234567890"), S("abcdefghij12345678901234567890"));
     test1("abcdefghijklmnopqrst", S(""), S("abcdefghijklmnopqrst"));
     test1("abcdefghijklmnopqrst", S("12345"), S("abcdefghijklmnopqrst12345"));
-    test1("abcdefghijklmnopqrst", S("1234567890"),
-          S("abcdefghijklmnopqrst1234567890"));
-    test1("abcdefghijklmnopqrst", S("12345678901234567890"),
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test1("abcdefghijklmnopqrst", S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test1("abcdefghijklmnopqrst", S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
   }
 #endif
 

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_char.pass.cpp
index 920f6b43c515689..bc6ac71ec95d926 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_char.pass.cpp
@@ -52,9 +52,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test1(S("abcdefghijklmnopqrst"), '1', S("abcdefghijklmnopqrst1"));
   }
   {
-    typedef std::basic_string<char, std::char_traits<char>,
-                              min_allocator<char> >
-        S;
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
     test0(S(""), '1', S("1"));
     test0(S("abcde"), '1', S("abcde1"));
     test0(S("abcdefghij"), '1', S("abcdefghij1"));

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_pointer.pass.cpp
index ca0b3bf8e540751..d3f229343611912 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_pointer.pass.cpp
@@ -49,14 +49,11 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test0(S("abcdefghij"), "", S("abcdefghij"));
     test0(S("abcdefghij"), "12345", S("abcdefghij12345"));
     test0(S("abcdefghij"), "1234567890", S("abcdefghij1234567890"));
-    test0(S("abcdefghij"), "12345678901234567890",
-          S("abcdefghij12345678901234567890"));
+    test0(S("abcdefghij"), "12345678901234567890", S("abcdefghij12345678901234567890"));
     test0(S("abcdefghijklmnopqrst"), "", S("abcdefghijklmnopqrst"));
     test0(S("abcdefghijklmnopqrst"), "12345", S("abcdefghijklmnopqrst12345"));
-    test0(S("abcdefghijklmnopqrst"), "1234567890",
-          S("abcdefghijklmnopqrst1234567890"));
-    test0(S("abcdefghijklmnopqrst"), "12345678901234567890",
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test0(S("abcdefghijklmnopqrst"), "1234567890", S("abcdefghijklmnopqrst1234567890"));
+    test0(S("abcdefghijklmnopqrst"), "12345678901234567890", S("abcdefghijklmnopqrst12345678901234567890"));
   }
 #if TEST_STD_VER >= 11
   {
@@ -72,19 +69,14 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test1(S("abcdefghij"), "", S("abcdefghij"));
     test1(S("abcdefghij"), "12345", S("abcdefghij12345"));
     test1(S("abcdefghij"), "1234567890", S("abcdefghij1234567890"));
-    test1(S("abcdefghij"), "12345678901234567890",
-          S("abcdefghij12345678901234567890"));
+    test1(S("abcdefghij"), "12345678901234567890", S("abcdefghij12345678901234567890"));
     test1(S("abcdefghijklmnopqrst"), "", S("abcdefghijklmnopqrst"));
     test1(S("abcdefghijklmnopqrst"), "12345", S("abcdefghijklmnopqrst12345"));
-    test1(S("abcdefghijklmnopqrst"), "1234567890",
-          S("abcdefghijklmnopqrst1234567890"));
-    test1(S("abcdefghijklmnopqrst"), "12345678901234567890",
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test1(S("abcdefghijklmnopqrst"), "1234567890", S("abcdefghijklmnopqrst1234567890"));
+    test1(S("abcdefghijklmnopqrst"), "12345678901234567890", S("abcdefghijklmnopqrst12345678901234567890"));
   }
   {
-    typedef std::basic_string<char, std::char_traits<char>,
-                              min_allocator<char> >
-        S;
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
     test0(S(""), "", S(""));
     test0(S(""), "12345", S("12345"));
     test0(S(""), "1234567890", S("1234567890"));
@@ -96,14 +88,11 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test0(S("abcdefghij"), "", S("abcdefghij"));
     test0(S("abcdefghij"), "12345", S("abcdefghij12345"));
     test0(S("abcdefghij"), "1234567890", S("abcdefghij1234567890"));
-    test0(S("abcdefghij"), "12345678901234567890",
-          S("abcdefghij12345678901234567890"));
+    test0(S("abcdefghij"), "12345678901234567890", S("abcdefghij12345678901234567890"));
     test0(S("abcdefghijklmnopqrst"), "", S("abcdefghijklmnopqrst"));
     test0(S("abcdefghijklmnopqrst"), "12345", S("abcdefghijklmnopqrst12345"));
-    test0(S("abcdefghijklmnopqrst"), "1234567890",
-          S("abcdefghijklmnopqrst1234567890"));
-    test0(S("abcdefghijklmnopqrst"), "12345678901234567890",
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test0(S("abcdefghijklmnopqrst"), "1234567890", S("abcdefghijklmnopqrst1234567890"));
+    test0(S("abcdefghijklmnopqrst"), "12345678901234567890", S("abcdefghijklmnopqrst12345678901234567890"));
 
     test1(S(""), "", S(""));
     test1(S(""), "12345", S("12345"));
@@ -116,14 +105,11 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test1(S("abcdefghij"), "", S("abcdefghij"));
     test1(S("abcdefghij"), "12345", S("abcdefghij12345"));
     test1(S("abcdefghij"), "1234567890", S("abcdefghij1234567890"));
-    test1(S("abcdefghij"), "12345678901234567890",
-          S("abcdefghij12345678901234567890"));
+    test1(S("abcdefghij"), "12345678901234567890", S("abcdefghij12345678901234567890"));
     test1(S("abcdefghijklmnopqrst"), "", S("abcdefghijklmnopqrst"));
     test1(S("abcdefghijklmnopqrst"), "12345", S("abcdefghijklmnopqrst12345"));
-    test1(S("abcdefghijklmnopqrst"), "1234567890",
-          S("abcdefghijklmnopqrst1234567890"));
-    test1(S("abcdefghijklmnopqrst"), "12345678901234567890",
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test1(S("abcdefghijklmnopqrst"), "1234567890", S("abcdefghijklmnopqrst1234567890"));
+    test1(S("abcdefghijklmnopqrst"), "12345678901234567890", S("abcdefghijklmnopqrst12345678901234567890"));
   }
 #endif
 

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_string.pass.cpp
index 7597c62a27a6eb5..fe03ba1e7c2725f 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_op+/string_string.pass.cpp
@@ -67,20 +67,15 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test0(S("abcde"), S(""), S("abcde"));
     test0(S("abcde"), S("12345"), S("abcde12345"));
     test0(S("abcde"), S("1234567890"), S("abcde1234567890"));
-    test0(S("abcde"), S("12345678901234567890"),
-          S("abcde12345678901234567890"));
+    test0(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
     test0(S("abcdefghij"), S(""), S("abcdefghij"));
     test0(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
     test0(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
-    test0(S("abcdefghij"), S("12345678901234567890"),
-          S("abcdefghij12345678901234567890"));
+    test0(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
     test0(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
-    test0(S("abcdefghijklmnopqrst"), S("12345"),
-          S("abcdefghijklmnopqrst12345"));
-    test0(S("abcdefghijklmnopqrst"), S("1234567890"),
-          S("abcdefghijklmnopqrst1234567890"));
-    test0(S("abcdefghijklmnopqrst"), S("12345678901234567890"),
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test0(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
+    test0(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test0(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
   }
 #if TEST_STD_VER >= 11
   {
@@ -92,20 +87,15 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test1(S("abcde"), S(""), S("abcde"));
     test1(S("abcde"), S("12345"), S("abcde12345"));
     test1(S("abcde"), S("1234567890"), S("abcde1234567890"));
-    test1(S("abcde"), S("12345678901234567890"),
-          S("abcde12345678901234567890"));
+    test1(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
     test1(S("abcdefghij"), S(""), S("abcdefghij"));
     test1(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
     test1(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
-    test1(S("abcdefghij"), S("12345678901234567890"),
-          S("abcdefghij12345678901234567890"));
+    test1(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
     test1(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
-    test1(S("abcdefghijklmnopqrst"), S("12345"),
-          S("abcdefghijklmnopqrst12345"));
-    test1(S("abcdefghijklmnopqrst"), S("1234567890"),
-          S("abcdefghijklmnopqrst1234567890"));
-    test1(S("abcdefghijklmnopqrst"), S("12345678901234567890"),
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test1(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
+    test1(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test1(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
 
     test2(S(""), S(""), S(""));
     test2(S(""), S("12345"), S("12345"));
@@ -114,20 +104,15 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test2(S("abcde"), S(""), S("abcde"));
     test2(S("abcde"), S("12345"), S("abcde12345"));
     test2(S("abcde"), S("1234567890"), S("abcde1234567890"));
-    test2(S("abcde"), S("12345678901234567890"),
-          S("abcde12345678901234567890"));
+    test2(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
     test2(S("abcdefghij"), S(""), S("abcdefghij"));
     test2(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
     test2(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
-    test2(S("abcdefghij"), S("12345678901234567890"),
-          S("abcdefghij12345678901234567890"));
+    test2(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
     test2(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
-    test2(S("abcdefghijklmnopqrst"), S("12345"),
-          S("abcdefghijklmnopqrst12345"));
-    test2(S("abcdefghijklmnopqrst"), S("1234567890"),
-          S("abcdefghijklmnopqrst1234567890"));
-    test2(S("abcdefghijklmnopqrst"), S("12345678901234567890"),
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test2(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
+    test2(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test2(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
 
     test3(S(""), S(""), S(""));
     test3(S(""), S("12345"), S("12345"));
@@ -136,25 +121,18 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test3(S("abcde"), S(""), S("abcde"));
     test3(S("abcde"), S("12345"), S("abcde12345"));
     test3(S("abcde"), S("1234567890"), S("abcde1234567890"));
-    test3(S("abcde"), S("12345678901234567890"),
-          S("abcde12345678901234567890"));
+    test3(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
     test3(S("abcdefghij"), S(""), S("abcdefghij"));
     test3(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
     test3(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
-    test3(S("abcdefghij"), S("12345678901234567890"),
-          S("abcdefghij12345678901234567890"));
+    test3(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
     test3(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
-    test3(S("abcdefghijklmnopqrst"), S("12345"),
-          S("abcdefghijklmnopqrst12345"));
-    test3(S("abcdefghijklmnopqrst"), S("1234567890"),
-          S("abcdefghijklmnopqrst1234567890"));
-    test3(S("abcdefghijklmnopqrst"), S("12345678901234567890"),
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test3(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
+    test3(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test3(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
   }
   {
-    typedef std::basic_string<char, std::char_traits<char>,
-                              min_allocator<char> >
-        S;
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char> > S;
     test0(S(""), S(""), S(""));
     test0(S(""), S("12345"), S("12345"));
     test0(S(""), S("1234567890"), S("1234567890"));
@@ -162,20 +140,15 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test0(S("abcde"), S(""), S("abcde"));
     test0(S("abcde"), S("12345"), S("abcde12345"));
     test0(S("abcde"), S("1234567890"), S("abcde1234567890"));
-    test0(S("abcde"), S("12345678901234567890"),
-          S("abcde12345678901234567890"));
+    test0(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
     test0(S("abcdefghij"), S(""), S("abcdefghij"));
     test0(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
     test0(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
-    test0(S("abcdefghij"), S("12345678901234567890"),
-          S("abcdefghij12345678901234567890"));
+    test0(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
     test0(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
-    test0(S("abcdefghijklmnopqrst"), S("12345"),
-          S("abcdefghijklmnopqrst12345"));
-    test0(S("abcdefghijklmnopqrst"), S("1234567890"),
-          S("abcdefghijklmnopqrst1234567890"));
-    test0(S("abcdefghijklmnopqrst"), S("12345678901234567890"),
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test0(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
+    test0(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test0(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
 
     test1(S(""), S(""), S(""));
     test1(S(""), S("12345"), S("12345"));
@@ -184,20 +157,15 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test1(S("abcde"), S(""), S("abcde"));
     test1(S("abcde"), S("12345"), S("abcde12345"));
     test1(S("abcde"), S("1234567890"), S("abcde1234567890"));
-    test1(S("abcde"), S("12345678901234567890"),
-          S("abcde12345678901234567890"));
+    test1(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
     test1(S("abcdefghij"), S(""), S("abcdefghij"));
     test1(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
     test1(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
-    test1(S("abcdefghij"), S("12345678901234567890"),
-          S("abcdefghij12345678901234567890"));
+    test1(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
     test1(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
-    test1(S("abcdefghijklmnopqrst"), S("12345"),
-          S("abcdefghijklmnopqrst12345"));
-    test1(S("abcdefghijklmnopqrst"), S("1234567890"),
-          S("abcdefghijklmnopqrst1234567890"));
-    test1(S("abcdefghijklmnopqrst"), S("12345678901234567890"),
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test1(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
+    test1(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test1(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
 
     test2(S(""), S(""), S(""));
     test2(S(""), S("12345"), S("12345"));
@@ -206,20 +174,15 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test2(S("abcde"), S(""), S("abcde"));
     test2(S("abcde"), S("12345"), S("abcde12345"));
     test2(S("abcde"), S("1234567890"), S("abcde1234567890"));
-    test2(S("abcde"), S("12345678901234567890"),
-          S("abcde12345678901234567890"));
+    test2(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
     test2(S("abcdefghij"), S(""), S("abcdefghij"));
     test2(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
     test2(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
-    test2(S("abcdefghij"), S("12345678901234567890"),
-          S("abcdefghij12345678901234567890"));
+    test2(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
     test2(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
-    test2(S("abcdefghijklmnopqrst"), S("12345"),
-          S("abcdefghijklmnopqrst12345"));
-    test2(S("abcdefghijklmnopqrst"), S("1234567890"),
-          S("abcdefghijklmnopqrst1234567890"));
-    test2(S("abcdefghijklmnopqrst"), S("12345678901234567890"),
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test2(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
+    test2(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test2(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
 
     test3(S(""), S(""), S(""));
     test3(S(""), S("12345"), S("12345"));
@@ -228,20 +191,15 @@ TEST_CONSTEXPR_CXX20 bool test() {
     test3(S("abcde"), S(""), S("abcde"));
     test3(S("abcde"), S("12345"), S("abcde12345"));
     test3(S("abcde"), S("1234567890"), S("abcde1234567890"));
-    test3(S("abcde"), S("12345678901234567890"),
-          S("abcde12345678901234567890"));
+    test3(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
     test3(S("abcdefghij"), S(""), S("abcdefghij"));
     test3(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
     test3(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
-    test3(S("abcdefghij"), S("12345678901234567890"),
-          S("abcdefghij12345678901234567890"));
+    test3(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
     test3(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
-    test3(S("abcdefghijklmnopqrst"), S("12345"),
-          S("abcdefghijklmnopqrst12345"));
-    test3(S("abcdefghijklmnopqrst"), S("1234567890"),
-          S("abcdefghijklmnopqrst1234567890"));
-    test3(S("abcdefghijklmnopqrst"), S("12345678901234567890"),
-          S("abcdefghijklmnopqrst12345678901234567890"));
+    test3(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
+    test3(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
+    test3(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
   }
 #endif // TEST_STD_VER >= 11
 

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/pointer_string.pass.cpp
index 32ad033f827f5cc..9b0072405df6a48 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/pointer_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/pointer_string.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const typename S::value_type* lhs, const S& rhs, bool x)
-{
-    assert((lhs == rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const typename S::value_type* lhs, const S& rhs, bool x) {
+  assert((lhs == rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -69,8 +67,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_pointer.pass.cpp
index 2b38fd8f915e800..54021af1d11a95d 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_pointer.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, const typename S::value_type* rhs, bool x)
-{
-    assert((lhs == rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) {
+  assert((lhs == rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -69,8 +67,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string.pass.cpp
index bbc0b153699eb26..7cac0dfb76632fc 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string.pass.cpp
@@ -19,10 +19,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, const S& rhs, bool x)
-{
-    assert((lhs == rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, const S& rhs, bool x) {
+  assert((lhs == rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string_view.pass.cpp
index 4ef18a836b339c2..e151735cdd56a7a 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_string_view.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, SV rhs, bool x)
-{
-    assert((lhs == rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, SV rhs, bool x) {
+  assert((lhs == rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -46,7 +44,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   }
 #if TEST_STD_VER >= 11
   {
-    typedef std::basic_string     <char, std::char_traits<char>, min_allocator<char>> S;
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
     typedef std::basic_string_view<char, std::char_traits<char>> SV;
     test(S(""), SV(""), true);
     test(S(""), SV("abcde"), false);
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_view_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_view_string.pass.cpp
index ef741d9113053a8..bd386eae6ce8ec7 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_view_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_operator==/string_view_string.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(SV lhs, const S& rhs, bool x)
-{
-    assert((lhs == rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(SV lhs, const S& rhs, bool x) {
+  assert((lhs == rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/pointer_string.pass.cpp
index 60b473c61dd5e61..66c97d7e814f231 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/pointer_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/pointer_string.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const typename S::value_type* lhs, const S& rhs, bool x)
-{
-    assert((lhs > rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const typename S::value_type* lhs, const S& rhs, bool x) {
+  assert((lhs > rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -69,8 +67,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_pointer.pass.cpp
index 2ec254528b8f8e5..1f7fb5d26ec9052 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_pointer.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, const typename S::value_type* rhs, bool x)
-{
-    assert((lhs > rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) {
+  assert((lhs > rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -69,8 +67,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string.pass.cpp
index 95bb8760fd8ba38..51070fd938f9683 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string.pass.cpp
@@ -19,10 +19,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, const S& rhs, bool x)
-{
-    assert((lhs > rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, const S& rhs, bool x) {
+  assert((lhs > rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string_view.pass.cpp
index f5767ca8fe56ed9..ed5d308c4521d63 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_string_view.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, SV rhs, bool x)
-{
-    assert((lhs > rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, SV rhs, bool x) {
+  assert((lhs > rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -46,7 +44,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   }
 #if TEST_STD_VER >= 11
   {
-    typedef std::basic_string     <char, std::char_traits<char>, min_allocator<char>> S;
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
     typedef std::basic_string_view<char, std::char_traits<char>> SV;
     test(S(""), SV(""), false);
     test(S(""), SV("abcde"), false);
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_view_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_view_string.pass.cpp
index 5e549a83d4c1c40..be508abd37e8a33 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_view_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt/string_view_string.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(SV lhs, const S& rhs, bool x)
-{
-    assert((lhs > rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(SV lhs, const S& rhs, bool x) {
+  assert((lhs > rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -46,7 +44,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   }
 #if TEST_STD_VER >= 11
   {
-    typedef std::basic_string     <char, std::char_traits<char>, min_allocator<char>> S;
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
     typedef std::basic_string_view<char, std::char_traits<char>> SV;
     test(SV(""), S(""), false);
     test(SV(""), S("abcde"), false);
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/pointer_string.pass.cpp
index fdf1c9ae0587580..b65da02351e6d98 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/pointer_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/pointer_string.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const typename S::value_type* lhs, const S& rhs, bool x)
-{
-    assert((lhs >= rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const typename S::value_type* lhs, const S& rhs, bool x) {
+  assert((lhs >= rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -69,8 +67,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_pointer.pass.cpp
index 279f91fe3503cfb..2bb008c730848ab 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_pointer.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, const typename S::value_type* rhs, bool x)
-{
-    assert((lhs >= rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) {
+  assert((lhs >= rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -69,8 +67,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string.pass.cpp
index e952ab5be9135c0..9e42ab587387578 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string.pass.cpp
@@ -19,10 +19,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, const S& rhs, bool x)
-{
-    assert((lhs >= rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, const S& rhs, bool x) {
+  assert((lhs >= rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string_view.pass.cpp
index fa7404c576b22db..aa43fe9ac291244 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_string_view.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, SV rhs, bool x)
-{
-    assert((lhs >= rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, SV rhs, bool x) {
+  assert((lhs >= rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_view_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_view_string.pass.cpp
index 850fc3a6c195f43..e42a387de765107 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_view_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_opgt=/string_view_string.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(SV lhs, const S& rhs, bool x)
-{
-    assert((lhs >= rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(SV lhs, const S& rhs, bool x) {
+  assert((lhs >= rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/pointer_string.pass.cpp
index 7bab5f6bb2054ca..06e4f28efc508a5 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/pointer_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/pointer_string.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const typename S::value_type* lhs, const S& rhs, bool x)
-{
-    assert((lhs < rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const typename S::value_type* lhs, const S& rhs, bool x) {
+  assert((lhs < rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -69,8 +67,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_pointer.pass.cpp
index 0e5ae95acd06c15..d489ed3fc8c0ceb 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_pointer.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, const typename S::value_type* rhs, bool x)
-{
-    assert((lhs < rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) {
+  assert((lhs < rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -69,8 +67,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string.pass.cpp
index 3955ae48f989001..fcf7d4df541eb45 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string.pass.cpp
@@ -19,10 +19,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, const S& rhs, bool x)
-{
-    assert((lhs < rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, const S& rhs, bool x) {
+  assert((lhs < rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string_view.pass.cpp
index e04d6874a24f857..0c728a975215935 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_string_view.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, SV rhs, bool x)
-{
-    assert((lhs < rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, SV rhs, bool x) {
+  assert((lhs < rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_view_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_view_string.pass.cpp
index 0babe40dc6777d4..7cc8a2a9dead1c8 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_view_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt/string_view_string.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(SV lhs, const S& rhs, bool x)
-{
-    assert((lhs < rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(SV lhs, const S& rhs, bool x) {
+  assert((lhs < rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/pointer_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/pointer_string.pass.cpp
index 0ea10d60706a088..1242431248eb52e 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/pointer_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/pointer_string.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const typename S::value_type* lhs, const S& rhs, bool x)
-{
-    assert((lhs <= rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const typename S::value_type* lhs, const S& rhs, bool x) {
+  assert((lhs <= rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -69,8 +67,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_pointer.pass.cpp
index 38155cd0538f560..8107c3c25fd410c 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_pointer.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, const typename S::value_type* rhs, bool x)
-{
-    assert((lhs <= rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) {
+  assert((lhs <= rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -69,8 +67,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string.pass.cpp
index 9555697a6e3979d..508e8bdb7853c45 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string.pass.cpp
@@ -19,10 +19,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, const S& rhs, bool x)
-{
-    assert((lhs <= rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, const S& rhs, bool x) {
+  assert((lhs <= rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string_view.pass.cpp
index d7465723e1a4d26..e9ea2fb8f444088 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_string_view.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& lhs, SV rhs, bool x)
-{
-    assert((lhs <= rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(const S& lhs, SV rhs, bool x) {
+  assert((lhs <= rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_view_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_view_string.pass.cpp
index bf60796be8a69df..b46e0b2b1373f21 100644
--- a/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_view_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.nonmembers/string_oplt=/string_view_string.pass.cpp
@@ -17,10 +17,8 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(SV lhs, const S& rhs, bool x)
-{
-    assert((lhs <= rhs) == x);
+TEST_CONSTEXPR_CXX20 void test(SV lhs, const S& rhs, bool x) {
+  assert((lhs <= rhs) == x);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -70,8 +68,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string.accessors/c_str.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string.accessors/c_str.pass.cpp
index 8a96f38cab1768a..0fcdc02124588fd 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string.accessors/c_str.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string.accessors/c_str.pass.cpp
@@ -17,18 +17,14 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s)
-{
-    typedef typename S::traits_type T;
-    const typename S::value_type* str = s.c_str();
-    if (s.size() > 0)
-    {
-        assert(T::compare(str, &s[0], s.size()) == 0);
-        assert(T::eq(str[s.size()], typename S::value_type()));
-    }
-    else
-        assert(T::eq(str[0], typename S::value_type()));
+TEST_CONSTEXPR_CXX20 void test(const S& s) {
+  typedef typename S::traits_type T;
+  const typename S::value_type* str = s.c_str();
+  if (s.size() > 0) {
+    assert(T::compare(str, &s[0], s.size()) == 0);
+    assert(T::eq(str[s.size()], typename S::value_type()));
+  } else
+    assert(T::eq(str[0], typename S::value_type()));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -52,8 +48,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp
index 11ff56af1c7ae74..3d7c8c8f4cb430d 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string.accessors/data.pass.cpp
@@ -18,33 +18,25 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test_const(const S& s)
-{
-    typedef typename S::traits_type T;
-    const typename S::value_type* str = s.data();
-    if (s.size() > 0)
-    {
-        assert(T::compare(str, &s[0], s.size()) == 0);
-        assert(T::eq(str[s.size()], typename S::value_type()));
-    }
-    else
-        assert(T::eq(str[0], typename S::value_type()));
+TEST_CONSTEXPR_CXX20 void test_const(const S& s) {
+  typedef typename S::traits_type T;
+  const typename S::value_type* str = s.data();
+  if (s.size() > 0) {
+    assert(T::compare(str, &s[0], s.size()) == 0);
+    assert(T::eq(str[s.size()], typename S::value_type()));
+  } else
+    assert(T::eq(str[0], typename S::value_type()));
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test_nonconst(S& s)
-{
-    typedef typename S::traits_type T;
-    typename S::value_type* str = s.data();
-    if (s.size() > 0)
-    {
-        assert(T::compare(str, &s[0], s.size()) == 0);
-        assert(T::eq(str[s.size()], typename S::value_type()));
-    }
-    else
-        assert(T::eq(str[0], typename S::value_type()));
+TEST_CONSTEXPR_CXX20 void test_nonconst(S& s) {
+  typedef typename S::traits_type T;
+  typename S::value_type* str = s.data();
+  if (s.size() > 0) {
+    assert(T::compare(str, &s[0], s.size()) == 0);
+    assert(T::eq(str[s.size()], typename S::value_type()));
+  } else
+    assert(T::eq(str[0], typename S::value_type()));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -67,18 +59,21 @@ TEST_CONSTEXPR_CXX20 bool test() {
 #if TEST_STD_VER > 14
   {
     typedef std::string S;
-    S s1("");                     test_nonconst(s1);
-    S s2("abcde");                test_nonconst(s2);
-    S s3("abcdefghij");           test_nonconst(s3);
-    S s4("abcdefghijklmnopqrst"); test_nonconst(s4);
+    S s1("");
+    test_nonconst(s1);
+    S s2("abcde");
+    test_nonconst(s2);
+    S s3("abcdefghij");
+    test_nonconst(s3);
+    S s4("abcdefghijklmnopqrst");
+    test_nonconst(s4);
   }
 #endif
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp
index 6eed6961f7d1d6c..819e4a046d6fd16 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string.accessors/get_allocator.pass.cpp
@@ -18,10 +18,8 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::allocator_type& a)
-{
-    assert(s.get_allocator() == a);
+TEST_CONSTEXPR_CXX20 void test(const S& s, const typename S::allocator_type& a) {
+  assert(s.get_allocator() == a);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -47,8 +45,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/pointer.pass.cpp
index 0863b4b15099f84..dbabaac65050405 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/pointer.pass.cpp
@@ -16,21 +16,18 @@
 #include "test_macros.h"
 #include "min_allocator.h"
 
-TEST_CONSTEXPR_CXX20 int sign(int x)
-{
-    if (x == 0)
-        return 0;
-    if (x < 0)
-        return -1;
-    return 1;
+TEST_CONSTEXPR_CXX20 int sign(int x) {
+  if (x == 0)
+    return 0;
+  if (x < 0)
+    return -1;
+  return 1;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, int x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.compare(str));
-    assert(sign(s.compare(str)) == sign(x));
+TEST_CONSTEXPR_CXX20 void test(const S& s, const typename S::value_type* str, int x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.compare(str));
+  assert(sign(s.compare(str)) == sign(x));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -78,8 +75,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_T_size_size.pass.cpp
index 9b39d33656c9f26..49916cbd56f9944 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_T_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_T_size_size.pass.cpp
@@ -22,5958 +22,5895 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 int sign(int x)
-{
-    if (x == 0)
-        return 0;
-    if (x < 0)
-        return -1;
-    return 1;
+TEST_CONSTEXPR_CXX20 int sign(int x) {
+  if (x == 0)
+    return 0;
+  if (x < 0)
+    return -1;
+  return 1;
 }
 
 template <class S, class SV>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::size_type pos1, typename S::size_type n1,
-     SV sv,      typename S::size_type pos2, typename S::size_type n2, int x)
-{
-    static_assert((!std::is_same<S, SV>::value), "");
-    if (pos1 <= s.size() && pos2 <= sv.size())
-        assert(sign(s.compare(pos1, n1, sv, pos2, n2)) == sign(x));
+test(const S& s,
+     typename S::size_type pos1,
+     typename S::size_type n1,
+     SV sv,
+     typename S::size_type pos2,
+     typename S::size_type n2,
+     int x) {
+  static_assert((!std::is_same<S, SV>::value), "");
+  if (pos1 <= s.size() && pos2 <= sv.size())
+    assert(sign(s.compare(pos1, n1, sv, pos2, n2)) == sign(x));
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            TEST_IGNORE_NODISCARD s.compare(pos1, n1, sv, pos2, n2);
-            assert(false);
-        }
-        catch (const std::out_of_range&)
-        {
-            assert(pos1 > s.size() || pos2 > sv.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      TEST_IGNORE_NODISCARD s.compare(pos1, n1, sv, pos2, n2);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(pos1 > s.size() || pos2 > sv.size());
     }
+  }
 #endif
 }
 
 template <class S, class SV>
 TEST_CONSTEXPR_CXX20 void
-test_npos(const S& s, typename S::size_type pos1, typename S::size_type n1,
-          SV sv,      typename S::size_type pos2, int x)
-{
-    static_assert((!std::is_same<S, SV>::value), "");
-    if (pos1 <= s.size() && pos2 <= sv.size())
-        assert(sign(s.compare(pos1, n1, sv, pos2)) == sign(x));
+test_npos(const S& s, typename S::size_type pos1, typename S::size_type n1, SV sv, typename S::size_type pos2, int x) {
+  static_assert((!std::is_same<S, SV>::value), "");
+  if (pos1 <= s.size() && pos2 <= sv.size())
+    assert(sign(s.compare(pos1, n1, sv, pos2)) == sign(x));
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            TEST_IGNORE_NODISCARD s.compare(pos1, n1, sv, pos2);
-            assert(false);
-        }
-        catch (const std::out_of_range&)
-        {
-            assert(pos1 > s.size() || pos2 > sv.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      TEST_IGNORE_NODISCARD s.compare(pos1, n1, sv, pos2);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(pos1 > s.size() || pos2 > sv.size());
     }
+  }
 #endif
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, SV(""), 0, 0, 0);
-    test(S(""), 0, 0, SV(""), 0, 1, 0);
-    test(S(""), 0, 0, SV(""), 1, 0, 0);
-    test(S(""), 0, 0, SV("abcde"), 0, 0, 0);
-    test(S(""), 0, 0, SV("abcde"), 0, 1, -1);
-    test(S(""), 0, 0, SV("abcde"), 0, 2, -2);
-    test(S(""), 0, 0, SV("abcde"), 0, 4, -4);
-    test(S(""), 0, 0, SV("abcde"), 0, 5, -5);
-    test(S(""), 0, 0, SV("abcde"), 0, 6, -5);
-    test(S(""), 0, 0, SV("abcde"), 1, 0, 0);
-    test(S(""), 0, 0, SV("abcde"), 1, 1, -1);
-    test(S(""), 0, 0, SV("abcde"), 1, 2, -2);
-    test(S(""), 0, 0, SV("abcde"), 1, 3, -3);
-    test(S(""), 0, 0, SV("abcde"), 1, 4, -4);
-    test(S(""), 0, 0, SV("abcde"), 1, 5, -4);
-    test(S(""), 0, 0, SV("abcde"), 2, 0, 0);
-    test(S(""), 0, 0, SV("abcde"), 2, 1, -1);
-    test(S(""), 0, 0, SV("abcde"), 2, 2, -2);
-    test(S(""), 0, 0, SV("abcde"), 2, 3, -3);
-    test(S(""), 0, 0, SV("abcde"), 2, 4, -3);
-    test(S(""), 0, 0, SV("abcde"), 4, 0, 0);
-    test(S(""), 0, 0, SV("abcde"), 4, 1, -1);
-    test(S(""), 0, 0, SV("abcde"), 4, 2, -1);
-    test(S(""), 0, 0, SV("abcde"), 5, 0, 0);
-    test(S(""), 0, 0, SV("abcde"), 5, 1, 0);
-    test(S(""), 0, 0, SV("abcde"), 6, 0, 0);
-    test(S(""), 0, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S(""), 0, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S(""), 0, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S(""), 0, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S(""), 0, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S(""), 0, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S(""), 0, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S(""), 0, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S(""), 0, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S(""), 0, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S(""), 0, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S(""), 0, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S(""), 0, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S(""), 0, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S(""), 0, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S(""), 0, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S(""), 0, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S(""), 0, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S(""), 0, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S(""), 0, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S(""), 0, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S(""), 0, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S(""), 0, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S(""), 0, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S(""), 0, 1, SV(""), 0, 0, 0);
-    test(S(""), 0, 1, SV(""), 0, 1, 0);
-    test(S(""), 0, 1, SV(""), 1, 0, 0);
-    test(S(""), 0, 1, SV("abcde"), 0, 0, 0);
-    test(S(""), 0, 1, SV("abcde"), 0, 1, -1);
-    test(S(""), 0, 1, SV("abcde"), 0, 2, -2);
-    test(S(""), 0, 1, SV("abcde"), 0, 4, -4);
-    test(S(""), 0, 1, SV("abcde"), 0, 5, -5);
-    test(S(""), 0, 1, SV("abcde"), 0, 6, -5);
-    test(S(""), 0, 1, SV("abcde"), 1, 0, 0);
-    test(S(""), 0, 1, SV("abcde"), 1, 1, -1);
-    test(S(""), 0, 1, SV("abcde"), 1, 2, -2);
-    test(S(""), 0, 1, SV("abcde"), 1, 3, -3);
-    test(S(""), 0, 1, SV("abcde"), 1, 4, -4);
-    test(S(""), 0, 1, SV("abcde"), 1, 5, -4);
-    test(S(""), 0, 1, SV("abcde"), 2, 0, 0);
-    test(S(""), 0, 1, SV("abcde"), 2, 1, -1);
-    test(S(""), 0, 1, SV("abcde"), 2, 2, -2);
-    test(S(""), 0, 1, SV("abcde"), 2, 3, -3);
-    test(S(""), 0, 1, SV("abcde"), 2, 4, -3);
-    test(S(""), 0, 1, SV("abcde"), 4, 0, 0);
-    test(S(""), 0, 1, SV("abcde"), 4, 1, -1);
-    test(S(""), 0, 1, SV("abcde"), 4, 2, -1);
-    test(S(""), 0, 1, SV("abcde"), 5, 0, 0);
-    test(S(""), 0, 1, SV("abcde"), 5, 1, 0);
-    test(S(""), 0, 1, SV("abcde"), 6, 0, 0);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, SV(""), 0, 0, 0);
+  test(S(""), 0, 0, SV(""), 0, 1, 0);
+  test(S(""), 0, 0, SV(""), 1, 0, 0);
+  test(S(""), 0, 0, SV("abcde"), 0, 0, 0);
+  test(S(""), 0, 0, SV("abcde"), 0, 1, -1);
+  test(S(""), 0, 0, SV("abcde"), 0, 2, -2);
+  test(S(""), 0, 0, SV("abcde"), 0, 4, -4);
+  test(S(""), 0, 0, SV("abcde"), 0, 5, -5);
+  test(S(""), 0, 0, SV("abcde"), 0, 6, -5);
+  test(S(""), 0, 0, SV("abcde"), 1, 0, 0);
+  test(S(""), 0, 0, SV("abcde"), 1, 1, -1);
+  test(S(""), 0, 0, SV("abcde"), 1, 2, -2);
+  test(S(""), 0, 0, SV("abcde"), 1, 3, -3);
+  test(S(""), 0, 0, SV("abcde"), 1, 4, -4);
+  test(S(""), 0, 0, SV("abcde"), 1, 5, -4);
+  test(S(""), 0, 0, SV("abcde"), 2, 0, 0);
+  test(S(""), 0, 0, SV("abcde"), 2, 1, -1);
+  test(S(""), 0, 0, SV("abcde"), 2, 2, -2);
+  test(S(""), 0, 0, SV("abcde"), 2, 3, -3);
+  test(S(""), 0, 0, SV("abcde"), 2, 4, -3);
+  test(S(""), 0, 0, SV("abcde"), 4, 0, 0);
+  test(S(""), 0, 0, SV("abcde"), 4, 1, -1);
+  test(S(""), 0, 0, SV("abcde"), 4, 2, -1);
+  test(S(""), 0, 0, SV("abcde"), 5, 0, 0);
+  test(S(""), 0, 0, SV("abcde"), 5, 1, 0);
+  test(S(""), 0, 0, SV("abcde"), 6, 0, 0);
+  test(S(""), 0, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S(""), 0, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S(""), 0, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S(""), 0, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S(""), 0, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S(""), 0, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S(""), 0, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S(""), 0, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S(""), 0, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S(""), 0, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S(""), 0, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S(""), 0, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S(""), 0, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S(""), 0, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S(""), 0, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S(""), 0, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S(""), 0, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S(""), 0, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S(""), 0, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S(""), 0, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S(""), 0, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S(""), 0, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S(""), 0, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S(""), 0, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S(""), 0, 1, SV(""), 0, 0, 0);
+  test(S(""), 0, 1, SV(""), 0, 1, 0);
+  test(S(""), 0, 1, SV(""), 1, 0, 0);
+  test(S(""), 0, 1, SV("abcde"), 0, 0, 0);
+  test(S(""), 0, 1, SV("abcde"), 0, 1, -1);
+  test(S(""), 0, 1, SV("abcde"), 0, 2, -2);
+  test(S(""), 0, 1, SV("abcde"), 0, 4, -4);
+  test(S(""), 0, 1, SV("abcde"), 0, 5, -5);
+  test(S(""), 0, 1, SV("abcde"), 0, 6, -5);
+  test(S(""), 0, 1, SV("abcde"), 1, 0, 0);
+  test(S(""), 0, 1, SV("abcde"), 1, 1, -1);
+  test(S(""), 0, 1, SV("abcde"), 1, 2, -2);
+  test(S(""), 0, 1, SV("abcde"), 1, 3, -3);
+  test(S(""), 0, 1, SV("abcde"), 1, 4, -4);
+  test(S(""), 0, 1, SV("abcde"), 1, 5, -4);
+  test(S(""), 0, 1, SV("abcde"), 2, 0, 0);
+  test(S(""), 0, 1, SV("abcde"), 2, 1, -1);
+  test(S(""), 0, 1, SV("abcde"), 2, 2, -2);
+  test(S(""), 0, 1, SV("abcde"), 2, 3, -3);
+  test(S(""), 0, 1, SV("abcde"), 2, 4, -3);
+  test(S(""), 0, 1, SV("abcde"), 4, 0, 0);
+  test(S(""), 0, 1, SV("abcde"), 4, 1, -1);
+  test(S(""), 0, 1, SV("abcde"), 4, 2, -1);
+  test(S(""), 0, 1, SV("abcde"), 5, 0, 0);
+  test(S(""), 0, 1, SV("abcde"), 5, 1, 0);
+  test(S(""), 0, 1, SV("abcde"), 6, 0, 0);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S(""), 0, 1, SV("abcdefghij"), 0, 0, 0);
-    test(S(""), 0, 1, SV("abcdefghij"), 0, 1, -1);
-    test(S(""), 0, 1, SV("abcdefghij"), 0, 5, -5);
-    test(S(""), 0, 1, SV("abcdefghij"), 0, 9, -9);
-    test(S(""), 0, 1, SV("abcdefghij"), 0, 10, -10);
-    test(S(""), 0, 1, SV("abcdefghij"), 0, 11, -10);
-    test(S(""), 0, 1, SV("abcdefghij"), 1, 0, 0);
-    test(S(""), 0, 1, SV("abcdefghij"), 1, 1, -1);
-    test(S(""), 0, 1, SV("abcdefghij"), 1, 4, -4);
-    test(S(""), 0, 1, SV("abcdefghij"), 1, 8, -8);
-    test(S(""), 0, 1, SV("abcdefghij"), 1, 9, -9);
-    test(S(""), 0, 1, SV("abcdefghij"), 1, 10, -9);
-    test(S(""), 0, 1, SV("abcdefghij"), 5, 0, 0);
-    test(S(""), 0, 1, SV("abcdefghij"), 5, 1, -1);
-    test(S(""), 0, 1, SV("abcdefghij"), 5, 2, -2);
-    test(S(""), 0, 1, SV("abcdefghij"), 5, 4, -4);
-    test(S(""), 0, 1, SV("abcdefghij"), 5, 5, -5);
-    test(S(""), 0, 1, SV("abcdefghij"), 5, 6, -5);
-    test(S(""), 0, 1, SV("abcdefghij"), 9, 0, 0);
-    test(S(""), 0, 1, SV("abcdefghij"), 9, 1, -1);
-    test(S(""), 0, 1, SV("abcdefghij"), 9, 2, -1);
-    test(S(""), 0, 1, SV("abcdefghij"), 10, 0, 0);
-    test(S(""), 0, 1, SV("abcdefghij"), 10, 1, 0);
-    test(S(""), 0, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S(""), 1, 0, SV(""), 0, 0, 0);
-    test(S(""), 1, 0, SV(""), 0, 1, 0);
-    test(S(""), 1, 0, SV(""), 1, 0, 0);
-    test(S(""), 1, 0, SV("abcde"), 0, 0, 0);
-    test(S(""), 1, 0, SV("abcde"), 0, 1, 0);
-    test(S(""), 1, 0, SV("abcde"), 0, 2, 0);
-    test(S(""), 1, 0, SV("abcde"), 0, 4, 0);
-    test(S(""), 1, 0, SV("abcde"), 0, 5, 0);
-    test(S(""), 1, 0, SV("abcde"), 0, 6, 0);
-    test(S(""), 1, 0, SV("abcde"), 1, 0, 0);
-    test(S(""), 1, 0, SV("abcde"), 1, 1, 0);
-    test(S(""), 1, 0, SV("abcde"), 1, 2, 0);
-    test(S(""), 1, 0, SV("abcde"), 1, 3, 0);
-    test(S(""), 1, 0, SV("abcde"), 1, 4, 0);
-    test(S(""), 1, 0, SV("abcde"), 1, 5, 0);
-    test(S(""), 1, 0, SV("abcde"), 2, 0, 0);
-    test(S(""), 1, 0, SV("abcde"), 2, 1, 0);
-    test(S(""), 1, 0, SV("abcde"), 2, 2, 0);
-    test(S(""), 1, 0, SV("abcde"), 2, 3, 0);
-    test(S(""), 1, 0, SV("abcde"), 2, 4, 0);
-    test(S(""), 1, 0, SV("abcde"), 4, 0, 0);
-    test(S(""), 1, 0, SV("abcde"), 4, 1, 0);
-    test(S(""), 1, 0, SV("abcde"), 4, 2, 0);
-    test(S(""), 1, 0, SV("abcde"), 5, 0, 0);
-    test(S(""), 1, 0, SV("abcde"), 5, 1, 0);
-    test(S(""), 1, 0, SV("abcde"), 6, 0, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 0, 1, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 0, 5, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 0, 9, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 0, 10, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 0, 11, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 1, 1, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 1, 4, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 1, 8, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 1, 9, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 1, 10, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 5, 1, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 5, 2, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 5, 4, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 5, 5, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 5, 6, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 9, 1, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 9, 2, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 1, 0);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S(""), 0, 1, SV("abcdefghij"), 0, 0, 0);
+  test(S(""), 0, 1, SV("abcdefghij"), 0, 1, -1);
+  test(S(""), 0, 1, SV("abcdefghij"), 0, 5, -5);
+  test(S(""), 0, 1, SV("abcdefghij"), 0, 9, -9);
+  test(S(""), 0, 1, SV("abcdefghij"), 0, 10, -10);
+  test(S(""), 0, 1, SV("abcdefghij"), 0, 11, -10);
+  test(S(""), 0, 1, SV("abcdefghij"), 1, 0, 0);
+  test(S(""), 0, 1, SV("abcdefghij"), 1, 1, -1);
+  test(S(""), 0, 1, SV("abcdefghij"), 1, 4, -4);
+  test(S(""), 0, 1, SV("abcdefghij"), 1, 8, -8);
+  test(S(""), 0, 1, SV("abcdefghij"), 1, 9, -9);
+  test(S(""), 0, 1, SV("abcdefghij"), 1, 10, -9);
+  test(S(""), 0, 1, SV("abcdefghij"), 5, 0, 0);
+  test(S(""), 0, 1, SV("abcdefghij"), 5, 1, -1);
+  test(S(""), 0, 1, SV("abcdefghij"), 5, 2, -2);
+  test(S(""), 0, 1, SV("abcdefghij"), 5, 4, -4);
+  test(S(""), 0, 1, SV("abcdefghij"), 5, 5, -5);
+  test(S(""), 0, 1, SV("abcdefghij"), 5, 6, -5);
+  test(S(""), 0, 1, SV("abcdefghij"), 9, 0, 0);
+  test(S(""), 0, 1, SV("abcdefghij"), 9, 1, -1);
+  test(S(""), 0, 1, SV("abcdefghij"), 9, 2, -1);
+  test(S(""), 0, 1, SV("abcdefghij"), 10, 0, 0);
+  test(S(""), 0, 1, SV("abcdefghij"), 10, 1, 0);
+  test(S(""), 0, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S(""), 1, 0, SV(""), 0, 0, 0);
+  test(S(""), 1, 0, SV(""), 0, 1, 0);
+  test(S(""), 1, 0, SV(""), 1, 0, 0);
+  test(S(""), 1, 0, SV("abcde"), 0, 0, 0);
+  test(S(""), 1, 0, SV("abcde"), 0, 1, 0);
+  test(S(""), 1, 0, SV("abcde"), 0, 2, 0);
+  test(S(""), 1, 0, SV("abcde"), 0, 4, 0);
+  test(S(""), 1, 0, SV("abcde"), 0, 5, 0);
+  test(S(""), 1, 0, SV("abcde"), 0, 6, 0);
+  test(S(""), 1, 0, SV("abcde"), 1, 0, 0);
+  test(S(""), 1, 0, SV("abcde"), 1, 1, 0);
+  test(S(""), 1, 0, SV("abcde"), 1, 2, 0);
+  test(S(""), 1, 0, SV("abcde"), 1, 3, 0);
+  test(S(""), 1, 0, SV("abcde"), 1, 4, 0);
+  test(S(""), 1, 0, SV("abcde"), 1, 5, 0);
+  test(S(""), 1, 0, SV("abcde"), 2, 0, 0);
+  test(S(""), 1, 0, SV("abcde"), 2, 1, 0);
+  test(S(""), 1, 0, SV("abcde"), 2, 2, 0);
+  test(S(""), 1, 0, SV("abcde"), 2, 3, 0);
+  test(S(""), 1, 0, SV("abcde"), 2, 4, 0);
+  test(S(""), 1, 0, SV("abcde"), 4, 0, 0);
+  test(S(""), 1, 0, SV("abcde"), 4, 1, 0);
+  test(S(""), 1, 0, SV("abcde"), 4, 2, 0);
+  test(S(""), 1, 0, SV("abcde"), 5, 0, 0);
+  test(S(""), 1, 0, SV("abcde"), 5, 1, 0);
+  test(S(""), 1, 0, SV("abcde"), 6, 0, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 0, 1, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 0, 5, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 0, 9, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 0, 10, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 0, 11, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 1, 1, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 1, 4, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 1, 8, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 1, 9, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 1, 10, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 5, 1, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 5, 2, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 5, 4, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 5, 5, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 5, 6, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 9, 1, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 9, 2, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 1, 0);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 19, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 20, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 21, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 1, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 18, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 19, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 20, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 1, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 5, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 9, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 10, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 11, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 19, 1, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 19, 2, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 0, 0, SV(""), 0, 0, 0);
-    test(S("abcde"), 0, 0, SV(""), 0, 1, 0);
-    test(S("abcde"), 0, 0, SV(""), 1, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcde"), 0, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcde"), 0, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcde"), 0, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcde"), 0, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcde"), 0, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcde"), 0, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcde"), 0, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcde"), 0, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcde"), 0, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcde"), 0, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcde"), 0, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcde"), 0, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcde"), 0, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcde"), 0, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcde"), 0, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcde"), 0, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcde"), 0, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 0, 1, SV(""), 0, 0, 1);
-    test(S("abcde"), 0, 1, SV(""), 0, 1, 1);
-    test(S("abcde"), 0, 1, SV(""), 1, 0, 0);
-    test(S("abcde"), 0, 1, SV("abcde"), 0, 0, 1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 19, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 20, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0, 21, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 1, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 18, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 19, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 1, 20, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 1, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 5, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 9, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 10, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 10, 11, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 19, 1, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 19, 2, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 0, 0, SV(""), 0, 0, 0);
+  test(S("abcde"), 0, 0, SV(""), 0, 1, 0);
+  test(S("abcde"), 0, 0, SV(""), 1, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcde"), 0, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcde"), 0, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcde"), 0, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcde"), 0, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcde"), 0, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcde"), 0, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcde"), 0, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcde"), 0, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcde"), 0, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcde"), 0, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcde"), 0, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcde"), 0, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcde"), 0, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcde"), 0, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcde"), 0, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcde"), 0, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcde"), 0, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 0, 1, SV(""), 0, 0, 1);
+  test(S("abcde"), 0, 1, SV(""), 0, 1, 1);
+  test(S("abcde"), 0, 1, SV(""), 1, 0, 0);
+  test(S("abcde"), 0, 1, SV("abcde"), 0, 0, 1);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test3()
-{
-    test(S("abcde"), 0, 1, SV("abcde"), 0, 1, 0);
-    test(S("abcde"), 0, 1, SV("abcde"), 0, 2, -1);
-    test(S("abcde"), 0, 1, SV("abcde"), 0, 4, -3);
-    test(S("abcde"), 0, 1, SV("abcde"), 0, 5, -4);
-    test(S("abcde"), 0, 1, SV("abcde"), 0, 6, -4);
-    test(S("abcde"), 0, 1, SV("abcde"), 1, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcde"), 1, 1, -1);
-    test(S("abcde"), 0, 1, SV("abcde"), 1, 2, -1);
-    test(S("abcde"), 0, 1, SV("abcde"), 1, 3, -1);
-    test(S("abcde"), 0, 1, SV("abcde"), 1, 4, -1);
-    test(S("abcde"), 0, 1, SV("abcde"), 1, 5, -1);
-    test(S("abcde"), 0, 1, SV("abcde"), 2, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcde"), 2, 1, -2);
-    test(S("abcde"), 0, 1, SV("abcde"), 2, 2, -2);
-    test(S("abcde"), 0, 1, SV("abcde"), 2, 3, -2);
-    test(S("abcde"), 0, 1, SV("abcde"), 2, 4, -2);
-    test(S("abcde"), 0, 1, SV("abcde"), 4, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcde"), 4, 1, -4);
-    test(S("abcde"), 0, 1, SV("abcde"), 4, 2, -4);
-    test(S("abcde"), 0, 1, SV("abcde"), 5, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcde"), 5, 1, 1);
-    test(S("abcde"), 0, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 1, 0);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 5, -4);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 9, -8);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 10, -9);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 11, -9);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 1, 0);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 10, -9);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 19, -18);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 20, -19);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 21, -19);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 0, 2, SV(""), 0, 0, 2);
-    test(S("abcde"), 0, 2, SV(""), 0, 1, 2);
-    test(S("abcde"), 0, 2, SV(""), 1, 0, 0);
-    test(S("abcde"), 0, 2, SV("abcde"), 0, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcde"), 0, 1, 1);
-    test(S("abcde"), 0, 2, SV("abcde"), 0, 2, 0);
-    test(S("abcde"), 0, 2, SV("abcde"), 0, 4, -2);
-    test(S("abcde"), 0, 2, SV("abcde"), 0, 5, -3);
-    test(S("abcde"), 0, 2, SV("abcde"), 0, 6, -3);
-    test(S("abcde"), 0, 2, SV("abcde"), 1, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcde"), 1, 1, -1);
-    test(S("abcde"), 0, 2, SV("abcde"), 1, 2, -1);
-    test(S("abcde"), 0, 2, SV("abcde"), 1, 3, -1);
-    test(S("abcde"), 0, 2, SV("abcde"), 1, 4, -1);
-    test(S("abcde"), 0, 2, SV("abcde"), 1, 5, -1);
-    test(S("abcde"), 0, 2, SV("abcde"), 2, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcde"), 2, 1, -2);
-    test(S("abcde"), 0, 2, SV("abcde"), 2, 2, -2);
-    test(S("abcde"), 0, 2, SV("abcde"), 2, 3, -2);
-    test(S("abcde"), 0, 2, SV("abcde"), 2, 4, -2);
-    test(S("abcde"), 0, 2, SV("abcde"), 4, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcde"), 4, 1, -4);
-    test(S("abcde"), 0, 2, SV("abcde"), 4, 2, -4);
-    test(S("abcde"), 0, 2, SV("abcde"), 5, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcde"), 5, 1, 2);
-    test(S("abcde"), 0, 2, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 5, -3);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 9, -7);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test3() {
+  test(S("abcde"), 0, 1, SV("abcde"), 0, 1, 0);
+  test(S("abcde"), 0, 1, SV("abcde"), 0, 2, -1);
+  test(S("abcde"), 0, 1, SV("abcde"), 0, 4, -3);
+  test(S("abcde"), 0, 1, SV("abcde"), 0, 5, -4);
+  test(S("abcde"), 0, 1, SV("abcde"), 0, 6, -4);
+  test(S("abcde"), 0, 1, SV("abcde"), 1, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcde"), 1, 1, -1);
+  test(S("abcde"), 0, 1, SV("abcde"), 1, 2, -1);
+  test(S("abcde"), 0, 1, SV("abcde"), 1, 3, -1);
+  test(S("abcde"), 0, 1, SV("abcde"), 1, 4, -1);
+  test(S("abcde"), 0, 1, SV("abcde"), 1, 5, -1);
+  test(S("abcde"), 0, 1, SV("abcde"), 2, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcde"), 2, 1, -2);
+  test(S("abcde"), 0, 1, SV("abcde"), 2, 2, -2);
+  test(S("abcde"), 0, 1, SV("abcde"), 2, 3, -2);
+  test(S("abcde"), 0, 1, SV("abcde"), 2, 4, -2);
+  test(S("abcde"), 0, 1, SV("abcde"), 4, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcde"), 4, 1, -4);
+  test(S("abcde"), 0, 1, SV("abcde"), 4, 2, -4);
+  test(S("abcde"), 0, 1, SV("abcde"), 5, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcde"), 5, 1, 1);
+  test(S("abcde"), 0, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 1, 0);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 5, -4);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 9, -8);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 10, -9);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 0, 11, -9);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 1, 0);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 10, -9);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 19, -18);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 20, -19);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 21, -19);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 0, 2, SV(""), 0, 0, 2);
+  test(S("abcde"), 0, 2, SV(""), 0, 1, 2);
+  test(S("abcde"), 0, 2, SV(""), 1, 0, 0);
+  test(S("abcde"), 0, 2, SV("abcde"), 0, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcde"), 0, 1, 1);
+  test(S("abcde"), 0, 2, SV("abcde"), 0, 2, 0);
+  test(S("abcde"), 0, 2, SV("abcde"), 0, 4, -2);
+  test(S("abcde"), 0, 2, SV("abcde"), 0, 5, -3);
+  test(S("abcde"), 0, 2, SV("abcde"), 0, 6, -3);
+  test(S("abcde"), 0, 2, SV("abcde"), 1, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcde"), 1, 1, -1);
+  test(S("abcde"), 0, 2, SV("abcde"), 1, 2, -1);
+  test(S("abcde"), 0, 2, SV("abcde"), 1, 3, -1);
+  test(S("abcde"), 0, 2, SV("abcde"), 1, 4, -1);
+  test(S("abcde"), 0, 2, SV("abcde"), 1, 5, -1);
+  test(S("abcde"), 0, 2, SV("abcde"), 2, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcde"), 2, 1, -2);
+  test(S("abcde"), 0, 2, SV("abcde"), 2, 2, -2);
+  test(S("abcde"), 0, 2, SV("abcde"), 2, 3, -2);
+  test(S("abcde"), 0, 2, SV("abcde"), 2, 4, -2);
+  test(S("abcde"), 0, 2, SV("abcde"), 4, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcde"), 4, 1, -4);
+  test(S("abcde"), 0, 2, SV("abcde"), 4, 2, -4);
+  test(S("abcde"), 0, 2, SV("abcde"), 5, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcde"), 5, 1, 2);
+  test(S("abcde"), 0, 2, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 5, -3);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 9, -7);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test4()
-{
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 10, -8);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 11, -8);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 9, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 10, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 10, 1, 2);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 10, -8);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 19, -17);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 20, -18);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 21, -18);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 19, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 20, 0, 2);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 20, 1, 2);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 0, 4, SV(""), 0, 0, 4);
-    test(S("abcde"), 0, 4, SV(""), 0, 1, 4);
-    test(S("abcde"), 0, 4, SV(""), 1, 0, 0);
-    test(S("abcde"), 0, 4, SV("abcde"), 0, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcde"), 0, 1, 3);
-    test(S("abcde"), 0, 4, SV("abcde"), 0, 2, 2);
-    test(S("abcde"), 0, 4, SV("abcde"), 0, 4, 0);
-    test(S("abcde"), 0, 4, SV("abcde"), 0, 5, -1);
-    test(S("abcde"), 0, 4, SV("abcde"), 0, 6, -1);
-    test(S("abcde"), 0, 4, SV("abcde"), 1, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcde"), 1, 1, -1);
-    test(S("abcde"), 0, 4, SV("abcde"), 1, 2, -1);
-    test(S("abcde"), 0, 4, SV("abcde"), 1, 3, -1);
-    test(S("abcde"), 0, 4, SV("abcde"), 1, 4, -1);
-    test(S("abcde"), 0, 4, SV("abcde"), 1, 5, -1);
-    test(S("abcde"), 0, 4, SV("abcde"), 2, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcde"), 2, 1, -2);
-    test(S("abcde"), 0, 4, SV("abcde"), 2, 2, -2);
-    test(S("abcde"), 0, 4, SV("abcde"), 2, 3, -2);
-    test(S("abcde"), 0, 4, SV("abcde"), 2, 4, -2);
-    test(S("abcde"), 0, 4, SV("abcde"), 4, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcde"), 4, 1, -4);
-    test(S("abcde"), 0, 4, SV("abcde"), 4, 2, -4);
-    test(S("abcde"), 0, 4, SV("abcde"), 5, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcde"), 5, 1, 4);
-    test(S("abcde"), 0, 4, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 1, 3);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 5, -1);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 9, -5);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 10, -6);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 11, -6);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 9, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 10, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 10, 1, 4);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 1, 3);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 10, -6);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 19, -15);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 20, -16);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 21, -16);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test4() {
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 10, -8);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 0, 11, -8);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 9, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 10, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 10, 1, 2);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 10, -8);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 19, -17);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 20, -18);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 0, 21, -18);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 19, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 20, 0, 2);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 20, 1, 2);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 0, 4, SV(""), 0, 0, 4);
+  test(S("abcde"), 0, 4, SV(""), 0, 1, 4);
+  test(S("abcde"), 0, 4, SV(""), 1, 0, 0);
+  test(S("abcde"), 0, 4, SV("abcde"), 0, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcde"), 0, 1, 3);
+  test(S("abcde"), 0, 4, SV("abcde"), 0, 2, 2);
+  test(S("abcde"), 0, 4, SV("abcde"), 0, 4, 0);
+  test(S("abcde"), 0, 4, SV("abcde"), 0, 5, -1);
+  test(S("abcde"), 0, 4, SV("abcde"), 0, 6, -1);
+  test(S("abcde"), 0, 4, SV("abcde"), 1, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcde"), 1, 1, -1);
+  test(S("abcde"), 0, 4, SV("abcde"), 1, 2, -1);
+  test(S("abcde"), 0, 4, SV("abcde"), 1, 3, -1);
+  test(S("abcde"), 0, 4, SV("abcde"), 1, 4, -1);
+  test(S("abcde"), 0, 4, SV("abcde"), 1, 5, -1);
+  test(S("abcde"), 0, 4, SV("abcde"), 2, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcde"), 2, 1, -2);
+  test(S("abcde"), 0, 4, SV("abcde"), 2, 2, -2);
+  test(S("abcde"), 0, 4, SV("abcde"), 2, 3, -2);
+  test(S("abcde"), 0, 4, SV("abcde"), 2, 4, -2);
+  test(S("abcde"), 0, 4, SV("abcde"), 4, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcde"), 4, 1, -4);
+  test(S("abcde"), 0, 4, SV("abcde"), 4, 2, -4);
+  test(S("abcde"), 0, 4, SV("abcde"), 5, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcde"), 5, 1, 4);
+  test(S("abcde"), 0, 4, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 1, 3);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 5, -1);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 9, -5);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 10, -6);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 0, 11, -6);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 9, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 10, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 10, 1, 4);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 1, 3);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 10, -6);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 19, -15);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 20, -16);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 0, 21, -16);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test5()
-{
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 19, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 20, 0, 4);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 20, 1, 4);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 0, 5, SV(""), 0, 0, 5);
-    test(S("abcde"), 0, 5, SV(""), 0, 1, 5);
-    test(S("abcde"), 0, 5, SV(""), 1, 0, 0);
-    test(S("abcde"), 0, 5, SV("abcde"), 0, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcde"), 0, 1, 4);
-    test(S("abcde"), 0, 5, SV("abcde"), 0, 2, 3);
-    test(S("abcde"), 0, 5, SV("abcde"), 0, 4, 1);
-    test(S("abcde"), 0, 5, SV("abcde"), 0, 5, 0);
-    test(S("abcde"), 0, 5, SV("abcde"), 0, 6, 0);
-    test(S("abcde"), 0, 5, SV("abcde"), 1, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcde"), 1, 1, -1);
-    test(S("abcde"), 0, 5, SV("abcde"), 1, 2, -1);
-    test(S("abcde"), 0, 5, SV("abcde"), 1, 3, -1);
-    test(S("abcde"), 0, 5, SV("abcde"), 1, 4, -1);
-    test(S("abcde"), 0, 5, SV("abcde"), 1, 5, -1);
-    test(S("abcde"), 0, 5, SV("abcde"), 2, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcde"), 2, 1, -2);
-    test(S("abcde"), 0, 5, SV("abcde"), 2, 2, -2);
-    test(S("abcde"), 0, 5, SV("abcde"), 2, 3, -2);
-    test(S("abcde"), 0, 5, SV("abcde"), 2, 4, -2);
-    test(S("abcde"), 0, 5, SV("abcde"), 4, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcde"), 4, 1, -4);
-    test(S("abcde"), 0, 5, SV("abcde"), 4, 2, -4);
-    test(S("abcde"), 0, 5, SV("abcde"), 5, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcde"), 5, 1, 5);
-    test(S("abcde"), 0, 5, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 1, 4);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 5, 0);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 9, -4);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 10, -5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 11, -5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 9, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 10, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 10, 1, 5);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 1, 4);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 10, -5);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 19, -14);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 20, -15);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 21, -15);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 20, 0, 5);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 20, 1, 5);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 0, 6, SV(""), 0, 0, 5);
-    test(S("abcde"), 0, 6, SV(""), 0, 1, 5);
-    test(S("abcde"), 0, 6, SV(""), 1, 0, 0);
-    test(S("abcde"), 0, 6, SV("abcde"), 0, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcde"), 0, 1, 4);
-    test(S("abcde"), 0, 6, SV("abcde"), 0, 2, 3);
-    test(S("abcde"), 0, 6, SV("abcde"), 0, 4, 1);
-    test(S("abcde"), 0, 6, SV("abcde"), 0, 5, 0);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test5() {
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 19, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 20, 0, 4);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 20, 1, 4);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 0, 5, SV(""), 0, 0, 5);
+  test(S("abcde"), 0, 5, SV(""), 0, 1, 5);
+  test(S("abcde"), 0, 5, SV(""), 1, 0, 0);
+  test(S("abcde"), 0, 5, SV("abcde"), 0, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcde"), 0, 1, 4);
+  test(S("abcde"), 0, 5, SV("abcde"), 0, 2, 3);
+  test(S("abcde"), 0, 5, SV("abcde"), 0, 4, 1);
+  test(S("abcde"), 0, 5, SV("abcde"), 0, 5, 0);
+  test(S("abcde"), 0, 5, SV("abcde"), 0, 6, 0);
+  test(S("abcde"), 0, 5, SV("abcde"), 1, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcde"), 1, 1, -1);
+  test(S("abcde"), 0, 5, SV("abcde"), 1, 2, -1);
+  test(S("abcde"), 0, 5, SV("abcde"), 1, 3, -1);
+  test(S("abcde"), 0, 5, SV("abcde"), 1, 4, -1);
+  test(S("abcde"), 0, 5, SV("abcde"), 1, 5, -1);
+  test(S("abcde"), 0, 5, SV("abcde"), 2, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcde"), 2, 1, -2);
+  test(S("abcde"), 0, 5, SV("abcde"), 2, 2, -2);
+  test(S("abcde"), 0, 5, SV("abcde"), 2, 3, -2);
+  test(S("abcde"), 0, 5, SV("abcde"), 2, 4, -2);
+  test(S("abcde"), 0, 5, SV("abcde"), 4, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcde"), 4, 1, -4);
+  test(S("abcde"), 0, 5, SV("abcde"), 4, 2, -4);
+  test(S("abcde"), 0, 5, SV("abcde"), 5, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcde"), 5, 1, 5);
+  test(S("abcde"), 0, 5, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 1, 4);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 5, 0);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 9, -4);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 10, -5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 0, 11, -5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 9, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 10, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 10, 1, 5);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 1, 4);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 10, -5);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 19, -14);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 20, -15);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 21, -15);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 20, 0, 5);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 20, 1, 5);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 0, 6, SV(""), 0, 0, 5);
+  test(S("abcde"), 0, 6, SV(""), 0, 1, 5);
+  test(S("abcde"), 0, 6, SV(""), 1, 0, 0);
+  test(S("abcde"), 0, 6, SV("abcde"), 0, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcde"), 0, 1, 4);
+  test(S("abcde"), 0, 6, SV("abcde"), 0, 2, 3);
+  test(S("abcde"), 0, 6, SV("abcde"), 0, 4, 1);
+  test(S("abcde"), 0, 6, SV("abcde"), 0, 5, 0);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test6()
-{
-    test(S("abcde"), 0, 6, SV("abcde"), 0, 6, 0);
-    test(S("abcde"), 0, 6, SV("abcde"), 1, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcde"), 1, 1, -1);
-    test(S("abcde"), 0, 6, SV("abcde"), 1, 2, -1);
-    test(S("abcde"), 0, 6, SV("abcde"), 1, 3, -1);
-    test(S("abcde"), 0, 6, SV("abcde"), 1, 4, -1);
-    test(S("abcde"), 0, 6, SV("abcde"), 1, 5, -1);
-    test(S("abcde"), 0, 6, SV("abcde"), 2, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcde"), 2, 1, -2);
-    test(S("abcde"), 0, 6, SV("abcde"), 2, 2, -2);
-    test(S("abcde"), 0, 6, SV("abcde"), 2, 3, -2);
-    test(S("abcde"), 0, 6, SV("abcde"), 2, 4, -2);
-    test(S("abcde"), 0, 6, SV("abcde"), 4, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcde"), 4, 1, -4);
-    test(S("abcde"), 0, 6, SV("abcde"), 4, 2, -4);
-    test(S("abcde"), 0, 6, SV("abcde"), 5, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcde"), 5, 1, 5);
-    test(S("abcde"), 0, 6, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 1, 4);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 5, 0);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 9, -4);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 10, -5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 11, -5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 9, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 10, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 10, 1, 5);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 1, 4);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 10, -5);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 19, -14);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 20, -15);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 21, -15);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 19, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 20, 0, 5);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 20, 1, 5);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 1, 0, SV(""), 0, 0, 0);
-    test(S("abcde"), 1, 0, SV(""), 0, 1, 0);
-    test(S("abcde"), 1, 0, SV(""), 1, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcde"), 1, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcde"), 1, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcde"), 1, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcde"), 1, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcde"), 1, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcde"), 1, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcde"), 1, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcde"), 1, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcde"), 1, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcde"), 1, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcde"), 1, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcde"), 1, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcde"), 1, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcde"), 1, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcde"), 1, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcde"), 1, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcde"), 1, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 1, -1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test6() {
+  test(S("abcde"), 0, 6, SV("abcde"), 0, 6, 0);
+  test(S("abcde"), 0, 6, SV("abcde"), 1, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcde"), 1, 1, -1);
+  test(S("abcde"), 0, 6, SV("abcde"), 1, 2, -1);
+  test(S("abcde"), 0, 6, SV("abcde"), 1, 3, -1);
+  test(S("abcde"), 0, 6, SV("abcde"), 1, 4, -1);
+  test(S("abcde"), 0, 6, SV("abcde"), 1, 5, -1);
+  test(S("abcde"), 0, 6, SV("abcde"), 2, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcde"), 2, 1, -2);
+  test(S("abcde"), 0, 6, SV("abcde"), 2, 2, -2);
+  test(S("abcde"), 0, 6, SV("abcde"), 2, 3, -2);
+  test(S("abcde"), 0, 6, SV("abcde"), 2, 4, -2);
+  test(S("abcde"), 0, 6, SV("abcde"), 4, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcde"), 4, 1, -4);
+  test(S("abcde"), 0, 6, SV("abcde"), 4, 2, -4);
+  test(S("abcde"), 0, 6, SV("abcde"), 5, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcde"), 5, 1, 5);
+  test(S("abcde"), 0, 6, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 1, 4);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 5, 0);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 9, -4);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 10, -5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 0, 11, -5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 9, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 10, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 10, 1, 5);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 1, 4);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 10, -5);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 19, -14);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 20, -15);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 0, 21, -15);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 19, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 20, 0, 5);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 20, 1, 5);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 1, 0, SV(""), 0, 0, 0);
+  test(S("abcde"), 1, 0, SV(""), 0, 1, 0);
+  test(S("abcde"), 1, 0, SV(""), 1, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcde"), 1, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcde"), 1, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcde"), 1, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcde"), 1, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcde"), 1, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcde"), 1, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcde"), 1, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcde"), 1, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcde"), 1, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcde"), 1, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcde"), 1, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcde"), 1, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcde"), 1, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcde"), 1, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcde"), 1, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcde"), 1, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcde"), 1, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 1, -1);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test7()
-{
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 1, 1, SV(""), 0, 0, 1);
-    test(S("abcde"), 1, 1, SV(""), 0, 1, 1);
-    test(S("abcde"), 1, 1, SV(""), 1, 0, 0);
-    test(S("abcde"), 1, 1, SV("abcde"), 0, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcde"), 0, 1, 1);
-    test(S("abcde"), 1, 1, SV("abcde"), 0, 2, 1);
-    test(S("abcde"), 1, 1, SV("abcde"), 0, 4, 1);
-    test(S("abcde"), 1, 1, SV("abcde"), 0, 5, 1);
-    test(S("abcde"), 1, 1, SV("abcde"), 0, 6, 1);
-    test(S("abcde"), 1, 1, SV("abcde"), 1, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcde"), 1, 1, 0);
-    test(S("abcde"), 1, 1, SV("abcde"), 1, 2, -1);
-    test(S("abcde"), 1, 1, SV("abcde"), 1, 3, -2);
-    test(S("abcde"), 1, 1, SV("abcde"), 1, 4, -3);
-    test(S("abcde"), 1, 1, SV("abcde"), 1, 5, -3);
-    test(S("abcde"), 1, 1, SV("abcde"), 2, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcde"), 2, 1, -1);
-    test(S("abcde"), 1, 1, SV("abcde"), 2, 2, -1);
-    test(S("abcde"), 1, 1, SV("abcde"), 2, 3, -1);
-    test(S("abcde"), 1, 1, SV("abcde"), 2, 4, -1);
-    test(S("abcde"), 1, 1, SV("abcde"), 4, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcde"), 4, 1, -3);
-    test(S("abcde"), 1, 1, SV("abcde"), 4, 2, -3);
-    test(S("abcde"), 1, 1, SV("abcde"), 5, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcde"), 5, 1, 1);
-    test(S("abcde"), 1, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 1, 0);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 4, -3);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 8, -7);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 9, -8);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 10, -8);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 1, 0);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 9, -8);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 18, -17);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test7() {
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 1, 1, SV(""), 0, 0, 1);
+  test(S("abcde"), 1, 1, SV(""), 0, 1, 1);
+  test(S("abcde"), 1, 1, SV(""), 1, 0, 0);
+  test(S("abcde"), 1, 1, SV("abcde"), 0, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcde"), 0, 1, 1);
+  test(S("abcde"), 1, 1, SV("abcde"), 0, 2, 1);
+  test(S("abcde"), 1, 1, SV("abcde"), 0, 4, 1);
+  test(S("abcde"), 1, 1, SV("abcde"), 0, 5, 1);
+  test(S("abcde"), 1, 1, SV("abcde"), 0, 6, 1);
+  test(S("abcde"), 1, 1, SV("abcde"), 1, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcde"), 1, 1, 0);
+  test(S("abcde"), 1, 1, SV("abcde"), 1, 2, -1);
+  test(S("abcde"), 1, 1, SV("abcde"), 1, 3, -2);
+  test(S("abcde"), 1, 1, SV("abcde"), 1, 4, -3);
+  test(S("abcde"), 1, 1, SV("abcde"), 1, 5, -3);
+  test(S("abcde"), 1, 1, SV("abcde"), 2, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcde"), 2, 1, -1);
+  test(S("abcde"), 1, 1, SV("abcde"), 2, 2, -1);
+  test(S("abcde"), 1, 1, SV("abcde"), 2, 3, -1);
+  test(S("abcde"), 1, 1, SV("abcde"), 2, 4, -1);
+  test(S("abcde"), 1, 1, SV("abcde"), 4, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcde"), 4, 1, -3);
+  test(S("abcde"), 1, 1, SV("abcde"), 4, 2, -3);
+  test(S("abcde"), 1, 1, SV("abcde"), 5, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcde"), 5, 1, 1);
+  test(S("abcde"), 1, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 1, 0);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 4, -3);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 8, -7);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 9, -8);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 1, 10, -8);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 1, 0);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 9, -8);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 18, -17);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test8()
-{
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 19, -18);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 20, -18);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 1, 2, SV(""), 0, 0, 2);
-    test(S("abcde"), 1, 2, SV(""), 0, 1, 2);
-    test(S("abcde"), 1, 2, SV(""), 1, 0, 0);
-    test(S("abcde"), 1, 2, SV("abcde"), 0, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcde"), 0, 1, 1);
-    test(S("abcde"), 1, 2, SV("abcde"), 0, 2, 1);
-    test(S("abcde"), 1, 2, SV("abcde"), 0, 4, 1);
-    test(S("abcde"), 1, 2, SV("abcde"), 0, 5, 1);
-    test(S("abcde"), 1, 2, SV("abcde"), 0, 6, 1);
-    test(S("abcde"), 1, 2, SV("abcde"), 1, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcde"), 1, 1, 1);
-    test(S("abcde"), 1, 2, SV("abcde"), 1, 2, 0);
-    test(S("abcde"), 1, 2, SV("abcde"), 1, 3, -1);
-    test(S("abcde"), 1, 2, SV("abcde"), 1, 4, -2);
-    test(S("abcde"), 1, 2, SV("abcde"), 1, 5, -2);
-    test(S("abcde"), 1, 2, SV("abcde"), 2, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcde"), 2, 1, -1);
-    test(S("abcde"), 1, 2, SV("abcde"), 2, 2, -1);
-    test(S("abcde"), 1, 2, SV("abcde"), 2, 3, -1);
-    test(S("abcde"), 1, 2, SV("abcde"), 2, 4, -1);
-    test(S("abcde"), 1, 2, SV("abcde"), 4, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcde"), 4, 1, -3);
-    test(S("abcde"), 1, 2, SV("abcde"), 4, 2, -3);
-    test(S("abcde"), 1, 2, SV("abcde"), 5, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcde"), 5, 1, 2);
-    test(S("abcde"), 1, 2, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 1, 1);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 4, -2);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 8, -6);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 9, -7);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 10, -7);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 9, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 10, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 10, 1, 2);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 1, 1);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 9, -7);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 18, -16);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 19, -17);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 20, -17);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 19, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 20, 0, 2);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 20, 1, 2);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 1, 3, SV(""), 0, 0, 3);
-    test(S("abcde"), 1, 3, SV(""), 0, 1, 3);
-    test(S("abcde"), 1, 3, SV(""), 1, 0, 0);
-    test(S("abcde"), 1, 3, SV("abcde"), 0, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcde"), 0, 1, 1);
-    test(S("abcde"), 1, 3, SV("abcde"), 0, 2, 1);
-    test(S("abcde"), 1, 3, SV("abcde"), 0, 4, 1);
-    test(S("abcde"), 1, 3, SV("abcde"), 0, 5, 1);
-    test(S("abcde"), 1, 3, SV("abcde"), 0, 6, 1);
-    test(S("abcde"), 1, 3, SV("abcde"), 1, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcde"), 1, 1, 2);
-    test(S("abcde"), 1, 3, SV("abcde"), 1, 2, 1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test8() {
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 19, -18);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 20, -18);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 1, 2, SV(""), 0, 0, 2);
+  test(S("abcde"), 1, 2, SV(""), 0, 1, 2);
+  test(S("abcde"), 1, 2, SV(""), 1, 0, 0);
+  test(S("abcde"), 1, 2, SV("abcde"), 0, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcde"), 0, 1, 1);
+  test(S("abcde"), 1, 2, SV("abcde"), 0, 2, 1);
+  test(S("abcde"), 1, 2, SV("abcde"), 0, 4, 1);
+  test(S("abcde"), 1, 2, SV("abcde"), 0, 5, 1);
+  test(S("abcde"), 1, 2, SV("abcde"), 0, 6, 1);
+  test(S("abcde"), 1, 2, SV("abcde"), 1, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcde"), 1, 1, 1);
+  test(S("abcde"), 1, 2, SV("abcde"), 1, 2, 0);
+  test(S("abcde"), 1, 2, SV("abcde"), 1, 3, -1);
+  test(S("abcde"), 1, 2, SV("abcde"), 1, 4, -2);
+  test(S("abcde"), 1, 2, SV("abcde"), 1, 5, -2);
+  test(S("abcde"), 1, 2, SV("abcde"), 2, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcde"), 2, 1, -1);
+  test(S("abcde"), 1, 2, SV("abcde"), 2, 2, -1);
+  test(S("abcde"), 1, 2, SV("abcde"), 2, 3, -1);
+  test(S("abcde"), 1, 2, SV("abcde"), 2, 4, -1);
+  test(S("abcde"), 1, 2, SV("abcde"), 4, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcde"), 4, 1, -3);
+  test(S("abcde"), 1, 2, SV("abcde"), 4, 2, -3);
+  test(S("abcde"), 1, 2, SV("abcde"), 5, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcde"), 5, 1, 2);
+  test(S("abcde"), 1, 2, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 1, 1);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 4, -2);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 8, -6);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 9, -7);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 1, 10, -7);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 9, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 10, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 10, 1, 2);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 1, 1);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 9, -7);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 18, -16);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 19, -17);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1, 20, -17);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 19, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 20, 0, 2);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 20, 1, 2);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 1, 3, SV(""), 0, 0, 3);
+  test(S("abcde"), 1, 3, SV(""), 0, 1, 3);
+  test(S("abcde"), 1, 3, SV(""), 1, 0, 0);
+  test(S("abcde"), 1, 3, SV("abcde"), 0, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcde"), 0, 1, 1);
+  test(S("abcde"), 1, 3, SV("abcde"), 0, 2, 1);
+  test(S("abcde"), 1, 3, SV("abcde"), 0, 4, 1);
+  test(S("abcde"), 1, 3, SV("abcde"), 0, 5, 1);
+  test(S("abcde"), 1, 3, SV("abcde"), 0, 6, 1);
+  test(S("abcde"), 1, 3, SV("abcde"), 1, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcde"), 1, 1, 2);
+  test(S("abcde"), 1, 3, SV("abcde"), 1, 2, 1);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test9()
-{
-    test(S("abcde"), 1, 3, SV("abcde"), 1, 3, 0);
-    test(S("abcde"), 1, 3, SV("abcde"), 1, 4, -1);
-    test(S("abcde"), 1, 3, SV("abcde"), 1, 5, -1);
-    test(S("abcde"), 1, 3, SV("abcde"), 2, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcde"), 2, 1, -1);
-    test(S("abcde"), 1, 3, SV("abcde"), 2, 2, -1);
-    test(S("abcde"), 1, 3, SV("abcde"), 2, 3, -1);
-    test(S("abcde"), 1, 3, SV("abcde"), 2, 4, -1);
-    test(S("abcde"), 1, 3, SV("abcde"), 4, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcde"), 4, 1, -3);
-    test(S("abcde"), 1, 3, SV("abcde"), 4, 2, -3);
-    test(S("abcde"), 1, 3, SV("abcde"), 5, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcde"), 5, 1, 3);
-    test(S("abcde"), 1, 3, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 1, 2);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 8, -5);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 9, -6);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 10, -6);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 9, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 10, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 10, 1, 3);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 1, 2);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 9, -6);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 18, -15);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 19, -16);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 20, -16);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 19, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 20, 0, 3);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 20, 1, 3);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 1, 4, SV(""), 0, 0, 4);
-    test(S("abcde"), 1, 4, SV(""), 0, 1, 4);
-    test(S("abcde"), 1, 4, SV(""), 1, 0, 0);
-    test(S("abcde"), 1, 4, SV("abcde"), 0, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcde"), 0, 1, 1);
-    test(S("abcde"), 1, 4, SV("abcde"), 0, 2, 1);
-    test(S("abcde"), 1, 4, SV("abcde"), 0, 4, 1);
-    test(S("abcde"), 1, 4, SV("abcde"), 0, 5, 1);
-    test(S("abcde"), 1, 4, SV("abcde"), 0, 6, 1);
-    test(S("abcde"), 1, 4, SV("abcde"), 1, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcde"), 1, 1, 3);
-    test(S("abcde"), 1, 4, SV("abcde"), 1, 2, 2);
-    test(S("abcde"), 1, 4, SV("abcde"), 1, 3, 1);
-    test(S("abcde"), 1, 4, SV("abcde"), 1, 4, 0);
-    test(S("abcde"), 1, 4, SV("abcde"), 1, 5, 0);
-    test(S("abcde"), 1, 4, SV("abcde"), 2, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcde"), 2, 1, -1);
-    test(S("abcde"), 1, 4, SV("abcde"), 2, 2, -1);
-    test(S("abcde"), 1, 4, SV("abcde"), 2, 3, -1);
-    test(S("abcde"), 1, 4, SV("abcde"), 2, 4, -1);
-    test(S("abcde"), 1, 4, SV("abcde"), 4, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcde"), 4, 1, -3);
-    test(S("abcde"), 1, 4, SV("abcde"), 4, 2, -3);
-    test(S("abcde"), 1, 4, SV("abcde"), 5, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcde"), 5, 1, 4);
-    test(S("abcde"), 1, 4, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 1, 3);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 4, 0);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 8, -4);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 9, -5);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 10, -5);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test9() {
+  test(S("abcde"), 1, 3, SV("abcde"), 1, 3, 0);
+  test(S("abcde"), 1, 3, SV("abcde"), 1, 4, -1);
+  test(S("abcde"), 1, 3, SV("abcde"), 1, 5, -1);
+  test(S("abcde"), 1, 3, SV("abcde"), 2, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcde"), 2, 1, -1);
+  test(S("abcde"), 1, 3, SV("abcde"), 2, 2, -1);
+  test(S("abcde"), 1, 3, SV("abcde"), 2, 3, -1);
+  test(S("abcde"), 1, 3, SV("abcde"), 2, 4, -1);
+  test(S("abcde"), 1, 3, SV("abcde"), 4, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcde"), 4, 1, -3);
+  test(S("abcde"), 1, 3, SV("abcde"), 4, 2, -3);
+  test(S("abcde"), 1, 3, SV("abcde"), 5, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcde"), 5, 1, 3);
+  test(S("abcde"), 1, 3, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 1, 2);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 8, -5);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 9, -6);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 1, 10, -6);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 9, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 10, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 10, 1, 3);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 1, 2);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 9, -6);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 18, -15);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 19, -16);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1, 20, -16);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 19, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 20, 0, 3);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 20, 1, 3);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 1, 4, SV(""), 0, 0, 4);
+  test(S("abcde"), 1, 4, SV(""), 0, 1, 4);
+  test(S("abcde"), 1, 4, SV(""), 1, 0, 0);
+  test(S("abcde"), 1, 4, SV("abcde"), 0, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcde"), 0, 1, 1);
+  test(S("abcde"), 1, 4, SV("abcde"), 0, 2, 1);
+  test(S("abcde"), 1, 4, SV("abcde"), 0, 4, 1);
+  test(S("abcde"), 1, 4, SV("abcde"), 0, 5, 1);
+  test(S("abcde"), 1, 4, SV("abcde"), 0, 6, 1);
+  test(S("abcde"), 1, 4, SV("abcde"), 1, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcde"), 1, 1, 3);
+  test(S("abcde"), 1, 4, SV("abcde"), 1, 2, 2);
+  test(S("abcde"), 1, 4, SV("abcde"), 1, 3, 1);
+  test(S("abcde"), 1, 4, SV("abcde"), 1, 4, 0);
+  test(S("abcde"), 1, 4, SV("abcde"), 1, 5, 0);
+  test(S("abcde"), 1, 4, SV("abcde"), 2, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcde"), 2, 1, -1);
+  test(S("abcde"), 1, 4, SV("abcde"), 2, 2, -1);
+  test(S("abcde"), 1, 4, SV("abcde"), 2, 3, -1);
+  test(S("abcde"), 1, 4, SV("abcde"), 2, 4, -1);
+  test(S("abcde"), 1, 4, SV("abcde"), 4, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcde"), 4, 1, -3);
+  test(S("abcde"), 1, 4, SV("abcde"), 4, 2, -3);
+  test(S("abcde"), 1, 4, SV("abcde"), 5, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcde"), 5, 1, 4);
+  test(S("abcde"), 1, 4, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 1, 3);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 4, 0);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 8, -4);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 9, -5);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 1, 10, -5);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test10()
-{
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 9, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 10, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 10, 1, 4);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 1, 3);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 9, -5);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 18, -14);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 19, -15);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 20, -15);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 20, 0, 4);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 20, 1, 4);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 1, 5, SV(""), 0, 0, 4);
-    test(S("abcde"), 1, 5, SV(""), 0, 1, 4);
-    test(S("abcde"), 1, 5, SV(""), 1, 0, 0);
-    test(S("abcde"), 1, 5, SV("abcde"), 0, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcde"), 0, 1, 1);
-    test(S("abcde"), 1, 5, SV("abcde"), 0, 2, 1);
-    test(S("abcde"), 1, 5, SV("abcde"), 0, 4, 1);
-    test(S("abcde"), 1, 5, SV("abcde"), 0, 5, 1);
-    test(S("abcde"), 1, 5, SV("abcde"), 0, 6, 1);
-    test(S("abcde"), 1, 5, SV("abcde"), 1, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcde"), 1, 1, 3);
-    test(S("abcde"), 1, 5, SV("abcde"), 1, 2, 2);
-    test(S("abcde"), 1, 5, SV("abcde"), 1, 3, 1);
-    test(S("abcde"), 1, 5, SV("abcde"), 1, 4, 0);
-    test(S("abcde"), 1, 5, SV("abcde"), 1, 5, 0);
-    test(S("abcde"), 1, 5, SV("abcde"), 2, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcde"), 2, 1, -1);
-    test(S("abcde"), 1, 5, SV("abcde"), 2, 2, -1);
-    test(S("abcde"), 1, 5, SV("abcde"), 2, 3, -1);
-    test(S("abcde"), 1, 5, SV("abcde"), 2, 4, -1);
-    test(S("abcde"), 1, 5, SV("abcde"), 4, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcde"), 4, 1, -3);
-    test(S("abcde"), 1, 5, SV("abcde"), 4, 2, -3);
-    test(S("abcde"), 1, 5, SV("abcde"), 5, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcde"), 5, 1, 4);
-    test(S("abcde"), 1, 5, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 1, 3);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 4, 0);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 8, -4);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 9, -5);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 10, -5);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 9, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 10, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 10, 1, 4);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 1, 3);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 9, -5);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 18, -14);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 19, -15);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 20, -15);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test10() {
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 9, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 10, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 10, 1, 4);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 1, 3);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 9, -5);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 18, -14);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 19, -15);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 20, -15);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 20, 0, 4);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 20, 1, 4);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 1, 5, SV(""), 0, 0, 4);
+  test(S("abcde"), 1, 5, SV(""), 0, 1, 4);
+  test(S("abcde"), 1, 5, SV(""), 1, 0, 0);
+  test(S("abcde"), 1, 5, SV("abcde"), 0, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcde"), 0, 1, 1);
+  test(S("abcde"), 1, 5, SV("abcde"), 0, 2, 1);
+  test(S("abcde"), 1, 5, SV("abcde"), 0, 4, 1);
+  test(S("abcde"), 1, 5, SV("abcde"), 0, 5, 1);
+  test(S("abcde"), 1, 5, SV("abcde"), 0, 6, 1);
+  test(S("abcde"), 1, 5, SV("abcde"), 1, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcde"), 1, 1, 3);
+  test(S("abcde"), 1, 5, SV("abcde"), 1, 2, 2);
+  test(S("abcde"), 1, 5, SV("abcde"), 1, 3, 1);
+  test(S("abcde"), 1, 5, SV("abcde"), 1, 4, 0);
+  test(S("abcde"), 1, 5, SV("abcde"), 1, 5, 0);
+  test(S("abcde"), 1, 5, SV("abcde"), 2, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcde"), 2, 1, -1);
+  test(S("abcde"), 1, 5, SV("abcde"), 2, 2, -1);
+  test(S("abcde"), 1, 5, SV("abcde"), 2, 3, -1);
+  test(S("abcde"), 1, 5, SV("abcde"), 2, 4, -1);
+  test(S("abcde"), 1, 5, SV("abcde"), 4, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcde"), 4, 1, -3);
+  test(S("abcde"), 1, 5, SV("abcde"), 4, 2, -3);
+  test(S("abcde"), 1, 5, SV("abcde"), 5, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcde"), 5, 1, 4);
+  test(S("abcde"), 1, 5, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 1, 3);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 4, 0);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 8, -4);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 9, -5);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 1, 10, -5);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 9, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 10, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 10, 1, 4);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 1, 3);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 9, -5);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 18, -14);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 19, -15);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1, 20, -15);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test11()
-{
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 19, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 20, 0, 4);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 20, 1, 4);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 2, 0, SV(""), 0, 0, 0);
-    test(S("abcde"), 2, 0, SV(""), 0, 1, 0);
-    test(S("abcde"), 2, 0, SV(""), 1, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcde"), 2, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcde"), 2, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcde"), 2, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcde"), 2, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcde"), 2, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcde"), 2, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcde"), 2, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcde"), 2, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcde"), 2, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcde"), 2, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcde"), 2, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcde"), 2, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcde"), 2, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcde"), 2, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcde"), 2, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcde"), 2, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcde"), 2, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 2, 1, SV(""), 0, 0, 1);
-    test(S("abcde"), 2, 1, SV(""), 0, 1, 1);
-    test(S("abcde"), 2, 1, SV(""), 1, 0, 0);
-    test(S("abcde"), 2, 1, SV("abcde"), 0, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcde"), 0, 1, 2);
-    test(S("abcde"), 2, 1, SV("abcde"), 0, 2, 2);
-    test(S("abcde"), 2, 1, SV("abcde"), 0, 4, 2);
-    test(S("abcde"), 2, 1, SV("abcde"), 0, 5, 2);
-    test(S("abcde"), 2, 1, SV("abcde"), 0, 6, 2);
-    test(S("abcde"), 2, 1, SV("abcde"), 1, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcde"), 1, 1, 1);
-    test(S("abcde"), 2, 1, SV("abcde"), 1, 2, 1);
-    test(S("abcde"), 2, 1, SV("abcde"), 1, 3, 1);
-    test(S("abcde"), 2, 1, SV("abcde"), 1, 4, 1);
-    test(S("abcde"), 2, 1, SV("abcde"), 1, 5, 1);
-    test(S("abcde"), 2, 1, SV("abcde"), 2, 0, 1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test11() {
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 19, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 20, 0, 4);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 20, 1, 4);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 2, 0, SV(""), 0, 0, 0);
+  test(S("abcde"), 2, 0, SV(""), 0, 1, 0);
+  test(S("abcde"), 2, 0, SV(""), 1, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcde"), 2, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcde"), 2, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcde"), 2, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcde"), 2, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcde"), 2, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcde"), 2, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcde"), 2, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcde"), 2, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcde"), 2, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcde"), 2, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcde"), 2, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcde"), 2, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcde"), 2, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcde"), 2, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcde"), 2, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcde"), 2, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcde"), 2, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 2, 1, SV(""), 0, 0, 1);
+  test(S("abcde"), 2, 1, SV(""), 0, 1, 1);
+  test(S("abcde"), 2, 1, SV(""), 1, 0, 0);
+  test(S("abcde"), 2, 1, SV("abcde"), 0, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcde"), 0, 1, 2);
+  test(S("abcde"), 2, 1, SV("abcde"), 0, 2, 2);
+  test(S("abcde"), 2, 1, SV("abcde"), 0, 4, 2);
+  test(S("abcde"), 2, 1, SV("abcde"), 0, 5, 2);
+  test(S("abcde"), 2, 1, SV("abcde"), 0, 6, 2);
+  test(S("abcde"), 2, 1, SV("abcde"), 1, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcde"), 1, 1, 1);
+  test(S("abcde"), 2, 1, SV("abcde"), 1, 2, 1);
+  test(S("abcde"), 2, 1, SV("abcde"), 1, 3, 1);
+  test(S("abcde"), 2, 1, SV("abcde"), 1, 4, 1);
+  test(S("abcde"), 2, 1, SV("abcde"), 1, 5, 1);
+  test(S("abcde"), 2, 1, SV("abcde"), 2, 0, 1);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test12()
-{
-    test(S("abcde"), 2, 1, SV("abcde"), 2, 1, 0);
-    test(S("abcde"), 2, 1, SV("abcde"), 2, 2, -1);
-    test(S("abcde"), 2, 1, SV("abcde"), 2, 3, -2);
-    test(S("abcde"), 2, 1, SV("abcde"), 2, 4, -2);
-    test(S("abcde"), 2, 1, SV("abcde"), 4, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcde"), 4, 1, -2);
-    test(S("abcde"), 2, 1, SV("abcde"), 4, 2, -2);
-    test(S("abcde"), 2, 1, SV("abcde"), 5, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcde"), 5, 1, 1);
-    test(S("abcde"), 2, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 1, 2);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 5, 2);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 9, 2);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 10, 2);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 11, 2);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 1, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 4, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 8, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 9, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 10, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 1, -3);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 2, -3);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 4, -3);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 5, -3);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 6, -3);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 9, 1, -7);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 9, 2, -7);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 1, 2);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 10, 2);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 19, 2);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 20, 2);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 21, 2);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 1, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 9, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 18, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 19, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 20, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 1, -8);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 5, -8);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 9, -8);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 10, -8);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 11, -8);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 19, 1, -17);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 19, 2, -17);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 2, 2, SV(""), 0, 0, 2);
-    test(S("abcde"), 2, 2, SV(""), 0, 1, 2);
-    test(S("abcde"), 2, 2, SV(""), 1, 0, 0);
-    test(S("abcde"), 2, 2, SV("abcde"), 0, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcde"), 0, 1, 2);
-    test(S("abcde"), 2, 2, SV("abcde"), 0, 2, 2);
-    test(S("abcde"), 2, 2, SV("abcde"), 0, 4, 2);
-    test(S("abcde"), 2, 2, SV("abcde"), 0, 5, 2);
-    test(S("abcde"), 2, 2, SV("abcde"), 0, 6, 2);
-    test(S("abcde"), 2, 2, SV("abcde"), 1, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcde"), 1, 1, 1);
-    test(S("abcde"), 2, 2, SV("abcde"), 1, 2, 1);
-    test(S("abcde"), 2, 2, SV("abcde"), 1, 3, 1);
-    test(S("abcde"), 2, 2, SV("abcde"), 1, 4, 1);
-    test(S("abcde"), 2, 2, SV("abcde"), 1, 5, 1);
-    test(S("abcde"), 2, 2, SV("abcde"), 2, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcde"), 2, 1, 1);
-    test(S("abcde"), 2, 2, SV("abcde"), 2, 2, 0);
-    test(S("abcde"), 2, 2, SV("abcde"), 2, 3, -1);
-    test(S("abcde"), 2, 2, SV("abcde"), 2, 4, -1);
-    test(S("abcde"), 2, 2, SV("abcde"), 4, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcde"), 4, 1, -2);
-    test(S("abcde"), 2, 2, SV("abcde"), 4, 2, -2);
-    test(S("abcde"), 2, 2, SV("abcde"), 5, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcde"), 5, 1, 2);
-    test(S("abcde"), 2, 2, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 1, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 5, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 9, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 10, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 11, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 1, 1);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 4, 1);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 8, 1);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 9, 1);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 10, 1);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 1, -3);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 2, -3);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 4, -3);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test12() {
+  test(S("abcde"), 2, 1, SV("abcde"), 2, 1, 0);
+  test(S("abcde"), 2, 1, SV("abcde"), 2, 2, -1);
+  test(S("abcde"), 2, 1, SV("abcde"), 2, 3, -2);
+  test(S("abcde"), 2, 1, SV("abcde"), 2, 4, -2);
+  test(S("abcde"), 2, 1, SV("abcde"), 4, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcde"), 4, 1, -2);
+  test(S("abcde"), 2, 1, SV("abcde"), 4, 2, -2);
+  test(S("abcde"), 2, 1, SV("abcde"), 5, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcde"), 5, 1, 1);
+  test(S("abcde"), 2, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 1, 2);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 5, 2);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 9, 2);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 10, 2);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 0, 11, 2);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 1, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 4, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 8, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 9, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 1, 10, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 1, -3);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 2, -3);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 4, -3);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 5, -3);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 5, 6, -3);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 9, 1, -7);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 9, 2, -7);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 1, 2);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 10, 2);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 19, 2);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 20, 2);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 0, 21, 2);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 1, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 9, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 18, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 19, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 1, 20, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 1, -8);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 5, -8);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 9, -8);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 10, -8);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 10, 11, -8);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 19, 1, -17);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 19, 2, -17);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 2, 2, SV(""), 0, 0, 2);
+  test(S("abcde"), 2, 2, SV(""), 0, 1, 2);
+  test(S("abcde"), 2, 2, SV(""), 1, 0, 0);
+  test(S("abcde"), 2, 2, SV("abcde"), 0, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcde"), 0, 1, 2);
+  test(S("abcde"), 2, 2, SV("abcde"), 0, 2, 2);
+  test(S("abcde"), 2, 2, SV("abcde"), 0, 4, 2);
+  test(S("abcde"), 2, 2, SV("abcde"), 0, 5, 2);
+  test(S("abcde"), 2, 2, SV("abcde"), 0, 6, 2);
+  test(S("abcde"), 2, 2, SV("abcde"), 1, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcde"), 1, 1, 1);
+  test(S("abcde"), 2, 2, SV("abcde"), 1, 2, 1);
+  test(S("abcde"), 2, 2, SV("abcde"), 1, 3, 1);
+  test(S("abcde"), 2, 2, SV("abcde"), 1, 4, 1);
+  test(S("abcde"), 2, 2, SV("abcde"), 1, 5, 1);
+  test(S("abcde"), 2, 2, SV("abcde"), 2, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcde"), 2, 1, 1);
+  test(S("abcde"), 2, 2, SV("abcde"), 2, 2, 0);
+  test(S("abcde"), 2, 2, SV("abcde"), 2, 3, -1);
+  test(S("abcde"), 2, 2, SV("abcde"), 2, 4, -1);
+  test(S("abcde"), 2, 2, SV("abcde"), 4, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcde"), 4, 1, -2);
+  test(S("abcde"), 2, 2, SV("abcde"), 4, 2, -2);
+  test(S("abcde"), 2, 2, SV("abcde"), 5, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcde"), 5, 1, 2);
+  test(S("abcde"), 2, 2, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 1, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 5, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 9, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 10, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 0, 11, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 1, 1);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 4, 1);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 8, 1);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 9, 1);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 1, 10, 1);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 1, -3);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 2, -3);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 4, -3);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test13()
-{
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 5, -3);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 6, -3);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 9, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 9, 1, -7);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 9, 2, -7);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 10, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 10, 1, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 1, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 10, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 19, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 20, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 21, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 1, 1);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 9, 1);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 18, 1);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 19, 1);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 20, 1);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 1, -8);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 5, -8);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 9, -8);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 10, -8);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 11, -8);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 19, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 19, 1, -17);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 19, 2, -17);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 20, 0, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 20, 1, 2);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 2, 3, SV(""), 0, 0, 3);
-    test(S("abcde"), 2, 3, SV(""), 0, 1, 3);
-    test(S("abcde"), 2, 3, SV(""), 1, 0, 0);
-    test(S("abcde"), 2, 3, SV("abcde"), 0, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcde"), 0, 1, 2);
-    test(S("abcde"), 2, 3, SV("abcde"), 0, 2, 2);
-    test(S("abcde"), 2, 3, SV("abcde"), 0, 4, 2);
-    test(S("abcde"), 2, 3, SV("abcde"), 0, 5, 2);
-    test(S("abcde"), 2, 3, SV("abcde"), 0, 6, 2);
-    test(S("abcde"), 2, 3, SV("abcde"), 1, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcde"), 1, 1, 1);
-    test(S("abcde"), 2, 3, SV("abcde"), 1, 2, 1);
-    test(S("abcde"), 2, 3, SV("abcde"), 1, 3, 1);
-    test(S("abcde"), 2, 3, SV("abcde"), 1, 4, 1);
-    test(S("abcde"), 2, 3, SV("abcde"), 1, 5, 1);
-    test(S("abcde"), 2, 3, SV("abcde"), 2, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcde"), 2, 1, 2);
-    test(S("abcde"), 2, 3, SV("abcde"), 2, 2, 1);
-    test(S("abcde"), 2, 3, SV("abcde"), 2, 3, 0);
-    test(S("abcde"), 2, 3, SV("abcde"), 2, 4, 0);
-    test(S("abcde"), 2, 3, SV("abcde"), 4, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcde"), 4, 1, -2);
-    test(S("abcde"), 2, 3, SV("abcde"), 4, 2, -2);
-    test(S("abcde"), 2, 3, SV("abcde"), 5, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcde"), 5, 1, 3);
-    test(S("abcde"), 2, 3, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 1, 2);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 5, 2);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 9, 2);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 10, 2);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 11, 2);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 1, 1);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 4, 1);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 8, 1);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 9, 1);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 10, 1);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 1, -3);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 2, -3);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 4, -3);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 5, -3);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 6, -3);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 9, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 9, 1, -7);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 9, 2, -7);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 10, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 10, 1, 3);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 1, 2);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 10, 2);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 19, 2);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 20, 2);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 21, 2);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 1, 1);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 9, 1);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 18, 1);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 19, 1);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 20, 1);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 1, -8);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 5, -8);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 9, -8);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 10, -8);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 11, -8);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test13() {
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 5, -3);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 5, 6, -3);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 9, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 9, 1, -7);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 9, 2, -7);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 10, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 10, 1, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 1, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 10, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 19, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 20, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 0, 21, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 1, 1);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 9, 1);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 18, 1);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 19, 1);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 1, 20, 1);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 1, -8);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 5, -8);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 9, -8);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 10, -8);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 10, 11, -8);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 19, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 19, 1, -17);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 19, 2, -17);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 20, 0, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 20, 1, 2);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 2, 3, SV(""), 0, 0, 3);
+  test(S("abcde"), 2, 3, SV(""), 0, 1, 3);
+  test(S("abcde"), 2, 3, SV(""), 1, 0, 0);
+  test(S("abcde"), 2, 3, SV("abcde"), 0, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcde"), 0, 1, 2);
+  test(S("abcde"), 2, 3, SV("abcde"), 0, 2, 2);
+  test(S("abcde"), 2, 3, SV("abcde"), 0, 4, 2);
+  test(S("abcde"), 2, 3, SV("abcde"), 0, 5, 2);
+  test(S("abcde"), 2, 3, SV("abcde"), 0, 6, 2);
+  test(S("abcde"), 2, 3, SV("abcde"), 1, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcde"), 1, 1, 1);
+  test(S("abcde"), 2, 3, SV("abcde"), 1, 2, 1);
+  test(S("abcde"), 2, 3, SV("abcde"), 1, 3, 1);
+  test(S("abcde"), 2, 3, SV("abcde"), 1, 4, 1);
+  test(S("abcde"), 2, 3, SV("abcde"), 1, 5, 1);
+  test(S("abcde"), 2, 3, SV("abcde"), 2, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcde"), 2, 1, 2);
+  test(S("abcde"), 2, 3, SV("abcde"), 2, 2, 1);
+  test(S("abcde"), 2, 3, SV("abcde"), 2, 3, 0);
+  test(S("abcde"), 2, 3, SV("abcde"), 2, 4, 0);
+  test(S("abcde"), 2, 3, SV("abcde"), 4, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcde"), 4, 1, -2);
+  test(S("abcde"), 2, 3, SV("abcde"), 4, 2, -2);
+  test(S("abcde"), 2, 3, SV("abcde"), 5, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcde"), 5, 1, 3);
+  test(S("abcde"), 2, 3, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 1, 2);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 5, 2);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 9, 2);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 10, 2);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 0, 11, 2);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 1, 1);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 4, 1);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 8, 1);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 9, 1);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 1, 10, 1);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 1, -3);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 2, -3);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 4, -3);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 5, -3);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 5, 6, -3);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 9, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 9, 1, -7);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 9, 2, -7);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 10, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 10, 1, 3);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 1, 2);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 10, 2);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 19, 2);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 20, 2);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 0, 21, 2);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 1, 1);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 9, 1);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 18, 1);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 19, 1);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 1, 20, 1);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 1, -8);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 5, -8);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 9, -8);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 10, -8);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 10, 11, -8);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test14()
-{
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 19, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 19, 1, -17);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 19, 2, -17);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 20, 0, 3);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 20, 1, 3);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 2, 4, SV(""), 0, 0, 3);
-    test(S("abcde"), 2, 4, SV(""), 0, 1, 3);
-    test(S("abcde"), 2, 4, SV(""), 1, 0, 0);
-    test(S("abcde"), 2, 4, SV("abcde"), 0, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcde"), 0, 1, 2);
-    test(S("abcde"), 2, 4, SV("abcde"), 0, 2, 2);
-    test(S("abcde"), 2, 4, SV("abcde"), 0, 4, 2);
-    test(S("abcde"), 2, 4, SV("abcde"), 0, 5, 2);
-    test(S("abcde"), 2, 4, SV("abcde"), 0, 6, 2);
-    test(S("abcde"), 2, 4, SV("abcde"), 1, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcde"), 1, 1, 1);
-    test(S("abcde"), 2, 4, SV("abcde"), 1, 2, 1);
-    test(S("abcde"), 2, 4, SV("abcde"), 1, 3, 1);
-    test(S("abcde"), 2, 4, SV("abcde"), 1, 4, 1);
-    test(S("abcde"), 2, 4, SV("abcde"), 1, 5, 1);
-    test(S("abcde"), 2, 4, SV("abcde"), 2, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcde"), 2, 1, 2);
-    test(S("abcde"), 2, 4, SV("abcde"), 2, 2, 1);
-    test(S("abcde"), 2, 4, SV("abcde"), 2, 3, 0);
-    test(S("abcde"), 2, 4, SV("abcde"), 2, 4, 0);
-    test(S("abcde"), 2, 4, SV("abcde"), 4, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcde"), 4, 1, -2);
-    test(S("abcde"), 2, 4, SV("abcde"), 4, 2, -2);
-    test(S("abcde"), 2, 4, SV("abcde"), 5, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcde"), 5, 1, 3);
-    test(S("abcde"), 2, 4, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 1, 2);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 5, 2);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 9, 2);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 10, 2);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 11, 2);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 1, 1);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 4, 1);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 8, 1);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 9, 1);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 10, 1);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 1, -3);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 2, -3);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 4, -3);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 5, -3);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 6, -3);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 9, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 9, 1, -7);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 9, 2, -7);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 10, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 10, 1, 3);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 1, 2);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 10, 2);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 19, 2);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 20, 2);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 21, 2);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 1, 1);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 9, 1);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 18, 1);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 19, 1);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 20, 1);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 1, -8);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 5, -8);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 9, -8);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 10, -8);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 11, -8);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 19, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 19, 1, -17);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 19, 2, -17);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 20, 0, 3);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 20, 1, 3);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 4, 0, SV(""), 0, 0, 0);
-    test(S("abcde"), 4, 0, SV(""), 0, 1, 0);
-    test(S("abcde"), 4, 0, SV(""), 1, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcde"), 4, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcde"), 4, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcde"), 4, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcde"), 4, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcde"), 4, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcde"), 4, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcde"), 4, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcde"), 4, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcde"), 4, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcde"), 4, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcde"), 4, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcde"), 4, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcde"), 4, 0, SV("abcde"), 2, 4, -3);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test14() {
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 19, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 19, 1, -17);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 19, 2, -17);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 20, 0, 3);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 20, 1, 3);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 2, 4, SV(""), 0, 0, 3);
+  test(S("abcde"), 2, 4, SV(""), 0, 1, 3);
+  test(S("abcde"), 2, 4, SV(""), 1, 0, 0);
+  test(S("abcde"), 2, 4, SV("abcde"), 0, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcde"), 0, 1, 2);
+  test(S("abcde"), 2, 4, SV("abcde"), 0, 2, 2);
+  test(S("abcde"), 2, 4, SV("abcde"), 0, 4, 2);
+  test(S("abcde"), 2, 4, SV("abcde"), 0, 5, 2);
+  test(S("abcde"), 2, 4, SV("abcde"), 0, 6, 2);
+  test(S("abcde"), 2, 4, SV("abcde"), 1, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcde"), 1, 1, 1);
+  test(S("abcde"), 2, 4, SV("abcde"), 1, 2, 1);
+  test(S("abcde"), 2, 4, SV("abcde"), 1, 3, 1);
+  test(S("abcde"), 2, 4, SV("abcde"), 1, 4, 1);
+  test(S("abcde"), 2, 4, SV("abcde"), 1, 5, 1);
+  test(S("abcde"), 2, 4, SV("abcde"), 2, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcde"), 2, 1, 2);
+  test(S("abcde"), 2, 4, SV("abcde"), 2, 2, 1);
+  test(S("abcde"), 2, 4, SV("abcde"), 2, 3, 0);
+  test(S("abcde"), 2, 4, SV("abcde"), 2, 4, 0);
+  test(S("abcde"), 2, 4, SV("abcde"), 4, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcde"), 4, 1, -2);
+  test(S("abcde"), 2, 4, SV("abcde"), 4, 2, -2);
+  test(S("abcde"), 2, 4, SV("abcde"), 5, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcde"), 5, 1, 3);
+  test(S("abcde"), 2, 4, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 1, 2);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 5, 2);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 9, 2);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 10, 2);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 0, 11, 2);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 1, 1);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 4, 1);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 8, 1);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 9, 1);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 1, 10, 1);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 1, -3);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 2, -3);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 4, -3);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 5, -3);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 5, 6, -3);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 9, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 9, 1, -7);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 9, 2, -7);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 10, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 10, 1, 3);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 1, 2);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 10, 2);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 19, 2);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 20, 2);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 0, 21, 2);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 1, 1);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 9, 1);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 18, 1);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 19, 1);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 1, 20, 1);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 1, -8);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 5, -8);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 9, -8);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 10, -8);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 10, 11, -8);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 19, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 19, 1, -17);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 19, 2, -17);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 20, 0, 3);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 20, 1, 3);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 4, 0, SV(""), 0, 0, 0);
+  test(S("abcde"), 4, 0, SV(""), 0, 1, 0);
+  test(S("abcde"), 4, 0, SV(""), 1, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcde"), 4, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcde"), 4, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcde"), 4, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcde"), 4, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcde"), 4, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcde"), 4, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcde"), 4, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcde"), 4, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcde"), 4, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcde"), 4, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcde"), 4, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcde"), 4, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcde"), 4, 0, SV("abcde"), 2, 4, -3);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test15()
-{
-    test(S("abcde"), 4, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcde"), 4, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcde"), 4, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcde"), 4, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 4, 1, SV(""), 0, 0, 1);
-    test(S("abcde"), 4, 1, SV(""), 0, 1, 1);
-    test(S("abcde"), 4, 1, SV(""), 1, 0, 0);
-    test(S("abcde"), 4, 1, SV("abcde"), 0, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcde"), 0, 1, 4);
-    test(S("abcde"), 4, 1, SV("abcde"), 0, 2, 4);
-    test(S("abcde"), 4, 1, SV("abcde"), 0, 4, 4);
-    test(S("abcde"), 4, 1, SV("abcde"), 0, 5, 4);
-    test(S("abcde"), 4, 1, SV("abcde"), 0, 6, 4);
-    test(S("abcde"), 4, 1, SV("abcde"), 1, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcde"), 1, 1, 3);
-    test(S("abcde"), 4, 1, SV("abcde"), 1, 2, 3);
-    test(S("abcde"), 4, 1, SV("abcde"), 1, 3, 3);
-    test(S("abcde"), 4, 1, SV("abcde"), 1, 4, 3);
-    test(S("abcde"), 4, 1, SV("abcde"), 1, 5, 3);
-    test(S("abcde"), 4, 1, SV("abcde"), 2, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcde"), 2, 1, 2);
-    test(S("abcde"), 4, 1, SV("abcde"), 2, 2, 2);
-    test(S("abcde"), 4, 1, SV("abcde"), 2, 3, 2);
-    test(S("abcde"), 4, 1, SV("abcde"), 2, 4, 2);
-    test(S("abcde"), 4, 1, SV("abcde"), 4, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcde"), 4, 1, 0);
-    test(S("abcde"), 4, 1, SV("abcde"), 4, 2, 0);
-    test(S("abcde"), 4, 1, SV("abcde"), 5, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcde"), 5, 1, 1);
-    test(S("abcde"), 4, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 1, 4);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 5, 4);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 9, 4);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 10, 4);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 11, 4);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 1, 3);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 4, 3);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 8, 3);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 9, 3);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 10, 3);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 2, -1);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 4, -1);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 5, -1);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 6, -1);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 9, 1, -5);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test15() {
+  test(S("abcde"), 4, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcde"), 4, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcde"), 4, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcde"), 4, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 4, 1, SV(""), 0, 0, 1);
+  test(S("abcde"), 4, 1, SV(""), 0, 1, 1);
+  test(S("abcde"), 4, 1, SV(""), 1, 0, 0);
+  test(S("abcde"), 4, 1, SV("abcde"), 0, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcde"), 0, 1, 4);
+  test(S("abcde"), 4, 1, SV("abcde"), 0, 2, 4);
+  test(S("abcde"), 4, 1, SV("abcde"), 0, 4, 4);
+  test(S("abcde"), 4, 1, SV("abcde"), 0, 5, 4);
+  test(S("abcde"), 4, 1, SV("abcde"), 0, 6, 4);
+  test(S("abcde"), 4, 1, SV("abcde"), 1, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcde"), 1, 1, 3);
+  test(S("abcde"), 4, 1, SV("abcde"), 1, 2, 3);
+  test(S("abcde"), 4, 1, SV("abcde"), 1, 3, 3);
+  test(S("abcde"), 4, 1, SV("abcde"), 1, 4, 3);
+  test(S("abcde"), 4, 1, SV("abcde"), 1, 5, 3);
+  test(S("abcde"), 4, 1, SV("abcde"), 2, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcde"), 2, 1, 2);
+  test(S("abcde"), 4, 1, SV("abcde"), 2, 2, 2);
+  test(S("abcde"), 4, 1, SV("abcde"), 2, 3, 2);
+  test(S("abcde"), 4, 1, SV("abcde"), 2, 4, 2);
+  test(S("abcde"), 4, 1, SV("abcde"), 4, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcde"), 4, 1, 0);
+  test(S("abcde"), 4, 1, SV("abcde"), 4, 2, 0);
+  test(S("abcde"), 4, 1, SV("abcde"), 5, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcde"), 5, 1, 1);
+  test(S("abcde"), 4, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 1, 4);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 5, 4);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 9, 4);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 10, 4);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 0, 11, 4);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 1, 3);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 4, 3);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 8, 3);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 9, 3);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 1, 10, 3);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 2, -1);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 4, -1);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 5, -1);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 5, 6, -1);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 9, 1, -5);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test16()
-{
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 9, 2, -5);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 1, 4);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 10, 4);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 19, 4);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 20, 4);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 21, 4);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 1, 3);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 9, 3);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 18, 3);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 19, 3);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 20, 3);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 1, -6);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 5, -6);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 9, -6);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 10, -6);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 11, -6);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 19, 1, -15);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 19, 2, -15);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 4, 2, SV(""), 0, 0, 1);
-    test(S("abcde"), 4, 2, SV(""), 0, 1, 1);
-    test(S("abcde"), 4, 2, SV(""), 1, 0, 0);
-    test(S("abcde"), 4, 2, SV("abcde"), 0, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcde"), 0, 1, 4);
-    test(S("abcde"), 4, 2, SV("abcde"), 0, 2, 4);
-    test(S("abcde"), 4, 2, SV("abcde"), 0, 4, 4);
-    test(S("abcde"), 4, 2, SV("abcde"), 0, 5, 4);
-    test(S("abcde"), 4, 2, SV("abcde"), 0, 6, 4);
-    test(S("abcde"), 4, 2, SV("abcde"), 1, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcde"), 1, 1, 3);
-    test(S("abcde"), 4, 2, SV("abcde"), 1, 2, 3);
-    test(S("abcde"), 4, 2, SV("abcde"), 1, 3, 3);
-    test(S("abcde"), 4, 2, SV("abcde"), 1, 4, 3);
-    test(S("abcde"), 4, 2, SV("abcde"), 1, 5, 3);
-    test(S("abcde"), 4, 2, SV("abcde"), 2, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcde"), 2, 1, 2);
-    test(S("abcde"), 4, 2, SV("abcde"), 2, 2, 2);
-    test(S("abcde"), 4, 2, SV("abcde"), 2, 3, 2);
-    test(S("abcde"), 4, 2, SV("abcde"), 2, 4, 2);
-    test(S("abcde"), 4, 2, SV("abcde"), 4, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcde"), 4, 1, 0);
-    test(S("abcde"), 4, 2, SV("abcde"), 4, 2, 0);
-    test(S("abcde"), 4, 2, SV("abcde"), 5, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcde"), 5, 1, 1);
-    test(S("abcde"), 4, 2, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 1, 4);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 5, 4);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 9, 4);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 10, 4);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 11, 4);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 1, 3);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 4, 3);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 8, 3);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 9, 3);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 10, 3);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 2, -1);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 4, -1);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 5, -1);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 6, -1);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 9, 1, -5);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 9, 2, -5);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 1, 4);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 10, 4);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 19, 4);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 20, 4);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 21, 4);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 1, 3);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 9, 3);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 18, 3);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 19, 3);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 20, 3);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 1, -6);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 5, -6);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 9, -6);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 10, -6);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 11, -6);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 19, 1, -15);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 19, 2, -15);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test16() {
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 9, 2, -5);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 1, 4);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 10, 4);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 19, 4);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 20, 4);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 0, 21, 4);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 1, 3);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 9, 3);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 18, 3);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 19, 3);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 1, 20, 3);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 1, -6);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 5, -6);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 9, -6);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 10, -6);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 10, 11, -6);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 19, 1, -15);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 19, 2, -15);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 4, 2, SV(""), 0, 0, 1);
+  test(S("abcde"), 4, 2, SV(""), 0, 1, 1);
+  test(S("abcde"), 4, 2, SV(""), 1, 0, 0);
+  test(S("abcde"), 4, 2, SV("abcde"), 0, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcde"), 0, 1, 4);
+  test(S("abcde"), 4, 2, SV("abcde"), 0, 2, 4);
+  test(S("abcde"), 4, 2, SV("abcde"), 0, 4, 4);
+  test(S("abcde"), 4, 2, SV("abcde"), 0, 5, 4);
+  test(S("abcde"), 4, 2, SV("abcde"), 0, 6, 4);
+  test(S("abcde"), 4, 2, SV("abcde"), 1, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcde"), 1, 1, 3);
+  test(S("abcde"), 4, 2, SV("abcde"), 1, 2, 3);
+  test(S("abcde"), 4, 2, SV("abcde"), 1, 3, 3);
+  test(S("abcde"), 4, 2, SV("abcde"), 1, 4, 3);
+  test(S("abcde"), 4, 2, SV("abcde"), 1, 5, 3);
+  test(S("abcde"), 4, 2, SV("abcde"), 2, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcde"), 2, 1, 2);
+  test(S("abcde"), 4, 2, SV("abcde"), 2, 2, 2);
+  test(S("abcde"), 4, 2, SV("abcde"), 2, 3, 2);
+  test(S("abcde"), 4, 2, SV("abcde"), 2, 4, 2);
+  test(S("abcde"), 4, 2, SV("abcde"), 4, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcde"), 4, 1, 0);
+  test(S("abcde"), 4, 2, SV("abcde"), 4, 2, 0);
+  test(S("abcde"), 4, 2, SV("abcde"), 5, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcde"), 5, 1, 1);
+  test(S("abcde"), 4, 2, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 1, 4);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 5, 4);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 9, 4);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 10, 4);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 0, 11, 4);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 1, 3);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 4, 3);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 8, 3);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 9, 3);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 1, 10, 3);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 2, -1);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 4, -1);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 5, -1);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 5, 6, -1);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 9, 1, -5);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 9, 2, -5);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 1, 4);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 10, 4);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 19, 4);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 20, 4);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 0, 21, 4);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 1, 3);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 9, 3);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 18, 3);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 19, 3);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 1, 20, 3);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 1, -6);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 5, -6);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 9, -6);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 10, -6);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 10, 11, -6);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 19, 1, -15);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 19, 2, -15);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test17()
-{
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 5, 0, SV(""), 0, 0, 0);
-    test(S("abcde"), 5, 0, SV(""), 0, 1, 0);
-    test(S("abcde"), 5, 0, SV(""), 1, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcde"), 5, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcde"), 5, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcde"), 5, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcde"), 5, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcde"), 5, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcde"), 5, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcde"), 5, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcde"), 5, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcde"), 5, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcde"), 5, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcde"), 5, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcde"), 5, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcde"), 5, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcde"), 5, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcde"), 5, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcde"), 5, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcde"), 5, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 5, 1, SV(""), 0, 0, 0);
-    test(S("abcde"), 5, 1, SV(""), 0, 1, 0);
-    test(S("abcde"), 5, 1, SV(""), 1, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcde"), 0, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcde"), 0, 1, -1);
-    test(S("abcde"), 5, 1, SV("abcde"), 0, 2, -2);
-    test(S("abcde"), 5, 1, SV("abcde"), 0, 4, -4);
-    test(S("abcde"), 5, 1, SV("abcde"), 0, 5, -5);
-    test(S("abcde"), 5, 1, SV("abcde"), 0, 6, -5);
-    test(S("abcde"), 5, 1, SV("abcde"), 1, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcde"), 1, 1, -1);
-    test(S("abcde"), 5, 1, SV("abcde"), 1, 2, -2);
-    test(S("abcde"), 5, 1, SV("abcde"), 1, 3, -3);
-    test(S("abcde"), 5, 1, SV("abcde"), 1, 4, -4);
-    test(S("abcde"), 5, 1, SV("abcde"), 1, 5, -4);
-    test(S("abcde"), 5, 1, SV("abcde"), 2, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcde"), 2, 1, -1);
-    test(S("abcde"), 5, 1, SV("abcde"), 2, 2, -2);
-    test(S("abcde"), 5, 1, SV("abcde"), 2, 3, -3);
-    test(S("abcde"), 5, 1, SV("abcde"), 2, 4, -3);
-    test(S("abcde"), 5, 1, SV("abcde"), 4, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcde"), 4, 1, -1);
-    test(S("abcde"), 5, 1, SV("abcde"), 4, 2, -1);
-    test(S("abcde"), 5, 1, SV("abcde"), 5, 0, 0);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test17() {
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 5, 0, SV(""), 0, 0, 0);
+  test(S("abcde"), 5, 0, SV(""), 0, 1, 0);
+  test(S("abcde"), 5, 0, SV(""), 1, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcde"), 5, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcde"), 5, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcde"), 5, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcde"), 5, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcde"), 5, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcde"), 5, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcde"), 5, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcde"), 5, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcde"), 5, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcde"), 5, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcde"), 5, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcde"), 5, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcde"), 5, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcde"), 5, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcde"), 5, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcde"), 5, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcde"), 5, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 5, 1, SV(""), 0, 0, 0);
+  test(S("abcde"), 5, 1, SV(""), 0, 1, 0);
+  test(S("abcde"), 5, 1, SV(""), 1, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcde"), 0, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcde"), 0, 1, -1);
+  test(S("abcde"), 5, 1, SV("abcde"), 0, 2, -2);
+  test(S("abcde"), 5, 1, SV("abcde"), 0, 4, -4);
+  test(S("abcde"), 5, 1, SV("abcde"), 0, 5, -5);
+  test(S("abcde"), 5, 1, SV("abcde"), 0, 6, -5);
+  test(S("abcde"), 5, 1, SV("abcde"), 1, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcde"), 1, 1, -1);
+  test(S("abcde"), 5, 1, SV("abcde"), 1, 2, -2);
+  test(S("abcde"), 5, 1, SV("abcde"), 1, 3, -3);
+  test(S("abcde"), 5, 1, SV("abcde"), 1, 4, -4);
+  test(S("abcde"), 5, 1, SV("abcde"), 1, 5, -4);
+  test(S("abcde"), 5, 1, SV("abcde"), 2, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcde"), 2, 1, -1);
+  test(S("abcde"), 5, 1, SV("abcde"), 2, 2, -2);
+  test(S("abcde"), 5, 1, SV("abcde"), 2, 3, -3);
+  test(S("abcde"), 5, 1, SV("abcde"), 2, 4, -3);
+  test(S("abcde"), 5, 1, SV("abcde"), 4, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcde"), 4, 1, -1);
+  test(S("abcde"), 5, 1, SV("abcde"), 4, 2, -1);
+  test(S("abcde"), 5, 1, SV("abcde"), 5, 0, 0);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test18()
-{
-    test(S("abcde"), 5, 1, SV("abcde"), 5, 1, 0);
-    test(S("abcde"), 5, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 6, 0, SV(""), 0, 0, 0);
-    test(S("abcde"), 6, 0, SV(""), 0, 1, 0);
-    test(S("abcde"), 6, 0, SV(""), 1, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 0, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 0, 2, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 0, 4, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 0, 5, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 0, 6, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 1, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 1, 2, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 1, 3, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 1, 4, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 1, 5, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 2, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 2, 2, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 2, 3, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 2, 4, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 4, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 4, 2, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 5, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 9, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 10, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 11, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 4, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 8, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 9, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 10, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 2, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 4, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 5, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 6, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 9, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 9, 2, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 11, 0, 0);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test18() {
+  test(S("abcde"), 5, 1, SV("abcde"), 5, 1, 0);
+  test(S("abcde"), 5, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 6, 0, SV(""), 0, 0, 0);
+  test(S("abcde"), 6, 0, SV(""), 0, 1, 0);
+  test(S("abcde"), 6, 0, SV(""), 1, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 0, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 0, 2, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 0, 4, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 0, 5, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 0, 6, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 1, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 1, 2, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 1, 3, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 1, 4, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 1, 5, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 2, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 2, 2, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 2, 3, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 2, 4, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 4, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 4, 2, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 5, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 9, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 10, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 0, 11, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 4, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 8, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 9, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 1, 10, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 2, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 4, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 5, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 5, 6, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 9, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 9, 2, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 11, 0, 0);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test19()
-{
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 19, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 20, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 21, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 18, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 19, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 20, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 5, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 9, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 10, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 11, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 19, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 19, 2, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV(""), 0, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV(""), 0, 1, 0);
-    test(S("abcdefghij"), 0, 0, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 0, 1, SV(""), 0, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV(""), 0, 1, 1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test19() {
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 19, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 20, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0, 21, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 18, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 19, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 1, 20, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 5, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 9, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 10, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 10, 11, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 19, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 19, 2, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV(""), 0, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV(""), 0, 1, 0);
+  test(S("abcdefghij"), 0, 0, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 0, 1, SV(""), 0, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV(""), 0, 1, 1);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test20()
-{
-    test(S("abcdefghij"), 0, 1, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 1, 0);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 2, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 4, -3);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 5, -4);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 6, -4);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 2, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 3, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 5, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 1, -2);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 3, -2);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 4, -2);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 4, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 4, 1, -4);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 4, 2, -4);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 5, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 5, 1, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 1, 0);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 5, -4);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 9, -8);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 10, -9);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 11, -9);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 1, 0);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 10, -9);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 19, -18);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 20, -19);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 21, -19);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 0, 5, SV(""), 0, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV(""), 0, 1, 5);
-    test(S("abcdefghij"), 0, 5, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 1, 4);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 2, 3);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 4, 1);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 5, 0);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 6, 0);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 2, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 3, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 5, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 1, -2);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 3, -2);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 4, -2);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 4, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 4, 1, -4);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 4, 2, -4);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 5, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 5, 1, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 1, 4);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test20() {
+  test(S("abcdefghij"), 0, 1, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 1, 0);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 2, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 4, -3);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 5, -4);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 0, 6, -4);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 2, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 3, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 1, 5, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 1, -2);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 3, -2);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 2, 4, -2);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 4, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 4, 1, -4);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 4, 2, -4);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 5, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 5, 1, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 1, 0);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 5, -4);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 9, -8);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 10, -9);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 0, 11, -9);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 1, 0);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 10, -9);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 19, -18);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 20, -19);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 21, -19);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 0, 5, SV(""), 0, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV(""), 0, 1, 5);
+  test(S("abcdefghij"), 0, 5, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 1, 4);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 2, 3);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 4, 1);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 5, 0);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 0, 6, 0);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 2, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 3, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 1, 5, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 1, -2);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 3, -2);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 2, 4, -2);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 4, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 4, 1, -4);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 4, 2, -4);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 5, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 5, 1, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 1, 4);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test21()
-{
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 5, 0);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 9, -4);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 10, -5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 11, -5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 9, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 10, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 10, 1, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 1, 4);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 10, -5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 19, -14);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 20, -15);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 21, -15);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 20, 0, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 20, 1, 5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 0, 9, SV(""), 0, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV(""), 0, 1, 9);
-    test(S("abcdefghij"), 0, 9, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 1, 8);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 2, 7);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 4, 5);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 5, 4);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 6, 4);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 2, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 3, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 5, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 1, -2);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 3, -2);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 4, -2);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 4, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 4, 1, -4);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 4, 2, -4);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 5, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 5, 1, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 1, 8);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 5, 4);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 9, 0);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 10, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 11, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 9, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 10, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 10, 1, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 1, 8);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 10, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 19, -10);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test21() {
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 5, 0);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 9, -4);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 10, -5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 0, 11, -5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 9, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 10, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 10, 1, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 1, 4);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 10, -5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 19, -14);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 20, -15);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 0, 21, -15);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 20, 0, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 20, 1, 5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 0, 9, SV(""), 0, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV(""), 0, 1, 9);
+  test(S("abcdefghij"), 0, 9, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 1, 8);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 2, 7);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 4, 5);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 5, 4);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 0, 6, 4);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 2, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 3, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 1, 5, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 1, -2);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 3, -2);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 2, 4, -2);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 4, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 4, 1, -4);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 4, 2, -4);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 5, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 5, 1, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 1, 8);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 5, 4);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 9, 0);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 10, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 0, 11, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 9, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 10, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 10, 1, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 1, 8);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 10, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 19, -10);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test22()
-{
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 20, -11);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 21, -11);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 19, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 20, 0, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 20, 1, 9);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 0, 10, SV(""), 0, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV(""), 0, 1, 10);
-    test(S("abcdefghij"), 0, 10, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 1, 9);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 2, 8);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 4, 6);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 2, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 3, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 5, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 1, -2);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 3, -2);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 4, -2);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 4, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 4, 1, -4);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 4, 2, -4);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 5, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 5, 1, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 1, 9);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 10, 0);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 11, 0);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 9, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 10, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 10, 1, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 1, 9);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 19, -9);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 20, -10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 21, -10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 20, 0, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 20, 1, 10);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 0, 11, SV(""), 0, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV(""), 0, 1, 10);
-    test(S("abcdefghij"), 0, 11, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 1, 9);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 2, 8);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test22() {
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 20, -11);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 0, 21, -11);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 19, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 20, 0, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 20, 1, 9);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 0, 10, SV(""), 0, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV(""), 0, 1, 10);
+  test(S("abcdefghij"), 0, 10, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 1, 9);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 2, 8);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 4, 6);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 2, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 3, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 1, 5, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 1, -2);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 3, -2);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 2, 4, -2);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 4, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 4, 1, -4);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 4, 2, -4);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 5, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 5, 1, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 1, 9);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 10, 0);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0, 11, 0);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 9, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 10, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 10, 1, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 1, 9);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 19, -9);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 20, -10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 21, -10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 20, 0, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 20, 1, 10);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 0, 11, SV(""), 0, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV(""), 0, 1, 10);
+  test(S("abcdefghij"), 0, 11, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 1, 9);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 2, 8);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test23()
-{
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 4, 6);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 2, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 3, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 5, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 1, -2);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 3, -2);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 4, -2);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 4, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 4, 1, -4);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 4, 2, -4);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 5, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 5, 1, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 1, 9);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 10, 0);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 11, 0);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 9, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 10, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 10, 1, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 1, 9);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 19, -9);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 20, -10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 21, -10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 19, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 20, 0, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 20, 1, 10);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV(""), 0, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV(""), 0, 1, 0);
-    test(S("abcdefghij"), 1, 0, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 11, -10);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test23() {
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 4, 6);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 2, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 3, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 1, 5, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 1, -2);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 3, -2);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 2, 4, -2);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 4, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 4, 1, -4);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 4, 2, -4);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 5, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 5, 1, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 1, 9);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 10, 0);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0, 11, 0);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 9, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 10, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 10, 1, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 1, 9);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 19, -9);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 20, -10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 0, 21, -10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 19, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 20, 0, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 20, 1, 10);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV(""), 0, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV(""), 0, 1, 0);
+  test(S("abcdefghij"), 1, 0, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 0, 11, -10);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test24()
-{
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 1, 1, SV(""), 0, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV(""), 0, 1, 1);
-    test(S("abcdefghij"), 1, 1, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 2, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 4, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 6, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 1, 0);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 2, -1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 3, -2);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 4, -3);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 5, -3);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 2, -1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 3, -1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 4, -1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 4, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 4, 1, -3);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 4, 2, -3);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 5, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 5, 1, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 1, 0);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 4, -3);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 8, -7);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 9, -8);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 10, -8);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 1, 0);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test24() {
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 1, 1, SV(""), 0, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV(""), 0, 1, 1);
+  test(S("abcdefghij"), 1, 1, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 2, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 4, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 0, 6, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 1, 0);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 2, -1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 3, -2);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 4, -3);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 1, 5, -3);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 2, -1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 3, -1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 2, 4, -1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 4, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 4, 1, -3);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 4, 2, -3);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 5, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 5, 1, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 1, 0);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 4, -3);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 8, -7);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 9, -8);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1, 10, -8);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 1, 0);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test25()
-{
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 9, -8);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 18, -17);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 19, -18);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 20, -18);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 1, 4, SV(""), 0, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV(""), 0, 1, 4);
-    test(S("abcdefghij"), 1, 4, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 2, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 4, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 6, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 1, 3);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 2, 2);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 3, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 4, 0);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 5, 0);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 2, -1);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 3, -1);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 4, -1);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 4, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 4, 1, -3);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 4, 2, -3);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 5, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 5, 1, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 1, 3);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 4, 0);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 8, -4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 9, -5);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 10, -5);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 9, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 10, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 10, 1, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 1, 3);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 9, -5);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 18, -14);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 19, -15);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 20, -15);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 20, 0, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 20, 1, 4);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 1, 8, SV(""), 0, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV(""), 0, 1, 8);
-    test(S("abcdefghij"), 1, 8, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 2, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 4, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 6, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 0, 8);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test25() {
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 9, -8);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 18, -17);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 19, -18);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 20, -18);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 1, 4, SV(""), 0, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV(""), 0, 1, 4);
+  test(S("abcdefghij"), 1, 4, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 2, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 4, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 0, 6, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 1, 3);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 2, 2);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 3, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 4, 0);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 1, 5, 0);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 2, -1);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 3, -1);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 2, 4, -1);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 4, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 4, 1, -3);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 4, 2, -3);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 5, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 5, 1, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 1, 3);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 4, 0);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 8, -4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 9, -5);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1, 10, -5);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 9, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 10, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 10, 1, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 1, 3);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 9, -5);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 18, -14);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 19, -15);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1, 20, -15);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 20, 0, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 20, 1, 4);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 1, 8, SV(""), 0, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV(""), 0, 1, 8);
+  test(S("abcdefghij"), 1, 8, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 2, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 4, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 0, 6, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 0, 8);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test26()
-{
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 1, 7);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 2, 6);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 3, 5);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 4, 4);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 5, 4);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 2, -1);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 3, -1);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 4, -1);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 4, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 4, 1, -3);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 4, 2, -3);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 5, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 5, 1, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 1, 7);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 4, 4);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 8, 0);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 9, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 10, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 10, 1, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 1, 7);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 18, -10);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 19, -11);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 20, -11);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 19, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 20, 0, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 20, 1, 8);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 1, 9, SV(""), 0, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV(""), 0, 1, 9);
-    test(S("abcdefghij"), 1, 9, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 2, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 4, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 6, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 1, 8);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 2, 7);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 3, 6);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 4, 5);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 5, 5);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 2, -1);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 3, -1);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 4, -1);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 4, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 4, 1, -3);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 4, 2, -3);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 5, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 5, 1, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 1, 8);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 4, 5);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 8, 1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test26() {
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 1, 7);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 2, 6);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 3, 5);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 4, 4);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 1, 5, 4);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 2, -1);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 3, -1);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 2, 4, -1);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 4, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 4, 1, -3);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 4, 2, -3);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 5, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 5, 1, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 1, 7);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 4, 4);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 8, 0);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 9, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 10, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 10, 1, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 1, 7);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 18, -10);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 19, -11);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1, 20, -11);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 19, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 20, 0, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 20, 1, 8);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 1, 9, SV(""), 0, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV(""), 0, 1, 9);
+  test(S("abcdefghij"), 1, 9, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 2, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 4, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 0, 6, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 1, 8);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 2, 7);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 3, 6);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 4, 5);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 1, 5, 5);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 2, -1);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 3, -1);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 2, 4, -1);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 4, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 4, 1, -3);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 4, 2, -3);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 5, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 5, 1, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 1, 8);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 4, 5);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 8, 1);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test27()
-{
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 9, 0);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 10, 0);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 9, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 10, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 10, 1, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 1, 8);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 18, -9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 19, -10);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 20, -10);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 20, 0, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 20, 1, 9);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 1, 10, SV(""), 0, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV(""), 0, 1, 9);
-    test(S("abcdefghij"), 1, 10, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 2, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 4, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 6, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 1, 8);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 2, 7);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 3, 6);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 4, 5);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 5, 5);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 2, -1);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 3, -1);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 4, -1);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 4, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 4, 1, -3);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 4, 2, -3);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 5, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 5, 1, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 1, 8);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 4, 5);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 8, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 9, 0);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 10, 0);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 9, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 10, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 10, 1, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 1, 8);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 18, -9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 19, -10);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 20, -10);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test27() {
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 9, 0);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1, 10, 0);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 9, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 10, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 10, 1, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 1, 8);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 18, -9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 19, -10);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 20, -10);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 20, 0, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 20, 1, 9);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 1, 10, SV(""), 0, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV(""), 0, 1, 9);
+  test(S("abcdefghij"), 1, 10, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 2, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 4, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 0, 6, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 1, 8);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 2, 7);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 3, 6);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 4, 5);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 1, 5, 5);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 2, -1);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 3, -1);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 2, 4, -1);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 4, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 4, 1, -3);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 4, 2, -3);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 5, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 5, 1, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 1, 8);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 4, 5);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 8, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 9, 0);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1, 10, 0);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 9, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 10, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 10, 1, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 1, 8);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 18, -9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 19, -10);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1, 20, -10);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test28()
-{
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 19, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 20, 0, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 20, 1, 9);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV(""), 0, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV(""), 0, 1, 0);
-    test(S("abcdefghij"), 5, 0, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 5, 1, SV(""), 0, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV(""), 0, 1, 1);
-    test(S("abcdefghij"), 5, 1, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 2, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 4, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 2, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 3, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 4, 4);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test28() {
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 19, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 20, 0, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 20, 1, 9);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV(""), 0, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV(""), 0, 1, 0);
+  test(S("abcdefghij"), 5, 0, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 5, 1, SV(""), 0, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV(""), 0, 1, 1);
+  test(S("abcdefghij"), 5, 1, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 2, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 4, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 2, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 3, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 4, 4);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test29()
-{
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 5, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 1, 3);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 2, 3);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 3, 3);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 4, 3);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 4, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 4, 1, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 4, 2, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 5, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 5, 1, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 9, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 11, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 8, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 10, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 1, 0);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 2, -1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 4, -3);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 9, 1, -4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 9, 2, -4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 19, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 20, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 21, 5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 18, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 19, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 20, 4);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 1, -5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 9, -5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 10, -5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 11, -5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 1, -14);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 2, -14);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 5, 2, SV(""), 0, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV(""), 0, 1, 2);
-    test(S("abcdefghij"), 5, 2, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 2, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 4, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 2, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 3, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 5, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 1, 3);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 2, 3);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 3, 3);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 4, 3);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 4, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 4, 1, 1);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 4, 2, 1);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 5, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 5, 1, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 9, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 11, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 8, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 10, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 1, 1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test29() {
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 1, 5, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 1, 3);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 2, 3);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 3, 3);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 2, 4, 3);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 4, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 4, 1, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 4, 2, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 5, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 5, 1, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 9, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 0, 11, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 8, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 1, 10, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 1, 0);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 2, -1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 4, -3);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 9, 1, -4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 9, 2, -4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 19, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 20, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 0, 21, 5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 18, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 19, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 1, 20, 4);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 1, -5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 9, -5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 10, -5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 10, 11, -5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 1, -14);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 19, 2, -14);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 5, 2, SV(""), 0, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV(""), 0, 1, 2);
+  test(S("abcdefghij"), 5, 2, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 2, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 4, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 2, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 3, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 1, 5, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 1, 3);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 2, 3);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 3, 3);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 2, 4, 3);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 4, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 4, 1, 1);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 4, 2, 1);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 5, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 5, 1, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 9, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 0, 11, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 8, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 1, 10, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 1, 1);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test30()
-{
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 2, 0);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 4, -2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 5, -3);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 6, -3);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 9, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 9, 1, -4);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 9, 2, -4);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 10, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 10, 1, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 19, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 20, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 21, 5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 18, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 19, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 20, 4);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 1, -5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 9, -5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 10, -5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 11, -5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 19, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 19, 1, -14);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 19, 2, -14);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 20, 0, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 20, 1, 2);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 5, 4, SV(""), 0, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV(""), 0, 1, 4);
-    test(S("abcdefghij"), 5, 4, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 2, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 4, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 2, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 3, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 5, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 1, 3);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 2, 3);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 3, 3);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 4, 3);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 4, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 4, 1, 1);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 4, 2, 1);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 5, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 5, 1, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 9, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 11, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 8, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 10, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 1, 3);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 2, 2);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 4, 0);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 5, -1);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 6, -1);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 9, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 9, 1, -4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 9, 2, -4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 10, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 10, 1, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 19, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 20, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 21, 5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 18, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 19, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 20, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 1, -5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 9, -5);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test30() {
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 2, 0);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 4, -2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 5, -3);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5, 6, -3);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 9, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 9, 1, -4);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 9, 2, -4);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 10, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 10, 1, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 19, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 20, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 0, 21, 5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 18, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 19, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 1, 20, 4);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 1, -5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 9, -5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 10, -5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 10, 11, -5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 19, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 19, 1, -14);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 19, 2, -14);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 20, 0, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 20, 1, 2);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 5, 4, SV(""), 0, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV(""), 0, 1, 4);
+  test(S("abcdefghij"), 5, 4, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 2, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 4, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 2, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 3, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 1, 5, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 1, 3);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 2, 3);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 3, 3);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 2, 4, 3);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 4, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 4, 1, 1);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 4, 2, 1);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 5, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 5, 1, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 9, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 0, 11, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 8, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 1, 10, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 1, 3);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 2, 2);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 4, 0);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 5, -1);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5, 6, -1);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 9, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 9, 1, -4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 9, 2, -4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 10, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 10, 1, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 19, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 20, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 0, 21, 5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 18, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 19, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 1, 20, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 1, -5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 9, -5);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test31()
-{
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 10, -5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 11, -5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 19, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 19, 1, -14);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 19, 2, -14);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 20, 0, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 20, 1, 4);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 5, 5, SV(""), 0, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV(""), 0, 1, 5);
-    test(S("abcdefghij"), 5, 5, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 2, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 4, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 2, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 3, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 5, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 1, 3);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 2, 3);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 3, 3);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 4, 3);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 4, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 4, 1, 1);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 4, 2, 1);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 5, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 5, 1, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 9, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 11, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 8, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 10, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 1, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 2, 3);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 4, 1);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 5, 0);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 6, 0);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 9, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 9, 1, -4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 9, 2, -4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 10, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 10, 1, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 19, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 20, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 21, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 18, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 19, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 20, 4);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 1, -5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 9, -5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 10, -5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 11, -5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 19, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 19, 1, -14);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 19, 2, -14);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 20, 0, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 20, 1, 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 5, 6, SV(""), 0, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV(""), 0, 1, 5);
-    test(S("abcdefghij"), 5, 6, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 2, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 4, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 2, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 3, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 5, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 1, 3);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 2, 3);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test31() {
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 10, -5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 10, 11, -5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 19, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 19, 1, -14);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 19, 2, -14);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 20, 0, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 20, 1, 4);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 5, 5, SV(""), 0, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV(""), 0, 1, 5);
+  test(S("abcdefghij"), 5, 5, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 2, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 4, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 2, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 3, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 1, 5, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 1, 3);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 2, 3);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 3, 3);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 2, 4, 3);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 4, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 4, 1, 1);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 4, 2, 1);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 5, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 5, 1, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 9, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 0, 11, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 8, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 1, 10, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 1, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 2, 3);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 4, 1);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 5, 0);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5, 6, 0);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 9, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 9, 1, -4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 9, 2, -4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 10, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 10, 1, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 19, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 20, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 0, 21, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 18, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 19, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 1, 20, 4);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 1, -5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 9, -5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 10, -5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 10, 11, -5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 19, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 19, 1, -14);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 19, 2, -14);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 20, 0, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 20, 1, 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 5, 6, SV(""), 0, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV(""), 0, 1, 5);
+  test(S("abcdefghij"), 5, 6, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 2, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 4, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 2, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 3, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 1, 5, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 1, 3);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 2, 3);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test32()
-{
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 3, 3);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 4, 3);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 4, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 4, 1, 1);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 4, 2, 1);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 5, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 5, 1, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 9, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 11, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 8, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 10, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 1, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 2, 3);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 4, 1);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 5, 0);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 6, 0);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 9, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 9, 1, -4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 9, 2, -4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 10, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 10, 1, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 19, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 20, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 21, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 18, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 19, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 20, 4);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 1, -5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 9, -5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 10, -5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 11, -5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 19, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 19, 1, -14);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 19, 2, -14);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 20, 0, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 20, 1, 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV(""), 0, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV(""), 0, 1, 0);
-    test(S("abcdefghij"), 9, 0, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 6, -5);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test32() {
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 3, 3);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 2, 4, 3);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 4, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 4, 1, 1);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 4, 2, 1);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 5, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 5, 1, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 9, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 0, 11, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 8, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 1, 10, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 1, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 2, 3);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 4, 1);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 5, 0);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5, 6, 0);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 9, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 9, 1, -4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 9, 2, -4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 10, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 10, 1, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 19, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 20, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 0, 21, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 18, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 19, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 1, 20, 4);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 1, -5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 9, -5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 10, -5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 10, 11, -5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 19, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 19, 1, -14);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 19, 2, -14);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 20, 0, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 20, 1, 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV(""), 0, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV(""), 0, 1, 0);
+  test(S("abcdefghij"), 9, 0, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 5, 6, -5);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test33()
-{
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 9, 1, SV(""), 0, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV(""), 0, 1, 1);
-    test(S("abcdefghij"), 9, 1, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 1, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 2, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 4, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 5, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 6, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 1, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 2, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 3, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 4, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 5, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 1, 7);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 2, 7);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 3, 7);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 4, 7);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 4, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 4, 1, 5);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 4, 2, 5);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 5, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 5, 1, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 1, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 5, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 9, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 10, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 11, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 1, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 4, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 8, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 9, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 10, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 1, 4);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 2, 4);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 4, 4);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 5, 4);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 6, 4);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 9, 1, 0);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 9, 2, 0);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 1, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 10, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 19, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 20, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 21, 9);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 1, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 9, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 18, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 19, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 20, 8);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 5, -1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 9, -1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 10, -1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 11, -1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 19, 1, -10);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test33() {
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 9, 1, SV(""), 0, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV(""), 0, 1, 1);
+  test(S("abcdefghij"), 9, 1, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 1, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 2, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 4, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 5, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 0, 6, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 1, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 2, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 3, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 4, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 1, 5, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 1, 7);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 2, 7);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 3, 7);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 2, 4, 7);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 4, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 4, 1, 5);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 4, 2, 5);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 5, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 5, 1, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 1, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 5, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 9, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 10, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 0, 11, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 1, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 4, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 8, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 9, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 1, 10, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 1, 4);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 2, 4);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 4, 4);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 5, 4);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 5, 6, 4);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 9, 1, 0);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 9, 2, 0);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 1, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 10, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 19, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 20, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 0, 21, 9);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 1, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 9, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 18, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 19, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 1, 20, 8);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 5, -1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 9, -1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 10, -1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 10, 11, -1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 19, 1, -10);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test34()
-{
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 19, 2, -10);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 9, 2, SV(""), 0, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV(""), 0, 1, 1);
-    test(S("abcdefghij"), 9, 2, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 1, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 2, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 4, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 5, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 6, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 1, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 2, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 3, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 4, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 5, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 1, 7);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 2, 7);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 3, 7);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 4, 7);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 4, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 4, 1, 5);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 4, 2, 5);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 5, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 5, 1, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 1, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 5, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 9, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 10, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 11, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 1, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 4, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 8, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 9, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 10, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 1, 4);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 2, 4);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 4, 4);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 5, 4);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 6, 4);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 9, 1, 0);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 9, 2, 0);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 1, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 10, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 19, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 20, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 21, 9);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 1, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 9, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 18, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 19, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 20, 8);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 5, -1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 9, -1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 10, -1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 11, -1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 19, 1, -10);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 19, 2, -10);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV(""), 0, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV(""), 0, 1, 0);
-    test(S("abcdefghij"), 10, 0, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 4, 1, -1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test34() {
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 19, 2, -10);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 9, 2, SV(""), 0, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV(""), 0, 1, 1);
+  test(S("abcdefghij"), 9, 2, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 1, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 2, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 4, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 5, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 0, 6, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 1, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 2, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 3, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 4, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 1, 5, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 1, 7);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 2, 7);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 3, 7);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 2, 4, 7);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 4, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 4, 1, 5);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 4, 2, 5);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 5, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 5, 1, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 1, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 5, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 9, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 10, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 0, 11, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 1, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 4, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 8, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 9, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 1, 10, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 1, 4);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 2, 4);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 4, 4);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 5, 4);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 5, 6, 4);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 9, 1, 0);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 9, 2, 0);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 1, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 10, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 19, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 20, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 0, 21, 9);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 1, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 9, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 18, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 19, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 1, 20, 8);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 5, -1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 9, -1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 10, -1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 10, 11, -1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 19, 1, -10);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 19, 2, -10);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV(""), 0, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV(""), 0, 1, 0);
+  test(S("abcdefghij"), 10, 0, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 4, 1, -1);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test35()
-{
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV(""), 0, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV(""), 0, 1, 0);
-    test(S("abcdefghij"), 10, 1, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 1, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 2, -2);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 4, -4);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 5, -5);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 6, -5);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 2, -2);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 3, -3);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 4, -4);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 5, -4);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 3, -3);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 4, -3);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 4, 1, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 4, 2, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 10, 0, 0);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test35() {
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV(""), 0, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV(""), 0, 1, 0);
+  test(S("abcdefghij"), 10, 1, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 1, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 2, -2);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 4, -4);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 5, -5);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 0, 6, -5);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 2, -2);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 3, -3);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 4, -4);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 1, 5, -4);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 3, -3);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 2, 4, -3);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 4, 1, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 4, 2, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 10, 0, 0);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test36()
-{
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV(""), 0, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV(""), 0, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV(""), 1, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 2, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 4, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 5, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 6, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 2, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 3, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 4, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 5, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 2, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 3, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 4, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 4, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 4, 2, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 5, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 9, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 10, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 11, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 4, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 8, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 9, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 10, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 2, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 4, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 5, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 6, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 9, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 9, 2, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 19, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 20, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 21, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 18, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 19, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 20, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 5, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 9, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 10, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 11, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 19, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 19, 2, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test36() {
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV(""), 0, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV(""), 0, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV(""), 1, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 2, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 4, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 5, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 0, 6, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 2, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 3, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 4, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 1, 5, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 2, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 3, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 2, 4, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 4, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 4, 2, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 5, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 9, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 10, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0, 11, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 4, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 8, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 9, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 1, 10, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 2, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 4, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 5, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 5, 6, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 9, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 9, 2, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 19, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 20, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0, 21, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 18, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 19, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 1, 20, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 5, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 9, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 10, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 10, 11, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 19, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 19, 2, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test37()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 6, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 5, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 1, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 3, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 4, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 4, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 4, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 4, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 5, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 6, 0, 0);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test37() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 0, 6, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 1, 5, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 1, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 3, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 2, 4, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 4, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 4, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 4, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 5, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), 6, 0, 0);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test38()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 9, -8);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 19, -18);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 21, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 2, 8);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 4, 6);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 6, 5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 5, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 1, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 3, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 4, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 4, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 4, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 4, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 5, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 5, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 11, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 9, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 10, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 10, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 1, 9);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test38() {
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 9, -8);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 0, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 19, -18);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 0, 21, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 2, 8);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 4, 6);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 0, 6, 5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 1, 5, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 1, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 3, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 2, 4, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 4, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 4, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 4, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 5, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 5, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0, 11, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 9, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 10, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 10, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 1, 9);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test39()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 19, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 20, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 21, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 20, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 20, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 2, 17);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 4, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 5, 14);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 6, 14);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 5, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 1, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 3, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 4, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 4, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 4, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 4, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 5, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 5, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 5, 14);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 11, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 9, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 10, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 10, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 19, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 21, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 19, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 20, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 20, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 0, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 0, 20);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test39() {
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 19, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 20, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 0, 21, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 20, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 20, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 2, 17);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 4, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 5, 14);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 0, 6, 14);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 1, 5, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 1, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 3, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 2, 4, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 4, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 4, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 4, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 5, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 5, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 5, 14);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 0, 11, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 9, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 10, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 10, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 19, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 0, 21, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 19, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 20, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 20, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 0, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 0, 20);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test40()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 2, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 4, 16);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 5, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 6, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 5, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 1, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 3, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 4, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 4, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 4, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 4, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 5, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 5, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 5, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 9, 11);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 9, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 10, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 10, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 20, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 21, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 19, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 20, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 20, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 0, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 2, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 4, 16);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 5, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 6, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 5, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 1, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 3, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 4, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 4, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 4, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 4, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 5, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 5, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 5, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 9, 11);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test40() {
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 2, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 4, 16);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 5, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 0, 6, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 1, 5, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 1, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 3, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 2, 4, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 4, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 4, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 4, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 5, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 5, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 5, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 9, 11);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 9, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 10, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 10, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 20, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0, 21, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 19, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 20, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 20, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 0, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 2, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 4, 16);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 5, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 0, 6, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 1, 5, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 1, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 3, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 2, 4, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 4, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 4, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 4, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 5, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 5, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 5, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 9, 11);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test41()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 9, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 10, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 10, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 20, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 21, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 19, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 20, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 20, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test41() {
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 9, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 10, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 10, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 20, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0, 21, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 19, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 20, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 20, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test42()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 6, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 3, -2);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 5, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 4, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 4, 1, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 4, 2, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 5, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 8, -7);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 9, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 10, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 9, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 18, -17);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 19, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 20, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 0, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 5, 1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test42() {
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 0, 6, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 3, -2);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1, 5, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 2, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 4, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 4, 1, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 4, 2, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 5, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 8, -7);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 9, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1, 10, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 9, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 18, -17);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 19, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1, 20, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 0, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 5, 1);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test43()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 6, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 2, 7);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 3, 6);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 4, 5);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 4, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 4, 1, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 4, 2, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 5, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 5, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 4, 5);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 8, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 9, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 10, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 10, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 18, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 19, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 20, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 20, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 20, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 0, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 0, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 6, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 1, 17);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 2, 16);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 3, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 4, 14);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 5, 14);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 4, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 4, 1, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 4, 2, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 5, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 5, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 1, 17);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test43() {
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 0, 6, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 2, 7);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 3, 6);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 4, 5);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 2, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 4, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 4, 1, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 4, 2, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 5, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 5, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 4, 5);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 8, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 9, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 10, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 10, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 18, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 19, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1, 20, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 20, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 20, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 0, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 0, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 0, 6, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 1, 17);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 2, 16);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 3, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 4, 14);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1, 5, 14);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 2, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 4, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 4, 1, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 4, 2, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 5, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 5, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 1, 17);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test44()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 4, 14);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 8, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 9, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 10, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 10, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 1, 17);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 18, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 19, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 20, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 20, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 6, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 2, 17);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 3, 16);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 4, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 5, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 4, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 4, 1, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 4, 2, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 5, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 5, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 4, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 8, 11);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 9, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 10, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 10, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 18, 1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test44() {
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 4, 14);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 8, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 9, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 10, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 10, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 1, 17);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 18, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 19, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 20, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 20, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 0, 6, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 2, 17);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 3, 16);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 4, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1, 5, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 2, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 4, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 4, 1, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 4, 2, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 5, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 5, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 4, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 8, 11);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 9, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 10, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 10, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 18, 1);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test45()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 19, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 20, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 19, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 20, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 20, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 6, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 2, 17);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 3, 16);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 4, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 5, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 4, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 4, 1, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 4, 2, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 5, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 5, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 4, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 8, 11);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 9, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 10, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 10, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 18, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 19, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 20, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 19, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 20, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 20, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 2, -2);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test45() {
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 19, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1, 20, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 19, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 20, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 20, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 0, 6, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 2, 17);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 3, 16);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 4, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1, 5, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 2, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 4, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 4, 1, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 4, 2, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 5, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 5, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 4, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 8, 11);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 9, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 10, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 10, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 18, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 19, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1, 20, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 19, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 20, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 20, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 2, -2);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test46()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 6, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 2, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 3, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 2, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 3, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 4, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 4, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 4, 1, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 4, 2, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 5, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 8, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 10, 9);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test46() {
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 0, 6, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 2, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 3, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 1, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 2, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 3, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 2, 4, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 4, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 4, 1, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 4, 2, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 5, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 8, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 1, 10, 9);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test47()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 2, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 4, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 6, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 9, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 9, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 21, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 18, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 19, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 20, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 9, -8);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 0, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 0, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 6, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 2, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 3, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 2, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 3, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 4, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 4, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 4, 1, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 4, 2, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 5, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 5, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 8, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 2, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 4, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 6, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 9, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 9, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 9, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 10, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 10, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 21, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 18, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 19, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 20, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 1, 4);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test47() {
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 2, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 4, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 5, 6, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 9, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 9, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 0, 21, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 18, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 19, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 1, 20, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 9, -8);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 19, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 0, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 0, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 0, 6, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 2, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 3, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 1, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 2, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 3, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 2, 4, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 4, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 4, 1, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 4, 2, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 5, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 5, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 8, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 1, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 2, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 4, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 5, 6, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 9, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 9, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 9, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 10, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 10, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 0, 21, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 18, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 19, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 1, 20, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 1, 4);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test48()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 5, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 9, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 10, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 11, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 19, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 19, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 19, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 20, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 20, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 0, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 6, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 2, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 3, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 2, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 3, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 4, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 4, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 4, 1, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 4, 2, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 5, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 5, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 8, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 2, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 4, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 6, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 9, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 9, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 9, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 10, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 10, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 21, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 18, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 19, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 20, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 5, 4);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 10, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 11, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 19, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 19, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 19, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 20, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 20, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 6, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 2, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 3, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 0, 10);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test48() {
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 5, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 9, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 10, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10, 11, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 19, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 19, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 19, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 20, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 20, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 0, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 0, 6, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 2, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 3, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 1, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 2, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 3, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 2, 4, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 4, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 4, 1, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 4, 2, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 5, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 5, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 8, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 1, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 2, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 4, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 5, 6, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 9, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 9, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 9, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 10, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 10, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 0, 21, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 18, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 19, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 1, 20, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 5, 4);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 10, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10, 11, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 19, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 19, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 19, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 20, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 20, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 0, 6, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 2, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 3, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 1, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 0, 10);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test49()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 2, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 3, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 4, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 4, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 4, 1, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 4, 2, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 5, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 5, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 8, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 2, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 4, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 6, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 9, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 9, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 9, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 10, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 10, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 21, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 18, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 19, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 20, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 11, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 19, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 19, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 19, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 20, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 20, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 6, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 2, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 3, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 2, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 3, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 4, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 4, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 4, 1, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 4, 2, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 5, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 5, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 8, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 2, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 4, 5);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test49() {
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 2, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 3, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 2, 4, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 4, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 4, 1, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 4, 2, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 5, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 5, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 8, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 1, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 2, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 4, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 5, 6, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 9, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 9, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 9, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 10, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 10, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 0, 21, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 18, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 19, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 1, 20, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10, 11, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 19, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 19, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 19, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 20, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 20, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 0, 6, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 2, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 3, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 1, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 2, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 3, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 2, 4, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 4, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 4, 1, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 4, 2, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 5, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 5, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 8, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 1, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 2, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 4, 5);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test50()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 6, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 9, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 9, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 9, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 10, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 10, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 21, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 18, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 19, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 20, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 11, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 19, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 19, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 19, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 20, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 20, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test50() {
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 5, 6, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 9, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 9, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 9, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 10, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 10, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 0, 21, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 18, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 19, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 1, 20, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10, 11, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 19, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 19, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 19, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 20, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 20, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test51()
-{
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 2, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 4, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 5, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 6, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 2, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 3, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 4, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 5, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 1, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 2, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 3, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 4, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 4, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 4, 1, 15);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 4, 2, 15);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 5, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 5, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 9, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 10, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 11, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 4, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 8, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 9, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 10, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 1, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 2, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 4, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 5, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 6, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 9, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 9, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 10, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 19, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 20, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 21, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 9, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 18, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 19, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 20, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 11, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 19, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 19, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 2, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 4, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 5, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 6, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 2, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 3, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 4, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 5, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 1, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 2, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 3, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 4, 17);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test51() {
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 2, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 4, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 5, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 0, 6, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 2, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 3, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 4, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 1, 5, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 1, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 2, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 3, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 2, 4, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 4, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 4, 1, 15);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 4, 2, 15);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 5, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 5, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 9, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 10, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 0, 11, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 4, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 8, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 9, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 1, 10, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 1, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 2, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 4, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 5, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 5, 6, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 9, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 9, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 10, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 19, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 20, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 0, 21, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 9, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 18, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 19, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 1, 20, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 10, 11, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 19, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 19, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 2, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 4, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 5, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 0, 6, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 2, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 3, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 4, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 1, 5, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 1, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 2, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 3, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 2, 4, 17);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test52()
-{
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 4, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 4, 1, 15);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 4, 2, 15);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 5, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 5, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 9, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 10, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 11, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 4, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 8, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 9, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 10, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 1, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 2, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 4, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 5, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 6, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 9, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 9, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 10, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 19, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 20, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 21, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 9, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 18, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 19, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 20, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 11, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 19, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 19, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 4, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 4, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 9, 1, -1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test52() {
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 4, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 4, 1, 15);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 4, 2, 15);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 5, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 5, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 9, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 10, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 0, 11, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 4, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 8, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 9, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 1, 10, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 1, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 2, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 4, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 5, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 5, 6, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 9, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 9, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 10, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 19, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 20, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 0, 21, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 9, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 18, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 19, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 1, 20, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 10, 11, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 19, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 19, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 0, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 1, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 2, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 4, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 4, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 9, 1, -1);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test53()
-{
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 4, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 4, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test53() {
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 0, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 1, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 2, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 4, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 4, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test54()
-{
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 4, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 5, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 6, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 3, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 4, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 5, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 3, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 4, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 4, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 4, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 5, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 11, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 4, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 8, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 4, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 5, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 6, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 9, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 9, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 19, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 20, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 21, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 18, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 19, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 20, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 5, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 11, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 19, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 19, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test54() {
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 4, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 5, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0, 6, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 3, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 4, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 1, 5, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 3, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 2, 4, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 4, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 4, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 5, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0, 11, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 4, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 8, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 1, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 4, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 5, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 5, 6, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 9, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 9, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 19, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 20, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0, 21, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 18, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 19, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 1, 20, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 5, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 10, 11, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 19, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 19, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 21, 0, 0);
+
+  return true;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 bool test55()
-{
-    test_npos(S(""), 0, 0, SV(""), 0, 0);
-    test_npos(S(""), 0, 0, SV("abcde"), 0, -5);
-    test_npos(S("abcde"), 0, 0, SV("abcdefghij"), 0, -10);
-    test_npos(S("abcde"), 0, 0, SV("abcdefghij"), 1, -9);
-    test_npos(S("abcde"), 0, 0, SV("abcdefghij"), 5, -5);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test55() {
+  test_npos(S(""), 0, 0, SV(""), 0, 0);
+  test_npos(S(""), 0, 0, SV("abcde"), 0, -5);
+  test_npos(S("abcde"), 0, 0, SV("abcdefghij"), 0, -10);
+  test_npos(S("abcde"), 0, 0, SV("abcdefghij"), 1, -9);
+  test_npos(S("abcde"), 0, 0, SV("abcdefghij"), 5, -5);
+
+  return true;
 }
 
 template <class S, class SV>
 TEST_CONSTEXPR_CXX20 bool test56() {
-  S s = "MNOP";
-  SV sv = "CDEF";
+  S s        = "MNOP";
+  SV sv      = "CDEF";
   char arr[] = "MNOP";
 
-//  calls compare(pos, n1, const char *, 0)
+  //  calls compare(pos, n1, const char *, 0)
   assert(s.compare(0, 4, "QRST", 0) > 0);
 
-//  calls compare(pos, n1, string("QRST"), 0, npos)
+  //  calls compare(pos, n1, string("QRST"), 0, npos)
   assert(s.compare(0, 4, "QRST", 0, std::string::npos) < 0);
 
-//  calls compare(pos, n1, T, 0, npos)
+  //  calls compare(pos, n1, T, 0, npos)
   assert(s.compare(0, 4, sv, 0) > 0);
 
-//  calls compare(pos, n1, T, 0, npos)
+  //  calls compare(pos, n1, T, 0, npos)
   assert(s.compare(0, 4, sv, 0, std::string::npos) > 0);
 
-// calls compare(pos, n1, const char *, 0)
+  // calls compare(pos, n1, const char *, 0)
   assert(s.compare(0, 4, arr, 0) > 0);
 
-//  calls compare(size, size, string(arr), 0, npos)
+  //  calls compare(size, size, string(arr), 0, npos)
   assert(s.compare(0, 4, arr, 0, std::string::npos) == 0);
 
   return true;
@@ -6100,8 +6037,7 @@ void test() {
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string, std::string_view>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>,

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer.pass.cpp
index 0e0856b4c096c66..46d55ae56bdec95 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer.pass.cpp
@@ -18,347 +18,337 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 int sign(int x)
-{
-    if (x == 0)
-        return 0;
-    if (x < 0)
-        return -1;
-    return 1;
+TEST_CONSTEXPR_CXX20 int sign(int x) {
+  if (x == 0)
+    return 0;
+  if (x < 0)
+    return -1;
+  return 1;
 }
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::size_type pos1, typename S::size_type n1,
-     const typename S::value_type* str, int x)
-{
-    if (pos1 <= s.size())
-        assert(sign(s.compare(pos1, n1, str)) == sign(x));
+test(const S& s, typename S::size_type pos1, typename S::size_type n1, const typename S::value_type* str, int x) {
+  if (pos1 <= s.size())
+    assert(sign(s.compare(pos1, n1, str)) == sign(x));
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            TEST_IGNORE_NODISCARD s.compare(pos1, n1, str);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > s.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      TEST_IGNORE_NODISCARD s.compare(pos1, n1, str);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > s.size());
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), 0, 0, "", 0);
-    test(S(""), 0, 0, "abcde", -5);
-    test(S(""), 0, 0, "abcdefghij", -10);
-    test(S(""), 0, 0, "abcdefghijklmnopqrst", -20);
-    test(S(""), 0, 1, "", 0);
-    test(S(""), 0, 1, "abcde", -5);
-    test(S(""), 0, 1, "abcdefghij", -10);
-    test(S(""), 0, 1, "abcdefghijklmnopqrst", -20);
-    test(S(""), 1, 0, "", 0);
-    test(S(""), 1, 0, "abcde", 0);
-    test(S(""), 1, 0, "abcdefghij", 0);
-    test(S(""), 1, 0, "abcdefghijklmnopqrst", 0);
-    test(S("abcde"), 0, 0, "", 0);
-    test(S("abcde"), 0, 0, "abcde", -5);
-    test(S("abcde"), 0, 0, "abcdefghij", -10);
-    test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcde"), 0, 1, "", 1);
-    test(S("abcde"), 0, 1, "abcde", -4);
-    test(S("abcde"), 0, 1, "abcdefghij", -9);
-    test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", -19);
-    test(S("abcde"), 0, 2, "", 2);
-    test(S("abcde"), 0, 2, "abcde", -3);
-    test(S("abcde"), 0, 2, "abcdefghij", -8);
-    test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", -18);
-    test(S("abcde"), 0, 4, "", 4);
-    test(S("abcde"), 0, 4, "abcde", -1);
-    test(S("abcde"), 0, 4, "abcdefghij", -6);
-    test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", -16);
-    test(S("abcde"), 0, 5, "", 5);
-    test(S("abcde"), 0, 5, "abcde", 0);
-    test(S("abcde"), 0, 5, "abcdefghij", -5);
-    test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", -15);
-    test(S("abcde"), 0, 6, "", 5);
-    test(S("abcde"), 0, 6, "abcde", 0);
-    test(S("abcde"), 0, 6, "abcdefghij", -5);
-    test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", -15);
-    test(S("abcde"), 1, 0, "", 0);
-    test(S("abcde"), 1, 0, "abcde", -5);
-    test(S("abcde"), 1, 0, "abcdefghij", -10);
-    test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcde"), 1, 1, "", 1);
-    test(S("abcde"), 1, 1, "abcde", 1);
-    test(S("abcde"), 1, 1, "abcdefghij", 1);
-    test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 1);
-    test(S("abcde"), 1, 2, "", 2);
-    test(S("abcde"), 1, 2, "abcde", 1);
-    test(S("abcde"), 1, 2, "abcdefghij", 1);
-    test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 1);
-    test(S("abcde"), 1, 3, "", 3);
-    test(S("abcde"), 1, 3, "abcde", 1);
-    test(S("abcde"), 1, 3, "abcdefghij", 1);
-    test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 1);
-    test(S("abcde"), 1, 4, "", 4);
-    test(S("abcde"), 1, 4, "abcde", 1);
-    test(S("abcde"), 1, 4, "abcdefghij", 1);
-    test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 1);
-    test(S("abcde"), 1, 5, "", 4);
-    test(S("abcde"), 1, 5, "abcde", 1);
-    test(S("abcde"), 1, 5, "abcdefghij", 1);
-    test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 1);
-    test(S("abcde"), 2, 0, "", 0);
-    test(S("abcde"), 2, 0, "abcde", -5);
-    test(S("abcde"), 2, 0, "abcdefghij", -10);
-    test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcde"), 2, 1, "", 1);
-    test(S("abcde"), 2, 1, "abcde", 2);
-    test(S("abcde"), 2, 1, "abcdefghij", 2);
-    test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 2);
-    test(S("abcde"), 2, 2, "", 2);
-    test(S("abcde"), 2, 2, "abcde", 2);
-    test(S("abcde"), 2, 2, "abcdefghij", 2);
-    test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 2);
-    test(S("abcde"), 2, 3, "", 3);
-    test(S("abcde"), 2, 3, "abcde", 2);
-    test(S("abcde"), 2, 3, "abcdefghij", 2);
-    test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 2);
-    test(S("abcde"), 2, 4, "", 3);
-    test(S("abcde"), 2, 4, "abcde", 2);
-    test(S("abcde"), 2, 4, "abcdefghij", 2);
-    test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 2);
-    test(S("abcde"), 4, 0, "", 0);
-    test(S("abcde"), 4, 0, "abcde", -5);
-    test(S("abcde"), 4, 0, "abcdefghij", -10);
-    test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcde"), 4, 1, "", 1);
-    test(S("abcde"), 4, 1, "abcde", 4);
-    test(S("abcde"), 4, 1, "abcdefghij", 4);
-    test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 4);
-    test(S("abcde"), 4, 2, "", 1);
-    test(S("abcde"), 4, 2, "abcde", 4);
-    test(S("abcde"), 4, 2, "abcdefghij", 4);
-    test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 4);
-    test(S("abcde"), 5, 0, "", 0);
-    test(S("abcde"), 5, 0, "abcde", -5);
-    test(S("abcde"), 5, 0, "abcdefghij", -10);
-    test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcde"), 5, 1, "", 0);
-    test(S("abcde"), 5, 1, "abcde", -5);
-    test(S("abcde"), 5, 1, "abcdefghij", -10);
-    test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", -20);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), 0, 0, "", 0);
+  test(S(""), 0, 0, "abcde", -5);
+  test(S(""), 0, 0, "abcdefghij", -10);
+  test(S(""), 0, 0, "abcdefghijklmnopqrst", -20);
+  test(S(""), 0, 1, "", 0);
+  test(S(""), 0, 1, "abcde", -5);
+  test(S(""), 0, 1, "abcdefghij", -10);
+  test(S(""), 0, 1, "abcdefghijklmnopqrst", -20);
+  test(S(""), 1, 0, "", 0);
+  test(S(""), 1, 0, "abcde", 0);
+  test(S(""), 1, 0, "abcdefghij", 0);
+  test(S(""), 1, 0, "abcdefghijklmnopqrst", 0);
+  test(S("abcde"), 0, 0, "", 0);
+  test(S("abcde"), 0, 0, "abcde", -5);
+  test(S("abcde"), 0, 0, "abcdefghij", -10);
+  test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcde"), 0, 1, "", 1);
+  test(S("abcde"), 0, 1, "abcde", -4);
+  test(S("abcde"), 0, 1, "abcdefghij", -9);
+  test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", -19);
+  test(S("abcde"), 0, 2, "", 2);
+  test(S("abcde"), 0, 2, "abcde", -3);
+  test(S("abcde"), 0, 2, "abcdefghij", -8);
+  test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", -18);
+  test(S("abcde"), 0, 4, "", 4);
+  test(S("abcde"), 0, 4, "abcde", -1);
+  test(S("abcde"), 0, 4, "abcdefghij", -6);
+  test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", -16);
+  test(S("abcde"), 0, 5, "", 5);
+  test(S("abcde"), 0, 5, "abcde", 0);
+  test(S("abcde"), 0, 5, "abcdefghij", -5);
+  test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", -15);
+  test(S("abcde"), 0, 6, "", 5);
+  test(S("abcde"), 0, 6, "abcde", 0);
+  test(S("abcde"), 0, 6, "abcdefghij", -5);
+  test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", -15);
+  test(S("abcde"), 1, 0, "", 0);
+  test(S("abcde"), 1, 0, "abcde", -5);
+  test(S("abcde"), 1, 0, "abcdefghij", -10);
+  test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcde"), 1, 1, "", 1);
+  test(S("abcde"), 1, 1, "abcde", 1);
+  test(S("abcde"), 1, 1, "abcdefghij", 1);
+  test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 1);
+  test(S("abcde"), 1, 2, "", 2);
+  test(S("abcde"), 1, 2, "abcde", 1);
+  test(S("abcde"), 1, 2, "abcdefghij", 1);
+  test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 1);
+  test(S("abcde"), 1, 3, "", 3);
+  test(S("abcde"), 1, 3, "abcde", 1);
+  test(S("abcde"), 1, 3, "abcdefghij", 1);
+  test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 1);
+  test(S("abcde"), 1, 4, "", 4);
+  test(S("abcde"), 1, 4, "abcde", 1);
+  test(S("abcde"), 1, 4, "abcdefghij", 1);
+  test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 1);
+  test(S("abcde"), 1, 5, "", 4);
+  test(S("abcde"), 1, 5, "abcde", 1);
+  test(S("abcde"), 1, 5, "abcdefghij", 1);
+  test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 1);
+  test(S("abcde"), 2, 0, "", 0);
+  test(S("abcde"), 2, 0, "abcde", -5);
+  test(S("abcde"), 2, 0, "abcdefghij", -10);
+  test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcde"), 2, 1, "", 1);
+  test(S("abcde"), 2, 1, "abcde", 2);
+  test(S("abcde"), 2, 1, "abcdefghij", 2);
+  test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 2);
+  test(S("abcde"), 2, 2, "", 2);
+  test(S("abcde"), 2, 2, "abcde", 2);
+  test(S("abcde"), 2, 2, "abcdefghij", 2);
+  test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 2);
+  test(S("abcde"), 2, 3, "", 3);
+  test(S("abcde"), 2, 3, "abcde", 2);
+  test(S("abcde"), 2, 3, "abcdefghij", 2);
+  test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 2);
+  test(S("abcde"), 2, 4, "", 3);
+  test(S("abcde"), 2, 4, "abcde", 2);
+  test(S("abcde"), 2, 4, "abcdefghij", 2);
+  test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 2);
+  test(S("abcde"), 4, 0, "", 0);
+  test(S("abcde"), 4, 0, "abcde", -5);
+  test(S("abcde"), 4, 0, "abcdefghij", -10);
+  test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcde"), 4, 1, "", 1);
+  test(S("abcde"), 4, 1, "abcde", 4);
+  test(S("abcde"), 4, 1, "abcdefghij", 4);
+  test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 4);
+  test(S("abcde"), 4, 2, "", 1);
+  test(S("abcde"), 4, 2, "abcde", 4);
+  test(S("abcde"), 4, 2, "abcdefghij", 4);
+  test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 4);
+  test(S("abcde"), 5, 0, "", 0);
+  test(S("abcde"), 5, 0, "abcde", -5);
+  test(S("abcde"), 5, 0, "abcdefghij", -10);
+  test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcde"), 5, 1, "", 0);
+  test(S("abcde"), 5, 1, "abcde", -5);
+  test(S("abcde"), 5, 1, "abcdefghij", -10);
+  test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", -20);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S("abcde"), 6, 0, "", 0);
-    test(S("abcde"), 6, 0, "abcde", 0);
-    test(S("abcde"), 6, 0, "abcdefghij", 0);
-    test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 0);
-    test(S("abcdefghij"), 0, 0, "", 0);
-    test(S("abcdefghij"), 0, 0, "abcde", -5);
-    test(S("abcdefghij"), 0, 0, "abcdefghij", -10);
-    test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcdefghij"), 0, 1, "", 1);
-    test(S("abcdefghij"), 0, 1, "abcde", -4);
-    test(S("abcdefghij"), 0, 1, "abcdefghij", -9);
-    test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", -19);
-    test(S("abcdefghij"), 0, 5, "", 5);
-    test(S("abcdefghij"), 0, 5, "abcde", 0);
-    test(S("abcdefghij"), 0, 5, "abcdefghij", -5);
-    test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", -15);
-    test(S("abcdefghij"), 0, 9, "", 9);
-    test(S("abcdefghij"), 0, 9, "abcde", 4);
-    test(S("abcdefghij"), 0, 9, "abcdefghij", -1);
-    test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", -11);
-    test(S("abcdefghij"), 0, 10, "", 10);
-    test(S("abcdefghij"), 0, 10, "abcde", 5);
-    test(S("abcdefghij"), 0, 10, "abcdefghij", 0);
-    test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", -10);
-    test(S("abcdefghij"), 0, 11, "", 10);
-    test(S("abcdefghij"), 0, 11, "abcde", 5);
-    test(S("abcdefghij"), 0, 11, "abcdefghij", 0);
-    test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", -10);
-    test(S("abcdefghij"), 1, 0, "", 0);
-    test(S("abcdefghij"), 1, 0, "abcde", -5);
-    test(S("abcdefghij"), 1, 0, "abcdefghij", -10);
-    test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcdefghij"), 1, 1, "", 1);
-    test(S("abcdefghij"), 1, 1, "abcde", 1);
-    test(S("abcdefghij"), 1, 1, "abcdefghij", 1);
-    test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 1);
-    test(S("abcdefghij"), 1, 4, "", 4);
-    test(S("abcdefghij"), 1, 4, "abcde", 1);
-    test(S("abcdefghij"), 1, 4, "abcdefghij", 1);
-    test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 1);
-    test(S("abcdefghij"), 1, 8, "", 8);
-    test(S("abcdefghij"), 1, 8, "abcde", 1);
-    test(S("abcdefghij"), 1, 8, "abcdefghij", 1);
-    test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 1);
-    test(S("abcdefghij"), 1, 9, "", 9);
-    test(S("abcdefghij"), 1, 9, "abcde", 1);
-    test(S("abcdefghij"), 1, 9, "abcdefghij", 1);
-    test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 1);
-    test(S("abcdefghij"), 1, 10, "", 9);
-    test(S("abcdefghij"), 1, 10, "abcde", 1);
-    test(S("abcdefghij"), 1, 10, "abcdefghij", 1);
-    test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 1);
-    test(S("abcdefghij"), 5, 0, "", 0);
-    test(S("abcdefghij"), 5, 0, "abcde", -5);
-    test(S("abcdefghij"), 5, 0, "abcdefghij", -10);
-    test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcdefghij"), 5, 1, "", 1);
-    test(S("abcdefghij"), 5, 1, "abcde", 5);
-    test(S("abcdefghij"), 5, 1, "abcdefghij", 5);
-    test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 5);
-    test(S("abcdefghij"), 5, 2, "", 2);
-    test(S("abcdefghij"), 5, 2, "abcde", 5);
-    test(S("abcdefghij"), 5, 2, "abcdefghij", 5);
-    test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 5);
-    test(S("abcdefghij"), 5, 4, "", 4);
-    test(S("abcdefghij"), 5, 4, "abcde", 5);
-    test(S("abcdefghij"), 5, 4, "abcdefghij", 5);
-    test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 5);
-    test(S("abcdefghij"), 5, 5, "", 5);
-    test(S("abcdefghij"), 5, 5, "abcde", 5);
-    test(S("abcdefghij"), 5, 5, "abcdefghij", 5);
-    test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 5);
-    test(S("abcdefghij"), 5, 6, "", 5);
-    test(S("abcdefghij"), 5, 6, "abcde", 5);
-    test(S("abcdefghij"), 5, 6, "abcdefghij", 5);
-    test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 5);
-    test(S("abcdefghij"), 9, 0, "", 0);
-    test(S("abcdefghij"), 9, 0, "abcde", -5);
-    test(S("abcdefghij"), 9, 0, "abcdefghij", -10);
-    test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcdefghij"), 9, 1, "", 1);
-    test(S("abcdefghij"), 9, 1, "abcde", 9);
-    test(S("abcdefghij"), 9, 1, "abcdefghij", 9);
-    test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 9);
-    test(S("abcdefghij"), 9, 2, "", 1);
-    test(S("abcdefghij"), 9, 2, "abcde", 9);
-    test(S("abcdefghij"), 9, 2, "abcdefghij", 9);
-    test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 9);
-    test(S("abcdefghij"), 10, 0, "", 0);
-    test(S("abcdefghij"), 10, 0, "abcde", -5);
-    test(S("abcdefghij"), 10, 0, "abcdefghij", -10);
-    test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcdefghij"), 10, 1, "", 0);
-    test(S("abcdefghij"), 10, 1, "abcde", -5);
-    test(S("abcdefghij"), 10, 1, "abcdefghij", -10);
-    test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", -20);
-    test(S("abcdefghij"), 11, 0, "", 0);
-    test(S("abcdefghij"), 11, 0, "abcde", 0);
-    test(S("abcdefghij"), 11, 0, "abcdefghij", 0);
-    test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 0);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S("abcde"), 6, 0, "", 0);
+  test(S("abcde"), 6, 0, "abcde", 0);
+  test(S("abcde"), 6, 0, "abcdefghij", 0);
+  test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 0);
+  test(S("abcdefghij"), 0, 0, "", 0);
+  test(S("abcdefghij"), 0, 0, "abcde", -5);
+  test(S("abcdefghij"), 0, 0, "abcdefghij", -10);
+  test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcdefghij"), 0, 1, "", 1);
+  test(S("abcdefghij"), 0, 1, "abcde", -4);
+  test(S("abcdefghij"), 0, 1, "abcdefghij", -9);
+  test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", -19);
+  test(S("abcdefghij"), 0, 5, "", 5);
+  test(S("abcdefghij"), 0, 5, "abcde", 0);
+  test(S("abcdefghij"), 0, 5, "abcdefghij", -5);
+  test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", -15);
+  test(S("abcdefghij"), 0, 9, "", 9);
+  test(S("abcdefghij"), 0, 9, "abcde", 4);
+  test(S("abcdefghij"), 0, 9, "abcdefghij", -1);
+  test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", -11);
+  test(S("abcdefghij"), 0, 10, "", 10);
+  test(S("abcdefghij"), 0, 10, "abcde", 5);
+  test(S("abcdefghij"), 0, 10, "abcdefghij", 0);
+  test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", -10);
+  test(S("abcdefghij"), 0, 11, "", 10);
+  test(S("abcdefghij"), 0, 11, "abcde", 5);
+  test(S("abcdefghij"), 0, 11, "abcdefghij", 0);
+  test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", -10);
+  test(S("abcdefghij"), 1, 0, "", 0);
+  test(S("abcdefghij"), 1, 0, "abcde", -5);
+  test(S("abcdefghij"), 1, 0, "abcdefghij", -10);
+  test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcdefghij"), 1, 1, "", 1);
+  test(S("abcdefghij"), 1, 1, "abcde", 1);
+  test(S("abcdefghij"), 1, 1, "abcdefghij", 1);
+  test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 1);
+  test(S("abcdefghij"), 1, 4, "", 4);
+  test(S("abcdefghij"), 1, 4, "abcde", 1);
+  test(S("abcdefghij"), 1, 4, "abcdefghij", 1);
+  test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 1);
+  test(S("abcdefghij"), 1, 8, "", 8);
+  test(S("abcdefghij"), 1, 8, "abcde", 1);
+  test(S("abcdefghij"), 1, 8, "abcdefghij", 1);
+  test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 1);
+  test(S("abcdefghij"), 1, 9, "", 9);
+  test(S("abcdefghij"), 1, 9, "abcde", 1);
+  test(S("abcdefghij"), 1, 9, "abcdefghij", 1);
+  test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 1);
+  test(S("abcdefghij"), 1, 10, "", 9);
+  test(S("abcdefghij"), 1, 10, "abcde", 1);
+  test(S("abcdefghij"), 1, 10, "abcdefghij", 1);
+  test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 1);
+  test(S("abcdefghij"), 5, 0, "", 0);
+  test(S("abcdefghij"), 5, 0, "abcde", -5);
+  test(S("abcdefghij"), 5, 0, "abcdefghij", -10);
+  test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcdefghij"), 5, 1, "", 1);
+  test(S("abcdefghij"), 5, 1, "abcde", 5);
+  test(S("abcdefghij"), 5, 1, "abcdefghij", 5);
+  test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 5);
+  test(S("abcdefghij"), 5, 2, "", 2);
+  test(S("abcdefghij"), 5, 2, "abcde", 5);
+  test(S("abcdefghij"), 5, 2, "abcdefghij", 5);
+  test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 5);
+  test(S("abcdefghij"), 5, 4, "", 4);
+  test(S("abcdefghij"), 5, 4, "abcde", 5);
+  test(S("abcdefghij"), 5, 4, "abcdefghij", 5);
+  test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 5);
+  test(S("abcdefghij"), 5, 5, "", 5);
+  test(S("abcdefghij"), 5, 5, "abcde", 5);
+  test(S("abcdefghij"), 5, 5, "abcdefghij", 5);
+  test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 5);
+  test(S("abcdefghij"), 5, 6, "", 5);
+  test(S("abcdefghij"), 5, 6, "abcde", 5);
+  test(S("abcdefghij"), 5, 6, "abcdefghij", 5);
+  test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 5);
+  test(S("abcdefghij"), 9, 0, "", 0);
+  test(S("abcdefghij"), 9, 0, "abcde", -5);
+  test(S("abcdefghij"), 9, 0, "abcdefghij", -10);
+  test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcdefghij"), 9, 1, "", 1);
+  test(S("abcdefghij"), 9, 1, "abcde", 9);
+  test(S("abcdefghij"), 9, 1, "abcdefghij", 9);
+  test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 9);
+  test(S("abcdefghij"), 9, 2, "", 1);
+  test(S("abcdefghij"), 9, 2, "abcde", 9);
+  test(S("abcdefghij"), 9, 2, "abcdefghij", 9);
+  test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 9);
+  test(S("abcdefghij"), 10, 0, "", 0);
+  test(S("abcdefghij"), 10, 0, "abcde", -5);
+  test(S("abcdefghij"), 10, 0, "abcdefghij", -10);
+  test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcdefghij"), 10, 1, "", 0);
+  test(S("abcdefghij"), 10, 1, "abcde", -5);
+  test(S("abcdefghij"), 10, 1, "abcdefghij", -10);
+  test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", -20);
+  test(S("abcdefghij"), 11, 0, "", 0);
+  test(S("abcdefghij"), 11, 0, "abcde", 0);
+  test(S("abcdefghij"), 11, 0, "abcdefghij", 0);
+  test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 0);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test2()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, "", 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "", 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", -19);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "", 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "", 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 14);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "", 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 15);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "", 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 15);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "", 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "", 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "", 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "", 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "", 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "", 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "", 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "", 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "", 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "", 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "", 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "", 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 19);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "", 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", -20);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "", 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", -20);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "", 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 0);
+TEST_CONSTEXPR_CXX20 void test2() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, "", 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "", 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", -19);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "", 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "", 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 14);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "", 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 15);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "", 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 15);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "", 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "", 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "", 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "", 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "", 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "", 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "", 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "", 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "", 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "", 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "", 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "", 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 19);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "", 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", -20);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "", 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", -20);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "", 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -380,8 +370,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer_size.pass.cpp
index 5bc00fd1ac5e067..aba230d92e18248 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_pointer_size.pass.cpp
@@ -18,1304 +18,1290 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 int sign(int x)
-{
-    if (x == 0)
-        return 0;
-    if (x < 0)
-        return -1;
-    return 1;
+TEST_CONSTEXPR_CXX20 int sign(int x) {
+  if (x == 0)
+    return 0;
+  if (x < 0)
+    return -1;
+  return 1;
 }
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(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())
-        assert(sign(s.compare(pos, n1, str, n2)) == sign(x));
+test(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())
+    assert(sign(s.compare(pos, n1, str, n2)) == sign(x));
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            TEST_IGNORE_NODISCARD s.compare(pos, n1, str, n2);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > s.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      TEST_IGNORE_NODISCARD s.compare(pos, n1, str, n2);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > s.size());
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, "", 0, 0);
-    test(S(""), 0, 0, "abcde", 0, 0);
-    test(S(""), 0, 0, "abcde", 1, -1);
-    test(S(""), 0, 0, "abcde", 2, -2);
-    test(S(""), 0, 0, "abcde", 4, -4);
-    test(S(""), 0, 0, "abcde", 5, -5);
-    test(S(""), 0, 0, "abcdefghij", 0, 0);
-    test(S(""), 0, 0, "abcdefghij", 1, -1);
-    test(S(""), 0, 0, "abcdefghij", 5, -5);
-    test(S(""), 0, 0, "abcdefghij", 9, -9);
-    test(S(""), 0, 0, "abcdefghij", 10, -10);
-    test(S(""), 0, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S(""), 0, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S(""), 0, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S(""), 0, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S(""), 0, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S(""), 0, 1, "", 0, 0);
-    test(S(""), 0, 1, "abcde", 0, 0);
-    test(S(""), 0, 1, "abcde", 1, -1);
-    test(S(""), 0, 1, "abcde", 2, -2);
-    test(S(""), 0, 1, "abcde", 4, -4);
-    test(S(""), 0, 1, "abcde", 5, -5);
-    test(S(""), 0, 1, "abcdefghij", 0, 0);
-    test(S(""), 0, 1, "abcdefghij", 1, -1);
-    test(S(""), 0, 1, "abcdefghij", 5, -5);
-    test(S(""), 0, 1, "abcdefghij", 9, -9);
-    test(S(""), 0, 1, "abcdefghij", 10, -10);
-    test(S(""), 0, 1, "abcdefghijklmnopqrst", 0, 0);
-    test(S(""), 0, 1, "abcdefghijklmnopqrst", 1, -1);
-    test(S(""), 0, 1, "abcdefghijklmnopqrst", 10, -10);
-    test(S(""), 0, 1, "abcdefghijklmnopqrst", 19, -19);
-    test(S(""), 0, 1, "abcdefghijklmnopqrst", 20, -20);
-    test(S(""), 1, 0, "", 0, 0);
-    test(S(""), 1, 0, "abcde", 0, 0);
-    test(S(""), 1, 0, "abcde", 1, 0);
-    test(S(""), 1, 0, "abcde", 2, 0);
-    test(S(""), 1, 0, "abcde", 4, 0);
-    test(S(""), 1, 0, "abcde", 5, 0);
-    test(S(""), 1, 0, "abcdefghij", 0, 0);
-    test(S(""), 1, 0, "abcdefghij", 1, 0);
-    test(S(""), 1, 0, "abcdefghij", 5, 0);
-    test(S(""), 1, 0, "abcdefghij", 9, 0);
-    test(S(""), 1, 0, "abcdefghij", 10, 0);
-    test(S(""), 1, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S(""), 1, 0, "abcdefghijklmnopqrst", 1, 0);
-    test(S(""), 1, 0, "abcdefghijklmnopqrst", 10, 0);
-    test(S(""), 1, 0, "abcdefghijklmnopqrst", 19, 0);
-    test(S(""), 1, 0, "abcdefghijklmnopqrst", 20, 0);
-    test(S("abcde"), 0, 0, "", 0, 0);
-    test(S("abcde"), 0, 0, "abcde", 0, 0);
-    test(S("abcde"), 0, 0, "abcde", 1, -1);
-    test(S("abcde"), 0, 0, "abcde", 2, -2);
-    test(S("abcde"), 0, 0, "abcde", 4, -4);
-    test(S("abcde"), 0, 0, "abcde", 5, -5);
-    test(S("abcde"), 0, 0, "abcdefghij", 0, 0);
-    test(S("abcde"), 0, 0, "abcdefghij", 1, -1);
-    test(S("abcde"), 0, 0, "abcdefghij", 5, -5);
-    test(S("abcde"), 0, 0, "abcdefghij", 9, -9);
-    test(S("abcde"), 0, 0, "abcdefghij", 10, -10);
-    test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcde"), 0, 1, "", 0, 1);
-    test(S("abcde"), 0, 1, "abcde", 0, 1);
-    test(S("abcde"), 0, 1, "abcde", 1, 0);
-    test(S("abcde"), 0, 1, "abcde", 2, -1);
-    test(S("abcde"), 0, 1, "abcde", 4, -3);
-    test(S("abcde"), 0, 1, "abcde", 5, -4);
-    test(S("abcde"), 0, 1, "abcdefghij", 0, 1);
-    test(S("abcde"), 0, 1, "abcdefghij", 1, 0);
-    test(S("abcde"), 0, 1, "abcdefghij", 5, -4);
-    test(S("abcde"), 0, 1, "abcdefghij", 9, -8);
-    test(S("abcde"), 0, 1, "abcdefghij", 10, -9);
-    test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 1, 0);
-    test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 10, -9);
-    test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 19, -18);
-    test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 20, -19);
-    test(S("abcde"), 0, 2, "", 0, 2);
-    test(S("abcde"), 0, 2, "abcde", 0, 2);
-    test(S("abcde"), 0, 2, "abcde", 1, 1);
-    test(S("abcde"), 0, 2, "abcde", 2, 0);
-    test(S("abcde"), 0, 2, "abcde", 4, -2);
-    test(S("abcde"), 0, 2, "abcde", 5, -3);
-    test(S("abcde"), 0, 2, "abcdefghij", 0, 2);
-    test(S("abcde"), 0, 2, "abcdefghij", 1, 1);
-    test(S("abcde"), 0, 2, "abcdefghij", 5, -3);
-    test(S("abcde"), 0, 2, "abcdefghij", 9, -7);
-    test(S("abcde"), 0, 2, "abcdefghij", 10, -8);
-    test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 0, 2);
-    test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 10, -8);
-    test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 19, -17);
-    test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 20, -18);
-    test(S("abcde"), 0, 4, "", 0, 4);
-    test(S("abcde"), 0, 4, "abcde", 0, 4);
-    test(S("abcde"), 0, 4, "abcde", 1, 3);
-    test(S("abcde"), 0, 4, "abcde", 2, 2);
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, "", 0, 0);
+  test(S(""), 0, 0, "abcde", 0, 0);
+  test(S(""), 0, 0, "abcde", 1, -1);
+  test(S(""), 0, 0, "abcde", 2, -2);
+  test(S(""), 0, 0, "abcde", 4, -4);
+  test(S(""), 0, 0, "abcde", 5, -5);
+  test(S(""), 0, 0, "abcdefghij", 0, 0);
+  test(S(""), 0, 0, "abcdefghij", 1, -1);
+  test(S(""), 0, 0, "abcdefghij", 5, -5);
+  test(S(""), 0, 0, "abcdefghij", 9, -9);
+  test(S(""), 0, 0, "abcdefghij", 10, -10);
+  test(S(""), 0, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S(""), 0, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S(""), 0, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S(""), 0, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S(""), 0, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S(""), 0, 1, "", 0, 0);
+  test(S(""), 0, 1, "abcde", 0, 0);
+  test(S(""), 0, 1, "abcde", 1, -1);
+  test(S(""), 0, 1, "abcde", 2, -2);
+  test(S(""), 0, 1, "abcde", 4, -4);
+  test(S(""), 0, 1, "abcde", 5, -5);
+  test(S(""), 0, 1, "abcdefghij", 0, 0);
+  test(S(""), 0, 1, "abcdefghij", 1, -1);
+  test(S(""), 0, 1, "abcdefghij", 5, -5);
+  test(S(""), 0, 1, "abcdefghij", 9, -9);
+  test(S(""), 0, 1, "abcdefghij", 10, -10);
+  test(S(""), 0, 1, "abcdefghijklmnopqrst", 0, 0);
+  test(S(""), 0, 1, "abcdefghijklmnopqrst", 1, -1);
+  test(S(""), 0, 1, "abcdefghijklmnopqrst", 10, -10);
+  test(S(""), 0, 1, "abcdefghijklmnopqrst", 19, -19);
+  test(S(""), 0, 1, "abcdefghijklmnopqrst", 20, -20);
+  test(S(""), 1, 0, "", 0, 0);
+  test(S(""), 1, 0, "abcde", 0, 0);
+  test(S(""), 1, 0, "abcde", 1, 0);
+  test(S(""), 1, 0, "abcde", 2, 0);
+  test(S(""), 1, 0, "abcde", 4, 0);
+  test(S(""), 1, 0, "abcde", 5, 0);
+  test(S(""), 1, 0, "abcdefghij", 0, 0);
+  test(S(""), 1, 0, "abcdefghij", 1, 0);
+  test(S(""), 1, 0, "abcdefghij", 5, 0);
+  test(S(""), 1, 0, "abcdefghij", 9, 0);
+  test(S(""), 1, 0, "abcdefghij", 10, 0);
+  test(S(""), 1, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S(""), 1, 0, "abcdefghijklmnopqrst", 1, 0);
+  test(S(""), 1, 0, "abcdefghijklmnopqrst", 10, 0);
+  test(S(""), 1, 0, "abcdefghijklmnopqrst", 19, 0);
+  test(S(""), 1, 0, "abcdefghijklmnopqrst", 20, 0);
+  test(S("abcde"), 0, 0, "", 0, 0);
+  test(S("abcde"), 0, 0, "abcde", 0, 0);
+  test(S("abcde"), 0, 0, "abcde", 1, -1);
+  test(S("abcde"), 0, 0, "abcde", 2, -2);
+  test(S("abcde"), 0, 0, "abcde", 4, -4);
+  test(S("abcde"), 0, 0, "abcde", 5, -5);
+  test(S("abcde"), 0, 0, "abcdefghij", 0, 0);
+  test(S("abcde"), 0, 0, "abcdefghij", 1, -1);
+  test(S("abcde"), 0, 0, "abcdefghij", 5, -5);
+  test(S("abcde"), 0, 0, "abcdefghij", 9, -9);
+  test(S("abcde"), 0, 0, "abcdefghij", 10, -10);
+  test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcde"), 0, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcde"), 0, 1, "", 0, 1);
+  test(S("abcde"), 0, 1, "abcde", 0, 1);
+  test(S("abcde"), 0, 1, "abcde", 1, 0);
+  test(S("abcde"), 0, 1, "abcde", 2, -1);
+  test(S("abcde"), 0, 1, "abcde", 4, -3);
+  test(S("abcde"), 0, 1, "abcde", 5, -4);
+  test(S("abcde"), 0, 1, "abcdefghij", 0, 1);
+  test(S("abcde"), 0, 1, "abcdefghij", 1, 0);
+  test(S("abcde"), 0, 1, "abcdefghij", 5, -4);
+  test(S("abcde"), 0, 1, "abcdefghij", 9, -8);
+  test(S("abcde"), 0, 1, "abcdefghij", 10, -9);
+  test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 1, 0);
+  test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 10, -9);
+  test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 19, -18);
+  test(S("abcde"), 0, 1, "abcdefghijklmnopqrst", 20, -19);
+  test(S("abcde"), 0, 2, "", 0, 2);
+  test(S("abcde"), 0, 2, "abcde", 0, 2);
+  test(S("abcde"), 0, 2, "abcde", 1, 1);
+  test(S("abcde"), 0, 2, "abcde", 2, 0);
+  test(S("abcde"), 0, 2, "abcde", 4, -2);
+  test(S("abcde"), 0, 2, "abcde", 5, -3);
+  test(S("abcde"), 0, 2, "abcdefghij", 0, 2);
+  test(S("abcde"), 0, 2, "abcdefghij", 1, 1);
+  test(S("abcde"), 0, 2, "abcdefghij", 5, -3);
+  test(S("abcde"), 0, 2, "abcdefghij", 9, -7);
+  test(S("abcde"), 0, 2, "abcdefghij", 10, -8);
+  test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 0, 2);
+  test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 10, -8);
+  test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 19, -17);
+  test(S("abcde"), 0, 2, "abcdefghijklmnopqrst", 20, -18);
+  test(S("abcde"), 0, 4, "", 0, 4);
+  test(S("abcde"), 0, 4, "abcde", 0, 4);
+  test(S("abcde"), 0, 4, "abcde", 1, 3);
+  test(S("abcde"), 0, 4, "abcde", 2, 2);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S("abcde"), 0, 4, "abcde", 4, 0);
-    test(S("abcde"), 0, 4, "abcde", 5, -1);
-    test(S("abcde"), 0, 4, "abcdefghij", 0, 4);
-    test(S("abcde"), 0, 4, "abcdefghij", 1, 3);
-    test(S("abcde"), 0, 4, "abcdefghij", 5, -1);
-    test(S("abcde"), 0, 4, "abcdefghij", 9, -5);
-    test(S("abcde"), 0, 4, "abcdefghij", 10, -6);
-    test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 0, 4);
-    test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 1, 3);
-    test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 10, -6);
-    test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 19, -15);
-    test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 20, -16);
-    test(S("abcde"), 0, 5, "", 0, 5);
-    test(S("abcde"), 0, 5, "abcde", 0, 5);
-    test(S("abcde"), 0, 5, "abcde", 1, 4);
-    test(S("abcde"), 0, 5, "abcde", 2, 3);
-    test(S("abcde"), 0, 5, "abcde", 4, 1);
-    test(S("abcde"), 0, 5, "abcde", 5, 0);
-    test(S("abcde"), 0, 5, "abcdefghij", 0, 5);
-    test(S("abcde"), 0, 5, "abcdefghij", 1, 4);
-    test(S("abcde"), 0, 5, "abcdefghij", 5, 0);
-    test(S("abcde"), 0, 5, "abcdefghij", 9, -4);
-    test(S("abcde"), 0, 5, "abcdefghij", 10, -5);
-    test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 0, 5);
-    test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 1, 4);
-    test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 10, -5);
-    test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 19, -14);
-    test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 20, -15);
-    test(S("abcde"), 0, 6, "", 0, 5);
-    test(S("abcde"), 0, 6, "abcde", 0, 5);
-    test(S("abcde"), 0, 6, "abcde", 1, 4);
-    test(S("abcde"), 0, 6, "abcde", 2, 3);
-    test(S("abcde"), 0, 6, "abcde", 4, 1);
-    test(S("abcde"), 0, 6, "abcde", 5, 0);
-    test(S("abcde"), 0, 6, "abcdefghij", 0, 5);
-    test(S("abcde"), 0, 6, "abcdefghij", 1, 4);
-    test(S("abcde"), 0, 6, "abcdefghij", 5, 0);
-    test(S("abcde"), 0, 6, "abcdefghij", 9, -4);
-    test(S("abcde"), 0, 6, "abcdefghij", 10, -5);
-    test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 0, 5);
-    test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 1, 4);
-    test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 10, -5);
-    test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 19, -14);
-    test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 20, -15);
-    test(S("abcde"), 1, 0, "", 0, 0);
-    test(S("abcde"), 1, 0, "abcde", 0, 0);
-    test(S("abcde"), 1, 0, "abcde", 1, -1);
-    test(S("abcde"), 1, 0, "abcde", 2, -2);
-    test(S("abcde"), 1, 0, "abcde", 4, -4);
-    test(S("abcde"), 1, 0, "abcde", 5, -5);
-    test(S("abcde"), 1, 0, "abcdefghij", 0, 0);
-    test(S("abcde"), 1, 0, "abcdefghij", 1, -1);
-    test(S("abcde"), 1, 0, "abcdefghij", 5, -5);
-    test(S("abcde"), 1, 0, "abcdefghij", 9, -9);
-    test(S("abcde"), 1, 0, "abcdefghij", 10, -10);
-    test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcde"), 1, 1, "", 0, 1);
-    test(S("abcde"), 1, 1, "abcde", 0, 1);
-    test(S("abcde"), 1, 1, "abcde", 1, 1);
-    test(S("abcde"), 1, 1, "abcde", 2, 1);
-    test(S("abcde"), 1, 1, "abcde", 4, 1);
-    test(S("abcde"), 1, 1, "abcde", 5, 1);
-    test(S("abcde"), 1, 1, "abcdefghij", 0, 1);
-    test(S("abcde"), 1, 1, "abcdefghij", 1, 1);
-    test(S("abcde"), 1, 1, "abcdefghij", 5, 1);
-    test(S("abcde"), 1, 1, "abcdefghij", 9, 1);
-    test(S("abcde"), 1, 1, "abcdefghij", 10, 1);
-    test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcde"), 1, 2, "", 0, 2);
-    test(S("abcde"), 1, 2, "abcde", 0, 2);
-    test(S("abcde"), 1, 2, "abcde", 1, 1);
-    test(S("abcde"), 1, 2, "abcde", 2, 1);
-    test(S("abcde"), 1, 2, "abcde", 4, 1);
-    test(S("abcde"), 1, 2, "abcde", 5, 1);
-    test(S("abcde"), 1, 2, "abcdefghij", 0, 2);
-    test(S("abcde"), 1, 2, "abcdefghij", 1, 1);
-    test(S("abcde"), 1, 2, "abcdefghij", 5, 1);
-    test(S("abcde"), 1, 2, "abcdefghij", 9, 1);
-    test(S("abcde"), 1, 2, "abcdefghij", 10, 1);
-    test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 0, 2);
-    test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcde"), 1, 3, "", 0, 3);
-    test(S("abcde"), 1, 3, "abcde", 0, 3);
-    test(S("abcde"), 1, 3, "abcde", 1, 1);
-    test(S("abcde"), 1, 3, "abcde", 2, 1);
-    test(S("abcde"), 1, 3, "abcde", 4, 1);
-    test(S("abcde"), 1, 3, "abcde", 5, 1);
-    test(S("abcde"), 1, 3, "abcdefghij", 0, 3);
-    test(S("abcde"), 1, 3, "abcdefghij", 1, 1);
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S("abcde"), 0, 4, "abcde", 4, 0);
+  test(S("abcde"), 0, 4, "abcde", 5, -1);
+  test(S("abcde"), 0, 4, "abcdefghij", 0, 4);
+  test(S("abcde"), 0, 4, "abcdefghij", 1, 3);
+  test(S("abcde"), 0, 4, "abcdefghij", 5, -1);
+  test(S("abcde"), 0, 4, "abcdefghij", 9, -5);
+  test(S("abcde"), 0, 4, "abcdefghij", 10, -6);
+  test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 0, 4);
+  test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 1, 3);
+  test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 10, -6);
+  test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 19, -15);
+  test(S("abcde"), 0, 4, "abcdefghijklmnopqrst", 20, -16);
+  test(S("abcde"), 0, 5, "", 0, 5);
+  test(S("abcde"), 0, 5, "abcde", 0, 5);
+  test(S("abcde"), 0, 5, "abcde", 1, 4);
+  test(S("abcde"), 0, 5, "abcde", 2, 3);
+  test(S("abcde"), 0, 5, "abcde", 4, 1);
+  test(S("abcde"), 0, 5, "abcde", 5, 0);
+  test(S("abcde"), 0, 5, "abcdefghij", 0, 5);
+  test(S("abcde"), 0, 5, "abcdefghij", 1, 4);
+  test(S("abcde"), 0, 5, "abcdefghij", 5, 0);
+  test(S("abcde"), 0, 5, "abcdefghij", 9, -4);
+  test(S("abcde"), 0, 5, "abcdefghij", 10, -5);
+  test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 0, 5);
+  test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 1, 4);
+  test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 10, -5);
+  test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 19, -14);
+  test(S("abcde"), 0, 5, "abcdefghijklmnopqrst", 20, -15);
+  test(S("abcde"), 0, 6, "", 0, 5);
+  test(S("abcde"), 0, 6, "abcde", 0, 5);
+  test(S("abcde"), 0, 6, "abcde", 1, 4);
+  test(S("abcde"), 0, 6, "abcde", 2, 3);
+  test(S("abcde"), 0, 6, "abcde", 4, 1);
+  test(S("abcde"), 0, 6, "abcde", 5, 0);
+  test(S("abcde"), 0, 6, "abcdefghij", 0, 5);
+  test(S("abcde"), 0, 6, "abcdefghij", 1, 4);
+  test(S("abcde"), 0, 6, "abcdefghij", 5, 0);
+  test(S("abcde"), 0, 6, "abcdefghij", 9, -4);
+  test(S("abcde"), 0, 6, "abcdefghij", 10, -5);
+  test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 0, 5);
+  test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 1, 4);
+  test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 10, -5);
+  test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 19, -14);
+  test(S("abcde"), 0, 6, "abcdefghijklmnopqrst", 20, -15);
+  test(S("abcde"), 1, 0, "", 0, 0);
+  test(S("abcde"), 1, 0, "abcde", 0, 0);
+  test(S("abcde"), 1, 0, "abcde", 1, -1);
+  test(S("abcde"), 1, 0, "abcde", 2, -2);
+  test(S("abcde"), 1, 0, "abcde", 4, -4);
+  test(S("abcde"), 1, 0, "abcde", 5, -5);
+  test(S("abcde"), 1, 0, "abcdefghij", 0, 0);
+  test(S("abcde"), 1, 0, "abcdefghij", 1, -1);
+  test(S("abcde"), 1, 0, "abcdefghij", 5, -5);
+  test(S("abcde"), 1, 0, "abcdefghij", 9, -9);
+  test(S("abcde"), 1, 0, "abcdefghij", 10, -10);
+  test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcde"), 1, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcde"), 1, 1, "", 0, 1);
+  test(S("abcde"), 1, 1, "abcde", 0, 1);
+  test(S("abcde"), 1, 1, "abcde", 1, 1);
+  test(S("abcde"), 1, 1, "abcde", 2, 1);
+  test(S("abcde"), 1, 1, "abcde", 4, 1);
+  test(S("abcde"), 1, 1, "abcde", 5, 1);
+  test(S("abcde"), 1, 1, "abcdefghij", 0, 1);
+  test(S("abcde"), 1, 1, "abcdefghij", 1, 1);
+  test(S("abcde"), 1, 1, "abcdefghij", 5, 1);
+  test(S("abcde"), 1, 1, "abcdefghij", 9, 1);
+  test(S("abcde"), 1, 1, "abcdefghij", 10, 1);
+  test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcde"), 1, 1, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcde"), 1, 2, "", 0, 2);
+  test(S("abcde"), 1, 2, "abcde", 0, 2);
+  test(S("abcde"), 1, 2, "abcde", 1, 1);
+  test(S("abcde"), 1, 2, "abcde", 2, 1);
+  test(S("abcde"), 1, 2, "abcde", 4, 1);
+  test(S("abcde"), 1, 2, "abcde", 5, 1);
+  test(S("abcde"), 1, 2, "abcdefghij", 0, 2);
+  test(S("abcde"), 1, 2, "abcdefghij", 1, 1);
+  test(S("abcde"), 1, 2, "abcdefghij", 5, 1);
+  test(S("abcde"), 1, 2, "abcdefghij", 9, 1);
+  test(S("abcde"), 1, 2, "abcdefghij", 10, 1);
+  test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 0, 2);
+  test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcde"), 1, 2, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcde"), 1, 3, "", 0, 3);
+  test(S("abcde"), 1, 3, "abcde", 0, 3);
+  test(S("abcde"), 1, 3, "abcde", 1, 1);
+  test(S("abcde"), 1, 3, "abcde", 2, 1);
+  test(S("abcde"), 1, 3, "abcde", 4, 1);
+  test(S("abcde"), 1, 3, "abcde", 5, 1);
+  test(S("abcde"), 1, 3, "abcdefghij", 0, 3);
+  test(S("abcde"), 1, 3, "abcdefghij", 1, 1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S("abcde"), 1, 3, "abcdefghij", 5, 1);
-    test(S("abcde"), 1, 3, "abcdefghij", 9, 1);
-    test(S("abcde"), 1, 3, "abcdefghij", 10, 1);
-    test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 0, 3);
-    test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcde"), 1, 4, "", 0, 4);
-    test(S("abcde"), 1, 4, "abcde", 0, 4);
-    test(S("abcde"), 1, 4, "abcde", 1, 1);
-    test(S("abcde"), 1, 4, "abcde", 2, 1);
-    test(S("abcde"), 1, 4, "abcde", 4, 1);
-    test(S("abcde"), 1, 4, "abcde", 5, 1);
-    test(S("abcde"), 1, 4, "abcdefghij", 0, 4);
-    test(S("abcde"), 1, 4, "abcdefghij", 1, 1);
-    test(S("abcde"), 1, 4, "abcdefghij", 5, 1);
-    test(S("abcde"), 1, 4, "abcdefghij", 9, 1);
-    test(S("abcde"), 1, 4, "abcdefghij", 10, 1);
-    test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 0, 4);
-    test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcde"), 1, 5, "", 0, 4);
-    test(S("abcde"), 1, 5, "abcde", 0, 4);
-    test(S("abcde"), 1, 5, "abcde", 1, 1);
-    test(S("abcde"), 1, 5, "abcde", 2, 1);
-    test(S("abcde"), 1, 5, "abcde", 4, 1);
-    test(S("abcde"), 1, 5, "abcde", 5, 1);
-    test(S("abcde"), 1, 5, "abcdefghij", 0, 4);
-    test(S("abcde"), 1, 5, "abcdefghij", 1, 1);
-    test(S("abcde"), 1, 5, "abcdefghij", 5, 1);
-    test(S("abcde"), 1, 5, "abcdefghij", 9, 1);
-    test(S("abcde"), 1, 5, "abcdefghij", 10, 1);
-    test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 0, 4);
-    test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcde"), 2, 0, "", 0, 0);
-    test(S("abcde"), 2, 0, "abcde", 0, 0);
-    test(S("abcde"), 2, 0, "abcde", 1, -1);
-    test(S("abcde"), 2, 0, "abcde", 2, -2);
-    test(S("abcde"), 2, 0, "abcde", 4, -4);
-    test(S("abcde"), 2, 0, "abcde", 5, -5);
-    test(S("abcde"), 2, 0, "abcdefghij", 0, 0);
-    test(S("abcde"), 2, 0, "abcdefghij", 1, -1);
-    test(S("abcde"), 2, 0, "abcdefghij", 5, -5);
-    test(S("abcde"), 2, 0, "abcdefghij", 9, -9);
-    test(S("abcde"), 2, 0, "abcdefghij", 10, -10);
-    test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcde"), 2, 1, "", 0, 1);
-    test(S("abcde"), 2, 1, "abcde", 0, 1);
-    test(S("abcde"), 2, 1, "abcde", 1, 2);
-    test(S("abcde"), 2, 1, "abcde", 2, 2);
-    test(S("abcde"), 2, 1, "abcde", 4, 2);
-    test(S("abcde"), 2, 1, "abcde", 5, 2);
-    test(S("abcde"), 2, 1, "abcdefghij", 0, 1);
-    test(S("abcde"), 2, 1, "abcdefghij", 1, 2);
-    test(S("abcde"), 2, 1, "abcdefghij", 5, 2);
-    test(S("abcde"), 2, 1, "abcdefghij", 9, 2);
-    test(S("abcde"), 2, 1, "abcdefghij", 10, 2);
-    test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 1, 2);
-    test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 10, 2);
-    test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 19, 2);
-    test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 20, 2);
-    test(S("abcde"), 2, 2, "", 0, 2);
-    test(S("abcde"), 2, 2, "abcde", 0, 2);
-    test(S("abcde"), 2, 2, "abcde", 1, 2);
-    test(S("abcde"), 2, 2, "abcde", 2, 2);
-    test(S("abcde"), 2, 2, "abcde", 4, 2);
-    test(S("abcde"), 2, 2, "abcde", 5, 2);
-    test(S("abcde"), 2, 2, "abcdefghij", 0, 2);
-    test(S("abcde"), 2, 2, "abcdefghij", 1, 2);
-    test(S("abcde"), 2, 2, "abcdefghij", 5, 2);
-    test(S("abcde"), 2, 2, "abcdefghij", 9, 2);
-    test(S("abcde"), 2, 2, "abcdefghij", 10, 2);
-    test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 0, 2);
-    test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 1, 2);
-    test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 10, 2);
-    test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 19, 2);
-    test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 20, 2);
-    test(S("abcde"), 2, 3, "", 0, 3);
-    test(S("abcde"), 2, 3, "abcde", 0, 3);
-    test(S("abcde"), 2, 3, "abcde", 1, 2);
-    test(S("abcde"), 2, 3, "abcde", 2, 2);
-    test(S("abcde"), 2, 3, "abcde", 4, 2);
-    test(S("abcde"), 2, 3, "abcde", 5, 2);
-    test(S("abcde"), 2, 3, "abcdefghij", 0, 3);
-    test(S("abcde"), 2, 3, "abcdefghij", 1, 2);
-    test(S("abcde"), 2, 3, "abcdefghij", 5, 2);
-    test(S("abcde"), 2, 3, "abcdefghij", 9, 2);
-    test(S("abcde"), 2, 3, "abcdefghij", 10, 2);
-    test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 0, 3);
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S("abcde"), 1, 3, "abcdefghij", 5, 1);
+  test(S("abcde"), 1, 3, "abcdefghij", 9, 1);
+  test(S("abcde"), 1, 3, "abcdefghij", 10, 1);
+  test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 0, 3);
+  test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcde"), 1, 3, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcde"), 1, 4, "", 0, 4);
+  test(S("abcde"), 1, 4, "abcde", 0, 4);
+  test(S("abcde"), 1, 4, "abcde", 1, 1);
+  test(S("abcde"), 1, 4, "abcde", 2, 1);
+  test(S("abcde"), 1, 4, "abcde", 4, 1);
+  test(S("abcde"), 1, 4, "abcde", 5, 1);
+  test(S("abcde"), 1, 4, "abcdefghij", 0, 4);
+  test(S("abcde"), 1, 4, "abcdefghij", 1, 1);
+  test(S("abcde"), 1, 4, "abcdefghij", 5, 1);
+  test(S("abcde"), 1, 4, "abcdefghij", 9, 1);
+  test(S("abcde"), 1, 4, "abcdefghij", 10, 1);
+  test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 0, 4);
+  test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcde"), 1, 4, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcde"), 1, 5, "", 0, 4);
+  test(S("abcde"), 1, 5, "abcde", 0, 4);
+  test(S("abcde"), 1, 5, "abcde", 1, 1);
+  test(S("abcde"), 1, 5, "abcde", 2, 1);
+  test(S("abcde"), 1, 5, "abcde", 4, 1);
+  test(S("abcde"), 1, 5, "abcde", 5, 1);
+  test(S("abcde"), 1, 5, "abcdefghij", 0, 4);
+  test(S("abcde"), 1, 5, "abcdefghij", 1, 1);
+  test(S("abcde"), 1, 5, "abcdefghij", 5, 1);
+  test(S("abcde"), 1, 5, "abcdefghij", 9, 1);
+  test(S("abcde"), 1, 5, "abcdefghij", 10, 1);
+  test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 0, 4);
+  test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcde"), 1, 5, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcde"), 2, 0, "", 0, 0);
+  test(S("abcde"), 2, 0, "abcde", 0, 0);
+  test(S("abcde"), 2, 0, "abcde", 1, -1);
+  test(S("abcde"), 2, 0, "abcde", 2, -2);
+  test(S("abcde"), 2, 0, "abcde", 4, -4);
+  test(S("abcde"), 2, 0, "abcde", 5, -5);
+  test(S("abcde"), 2, 0, "abcdefghij", 0, 0);
+  test(S("abcde"), 2, 0, "abcdefghij", 1, -1);
+  test(S("abcde"), 2, 0, "abcdefghij", 5, -5);
+  test(S("abcde"), 2, 0, "abcdefghij", 9, -9);
+  test(S("abcde"), 2, 0, "abcdefghij", 10, -10);
+  test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcde"), 2, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcde"), 2, 1, "", 0, 1);
+  test(S("abcde"), 2, 1, "abcde", 0, 1);
+  test(S("abcde"), 2, 1, "abcde", 1, 2);
+  test(S("abcde"), 2, 1, "abcde", 2, 2);
+  test(S("abcde"), 2, 1, "abcde", 4, 2);
+  test(S("abcde"), 2, 1, "abcde", 5, 2);
+  test(S("abcde"), 2, 1, "abcdefghij", 0, 1);
+  test(S("abcde"), 2, 1, "abcdefghij", 1, 2);
+  test(S("abcde"), 2, 1, "abcdefghij", 5, 2);
+  test(S("abcde"), 2, 1, "abcdefghij", 9, 2);
+  test(S("abcde"), 2, 1, "abcdefghij", 10, 2);
+  test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 1, 2);
+  test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 10, 2);
+  test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 19, 2);
+  test(S("abcde"), 2, 1, "abcdefghijklmnopqrst", 20, 2);
+  test(S("abcde"), 2, 2, "", 0, 2);
+  test(S("abcde"), 2, 2, "abcde", 0, 2);
+  test(S("abcde"), 2, 2, "abcde", 1, 2);
+  test(S("abcde"), 2, 2, "abcde", 2, 2);
+  test(S("abcde"), 2, 2, "abcde", 4, 2);
+  test(S("abcde"), 2, 2, "abcde", 5, 2);
+  test(S("abcde"), 2, 2, "abcdefghij", 0, 2);
+  test(S("abcde"), 2, 2, "abcdefghij", 1, 2);
+  test(S("abcde"), 2, 2, "abcdefghij", 5, 2);
+  test(S("abcde"), 2, 2, "abcdefghij", 9, 2);
+  test(S("abcde"), 2, 2, "abcdefghij", 10, 2);
+  test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 0, 2);
+  test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 1, 2);
+  test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 10, 2);
+  test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 19, 2);
+  test(S("abcde"), 2, 2, "abcdefghijklmnopqrst", 20, 2);
+  test(S("abcde"), 2, 3, "", 0, 3);
+  test(S("abcde"), 2, 3, "abcde", 0, 3);
+  test(S("abcde"), 2, 3, "abcde", 1, 2);
+  test(S("abcde"), 2, 3, "abcde", 2, 2);
+  test(S("abcde"), 2, 3, "abcde", 4, 2);
+  test(S("abcde"), 2, 3, "abcde", 5, 2);
+  test(S("abcde"), 2, 3, "abcdefghij", 0, 3);
+  test(S("abcde"), 2, 3, "abcdefghij", 1, 2);
+  test(S("abcde"), 2, 3, "abcdefghij", 5, 2);
+  test(S("abcde"), 2, 3, "abcdefghij", 9, 2);
+  test(S("abcde"), 2, 3, "abcdefghij", 10, 2);
+  test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 0, 3);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test3()
-{
-    test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 1, 2);
-    test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 10, 2);
-    test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 19, 2);
-    test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 20, 2);
-    test(S("abcde"), 2, 4, "", 0, 3);
-    test(S("abcde"), 2, 4, "abcde", 0, 3);
-    test(S("abcde"), 2, 4, "abcde", 1, 2);
-    test(S("abcde"), 2, 4, "abcde", 2, 2);
-    test(S("abcde"), 2, 4, "abcde", 4, 2);
-    test(S("abcde"), 2, 4, "abcde", 5, 2);
-    test(S("abcde"), 2, 4, "abcdefghij", 0, 3);
-    test(S("abcde"), 2, 4, "abcdefghij", 1, 2);
-    test(S("abcde"), 2, 4, "abcdefghij", 5, 2);
-    test(S("abcde"), 2, 4, "abcdefghij", 9, 2);
-    test(S("abcde"), 2, 4, "abcdefghij", 10, 2);
-    test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 0, 3);
-    test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 1, 2);
-    test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 10, 2);
-    test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 19, 2);
-    test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 20, 2);
-    test(S("abcde"), 4, 0, "", 0, 0);
-    test(S("abcde"), 4, 0, "abcde", 0, 0);
-    test(S("abcde"), 4, 0, "abcde", 1, -1);
-    test(S("abcde"), 4, 0, "abcde", 2, -2);
-    test(S("abcde"), 4, 0, "abcde", 4, -4);
-    test(S("abcde"), 4, 0, "abcde", 5, -5);
-    test(S("abcde"), 4, 0, "abcdefghij", 0, 0);
-    test(S("abcde"), 4, 0, "abcdefghij", 1, -1);
-    test(S("abcde"), 4, 0, "abcdefghij", 5, -5);
-    test(S("abcde"), 4, 0, "abcdefghij", 9, -9);
-    test(S("abcde"), 4, 0, "abcdefghij", 10, -10);
-    test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcde"), 4, 1, "", 0, 1);
-    test(S("abcde"), 4, 1, "abcde", 0, 1);
-    test(S("abcde"), 4, 1, "abcde", 1, 4);
-    test(S("abcde"), 4, 1, "abcde", 2, 4);
-    test(S("abcde"), 4, 1, "abcde", 4, 4);
-    test(S("abcde"), 4, 1, "abcde", 5, 4);
-    test(S("abcde"), 4, 1, "abcdefghij", 0, 1);
-    test(S("abcde"), 4, 1, "abcdefghij", 1, 4);
-    test(S("abcde"), 4, 1, "abcdefghij", 5, 4);
-    test(S("abcde"), 4, 1, "abcdefghij", 9, 4);
-    test(S("abcde"), 4, 1, "abcdefghij", 10, 4);
-    test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 1, 4);
-    test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 10, 4);
-    test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 19, 4);
-    test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 20, 4);
-    test(S("abcde"), 4, 2, "", 0, 1);
-    test(S("abcde"), 4, 2, "abcde", 0, 1);
-    test(S("abcde"), 4, 2, "abcde", 1, 4);
-    test(S("abcde"), 4, 2, "abcde", 2, 4);
-    test(S("abcde"), 4, 2, "abcde", 4, 4);
-    test(S("abcde"), 4, 2, "abcde", 5, 4);
-    test(S("abcde"), 4, 2, "abcdefghij", 0, 1);
-    test(S("abcde"), 4, 2, "abcdefghij", 1, 4);
-    test(S("abcde"), 4, 2, "abcdefghij", 5, 4);
-    test(S("abcde"), 4, 2, "abcdefghij", 9, 4);
-    test(S("abcde"), 4, 2, "abcdefghij", 10, 4);
-    test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 1, 4);
-    test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 10, 4);
-    test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 19, 4);
-    test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 20, 4);
-    test(S("abcde"), 5, 0, "", 0, 0);
-    test(S("abcde"), 5, 0, "abcde", 0, 0);
-    test(S("abcde"), 5, 0, "abcde", 1, -1);
-    test(S("abcde"), 5, 0, "abcde", 2, -2);
-    test(S("abcde"), 5, 0, "abcde", 4, -4);
-    test(S("abcde"), 5, 0, "abcde", 5, -5);
-    test(S("abcde"), 5, 0, "abcdefghij", 0, 0);
-    test(S("abcde"), 5, 0, "abcdefghij", 1, -1);
-    test(S("abcde"), 5, 0, "abcdefghij", 5, -5);
-    test(S("abcde"), 5, 0, "abcdefghij", 9, -9);
-    test(S("abcde"), 5, 0, "abcdefghij", 10, -10);
-    test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcde"), 5, 1, "", 0, 0);
-    test(S("abcde"), 5, 1, "abcde", 0, 0);
-    test(S("abcde"), 5, 1, "abcde", 1, -1);
-    test(S("abcde"), 5, 1, "abcde", 2, -2);
-    test(S("abcde"), 5, 1, "abcde", 4, -4);
-    test(S("abcde"), 5, 1, "abcde", 5, -5);
-    test(S("abcde"), 5, 1, "abcdefghij", 0, 0);
-    test(S("abcde"), 5, 1, "abcdefghij", 1, -1);
-    test(S("abcde"), 5, 1, "abcdefghij", 5, -5);
-    test(S("abcde"), 5, 1, "abcdefghij", 9, -9);
-    test(S("abcde"), 5, 1, "abcdefghij", 10, -10);
-    test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 20, -20);
+TEST_CONSTEXPR_CXX20 bool test3() {
+  test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 1, 2);
+  test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 10, 2);
+  test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 19, 2);
+  test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 20, 2);
+  test(S("abcde"), 2, 4, "", 0, 3);
+  test(S("abcde"), 2, 4, "abcde", 0, 3);
+  test(S("abcde"), 2, 4, "abcde", 1, 2);
+  test(S("abcde"), 2, 4, "abcde", 2, 2);
+  test(S("abcde"), 2, 4, "abcde", 4, 2);
+  test(S("abcde"), 2, 4, "abcde", 5, 2);
+  test(S("abcde"), 2, 4, "abcdefghij", 0, 3);
+  test(S("abcde"), 2, 4, "abcdefghij", 1, 2);
+  test(S("abcde"), 2, 4, "abcdefghij", 5, 2);
+  test(S("abcde"), 2, 4, "abcdefghij", 9, 2);
+  test(S("abcde"), 2, 4, "abcdefghij", 10, 2);
+  test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 0, 3);
+  test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 1, 2);
+  test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 10, 2);
+  test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 19, 2);
+  test(S("abcde"), 2, 4, "abcdefghijklmnopqrst", 20, 2);
+  test(S("abcde"), 4, 0, "", 0, 0);
+  test(S("abcde"), 4, 0, "abcde", 0, 0);
+  test(S("abcde"), 4, 0, "abcde", 1, -1);
+  test(S("abcde"), 4, 0, "abcde", 2, -2);
+  test(S("abcde"), 4, 0, "abcde", 4, -4);
+  test(S("abcde"), 4, 0, "abcde", 5, -5);
+  test(S("abcde"), 4, 0, "abcdefghij", 0, 0);
+  test(S("abcde"), 4, 0, "abcdefghij", 1, -1);
+  test(S("abcde"), 4, 0, "abcdefghij", 5, -5);
+  test(S("abcde"), 4, 0, "abcdefghij", 9, -9);
+  test(S("abcde"), 4, 0, "abcdefghij", 10, -10);
+  test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcde"), 4, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcde"), 4, 1, "", 0, 1);
+  test(S("abcde"), 4, 1, "abcde", 0, 1);
+  test(S("abcde"), 4, 1, "abcde", 1, 4);
+  test(S("abcde"), 4, 1, "abcde", 2, 4);
+  test(S("abcde"), 4, 1, "abcde", 4, 4);
+  test(S("abcde"), 4, 1, "abcde", 5, 4);
+  test(S("abcde"), 4, 1, "abcdefghij", 0, 1);
+  test(S("abcde"), 4, 1, "abcdefghij", 1, 4);
+  test(S("abcde"), 4, 1, "abcdefghij", 5, 4);
+  test(S("abcde"), 4, 1, "abcdefghij", 9, 4);
+  test(S("abcde"), 4, 1, "abcdefghij", 10, 4);
+  test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 1, 4);
+  test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 10, 4);
+  test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 19, 4);
+  test(S("abcde"), 4, 1, "abcdefghijklmnopqrst", 20, 4);
+  test(S("abcde"), 4, 2, "", 0, 1);
+  test(S("abcde"), 4, 2, "abcde", 0, 1);
+  test(S("abcde"), 4, 2, "abcde", 1, 4);
+  test(S("abcde"), 4, 2, "abcde", 2, 4);
+  test(S("abcde"), 4, 2, "abcde", 4, 4);
+  test(S("abcde"), 4, 2, "abcde", 5, 4);
+  test(S("abcde"), 4, 2, "abcdefghij", 0, 1);
+  test(S("abcde"), 4, 2, "abcdefghij", 1, 4);
+  test(S("abcde"), 4, 2, "abcdefghij", 5, 4);
+  test(S("abcde"), 4, 2, "abcdefghij", 9, 4);
+  test(S("abcde"), 4, 2, "abcdefghij", 10, 4);
+  test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 1, 4);
+  test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 10, 4);
+  test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 19, 4);
+  test(S("abcde"), 4, 2, "abcdefghijklmnopqrst", 20, 4);
+  test(S("abcde"), 5, 0, "", 0, 0);
+  test(S("abcde"), 5, 0, "abcde", 0, 0);
+  test(S("abcde"), 5, 0, "abcde", 1, -1);
+  test(S("abcde"), 5, 0, "abcde", 2, -2);
+  test(S("abcde"), 5, 0, "abcde", 4, -4);
+  test(S("abcde"), 5, 0, "abcde", 5, -5);
+  test(S("abcde"), 5, 0, "abcdefghij", 0, 0);
+  test(S("abcde"), 5, 0, "abcdefghij", 1, -1);
+  test(S("abcde"), 5, 0, "abcdefghij", 5, -5);
+  test(S("abcde"), 5, 0, "abcdefghij", 9, -9);
+  test(S("abcde"), 5, 0, "abcdefghij", 10, -10);
+  test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcde"), 5, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcde"), 5, 1, "", 0, 0);
+  test(S("abcde"), 5, 1, "abcde", 0, 0);
+  test(S("abcde"), 5, 1, "abcde", 1, -1);
+  test(S("abcde"), 5, 1, "abcde", 2, -2);
+  test(S("abcde"), 5, 1, "abcde", 4, -4);
+  test(S("abcde"), 5, 1, "abcde", 5, -5);
+  test(S("abcde"), 5, 1, "abcdefghij", 0, 0);
+  test(S("abcde"), 5, 1, "abcdefghij", 1, -1);
+  test(S("abcde"), 5, 1, "abcdefghij", 5, -5);
+  test(S("abcde"), 5, 1, "abcdefghij", 9, -9);
+  test(S("abcde"), 5, 1, "abcdefghij", 10, -10);
+  test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 20, -20);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test4()
-{
-    test(S("abcde"), 6, 0, "", 0, 0);
-    test(S("abcde"), 6, 0, "abcde", 0, 0);
-    test(S("abcde"), 6, 0, "abcde", 1, 0);
-    test(S("abcde"), 6, 0, "abcde", 2, 0);
-    test(S("abcde"), 6, 0, "abcde", 4, 0);
-    test(S("abcde"), 6, 0, "abcde", 5, 0);
-    test(S("abcde"), 6, 0, "abcdefghij", 0, 0);
-    test(S("abcde"), 6, 0, "abcdefghij", 1, 0);
-    test(S("abcde"), 6, 0, "abcdefghij", 5, 0);
-    test(S("abcde"), 6, 0, "abcdefghij", 9, 0);
-    test(S("abcde"), 6, 0, "abcdefghij", 10, 0);
-    test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 1, 0);
-    test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 10, 0);
-    test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 19, 0);
-    test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 20, 0);
-    test(S("abcdefghij"), 0, 0, "", 0, 0);
-    test(S("abcdefghij"), 0, 0, "abcde", 0, 0);
-    test(S("abcdefghij"), 0, 0, "abcde", 1, -1);
-    test(S("abcdefghij"), 0, 0, "abcde", 2, -2);
-    test(S("abcdefghij"), 0, 0, "abcde", 4, -4);
-    test(S("abcdefghij"), 0, 0, "abcde", 5, -5);
-    test(S("abcdefghij"), 0, 0, "abcdefghij", 0, 0);
-    test(S("abcdefghij"), 0, 0, "abcdefghij", 1, -1);
-    test(S("abcdefghij"), 0, 0, "abcdefghij", 5, -5);
-    test(S("abcdefghij"), 0, 0, "abcdefghij", 9, -9);
-    test(S("abcdefghij"), 0, 0, "abcdefghij", 10, -10);
-    test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcdefghij"), 0, 1, "", 0, 1);
-    test(S("abcdefghij"), 0, 1, "abcde", 0, 1);
-    test(S("abcdefghij"), 0, 1, "abcde", 1, 0);
-    test(S("abcdefghij"), 0, 1, "abcde", 2, -1);
-    test(S("abcdefghij"), 0, 1, "abcde", 4, -3);
-    test(S("abcdefghij"), 0, 1, "abcde", 5, -4);
-    test(S("abcdefghij"), 0, 1, "abcdefghij", 0, 1);
-    test(S("abcdefghij"), 0, 1, "abcdefghij", 1, 0);
-    test(S("abcdefghij"), 0, 1, "abcdefghij", 5, -4);
-    test(S("abcdefghij"), 0, 1, "abcdefghij", 9, -8);
-    test(S("abcdefghij"), 0, 1, "abcdefghij", 10, -9);
-    test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 1, 0);
-    test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 10, -9);
-    test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 19, -18);
-    test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 20, -19);
-    test(S("abcdefghij"), 0, 5, "", 0, 5);
-    test(S("abcdefghij"), 0, 5, "abcde", 0, 5);
-    test(S("abcdefghij"), 0, 5, "abcde", 1, 4);
-    test(S("abcdefghij"), 0, 5, "abcde", 2, 3);
-    test(S("abcdefghij"), 0, 5, "abcde", 4, 1);
-    test(S("abcdefghij"), 0, 5, "abcde", 5, 0);
-    test(S("abcdefghij"), 0, 5, "abcdefghij", 0, 5);
-    test(S("abcdefghij"), 0, 5, "abcdefghij", 1, 4);
-    test(S("abcdefghij"), 0, 5, "abcdefghij", 5, 0);
-    test(S("abcdefghij"), 0, 5, "abcdefghij", 9, -4);
-    test(S("abcdefghij"), 0, 5, "abcdefghij", 10, -5);
-    test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 0, 5);
-    test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 1, 4);
-    test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 10, -5);
-    test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 19, -14);
-    test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 20, -15);
-    test(S("abcdefghij"), 0, 9, "", 0, 9);
-    test(S("abcdefghij"), 0, 9, "abcde", 0, 9);
-    test(S("abcdefghij"), 0, 9, "abcde", 1, 8);
-    test(S("abcdefghij"), 0, 9, "abcde", 2, 7);
-    test(S("abcdefghij"), 0, 9, "abcde", 4, 5);
-    test(S("abcdefghij"), 0, 9, "abcde", 5, 4);
-    test(S("abcdefghij"), 0, 9, "abcdefghij", 0, 9);
-    test(S("abcdefghij"), 0, 9, "abcdefghij", 1, 8);
-    test(S("abcdefghij"), 0, 9, "abcdefghij", 5, 4);
-    test(S("abcdefghij"), 0, 9, "abcdefghij", 9, 0);
-    test(S("abcdefghij"), 0, 9, "abcdefghij", 10, -1);
-    test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 0, 9);
-    test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 1, 8);
-    test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 10, -1);
-    test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 19, -10);
-    test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 20, -11);
-    test(S("abcdefghij"), 0, 10, "", 0, 10);
-    test(S("abcdefghij"), 0, 10, "abcde", 0, 10);
-    test(S("abcdefghij"), 0, 10, "abcde", 1, 9);
-    test(S("abcdefghij"), 0, 10, "abcde", 2, 8);
-    test(S("abcdefghij"), 0, 10, "abcde", 4, 6);
-    test(S("abcdefghij"), 0, 10, "abcde", 5, 5);
-    test(S("abcdefghij"), 0, 10, "abcdefghij", 0, 10);
-    test(S("abcdefghij"), 0, 10, "abcdefghij", 1, 9);
-    test(S("abcdefghij"), 0, 10, "abcdefghij", 5, 5);
-    test(S("abcdefghij"), 0, 10, "abcdefghij", 9, 1);
-    test(S("abcdefghij"), 0, 10, "abcdefghij", 10, 0);
-    test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 0, 10);
-    test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 1, 9);
-    test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 10, 0);
-    test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 19, -9);
-    test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 20, -10);
-    test(S("abcdefghij"), 0, 11, "", 0, 10);
-    test(S("abcdefghij"), 0, 11, "abcde", 0, 10);
-    test(S("abcdefghij"), 0, 11, "abcde", 1, 9);
-    test(S("abcdefghij"), 0, 11, "abcde", 2, 8);
+TEST_CONSTEXPR_CXX20 bool test4() {
+  test(S("abcde"), 6, 0, "", 0, 0);
+  test(S("abcde"), 6, 0, "abcde", 0, 0);
+  test(S("abcde"), 6, 0, "abcde", 1, 0);
+  test(S("abcde"), 6, 0, "abcde", 2, 0);
+  test(S("abcde"), 6, 0, "abcde", 4, 0);
+  test(S("abcde"), 6, 0, "abcde", 5, 0);
+  test(S("abcde"), 6, 0, "abcdefghij", 0, 0);
+  test(S("abcde"), 6, 0, "abcdefghij", 1, 0);
+  test(S("abcde"), 6, 0, "abcdefghij", 5, 0);
+  test(S("abcde"), 6, 0, "abcdefghij", 9, 0);
+  test(S("abcde"), 6, 0, "abcdefghij", 10, 0);
+  test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 1, 0);
+  test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 10, 0);
+  test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 19, 0);
+  test(S("abcde"), 6, 0, "abcdefghijklmnopqrst", 20, 0);
+  test(S("abcdefghij"), 0, 0, "", 0, 0);
+  test(S("abcdefghij"), 0, 0, "abcde", 0, 0);
+  test(S("abcdefghij"), 0, 0, "abcde", 1, -1);
+  test(S("abcdefghij"), 0, 0, "abcde", 2, -2);
+  test(S("abcdefghij"), 0, 0, "abcde", 4, -4);
+  test(S("abcdefghij"), 0, 0, "abcde", 5, -5);
+  test(S("abcdefghij"), 0, 0, "abcdefghij", 0, 0);
+  test(S("abcdefghij"), 0, 0, "abcdefghij", 1, -1);
+  test(S("abcdefghij"), 0, 0, "abcdefghij", 5, -5);
+  test(S("abcdefghij"), 0, 0, "abcdefghij", 9, -9);
+  test(S("abcdefghij"), 0, 0, "abcdefghij", 10, -10);
+  test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcdefghij"), 0, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcdefghij"), 0, 1, "", 0, 1);
+  test(S("abcdefghij"), 0, 1, "abcde", 0, 1);
+  test(S("abcdefghij"), 0, 1, "abcde", 1, 0);
+  test(S("abcdefghij"), 0, 1, "abcde", 2, -1);
+  test(S("abcdefghij"), 0, 1, "abcde", 4, -3);
+  test(S("abcdefghij"), 0, 1, "abcde", 5, -4);
+  test(S("abcdefghij"), 0, 1, "abcdefghij", 0, 1);
+  test(S("abcdefghij"), 0, 1, "abcdefghij", 1, 0);
+  test(S("abcdefghij"), 0, 1, "abcdefghij", 5, -4);
+  test(S("abcdefghij"), 0, 1, "abcdefghij", 9, -8);
+  test(S("abcdefghij"), 0, 1, "abcdefghij", 10, -9);
+  test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 1, 0);
+  test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 10, -9);
+  test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 19, -18);
+  test(S("abcdefghij"), 0, 1, "abcdefghijklmnopqrst", 20, -19);
+  test(S("abcdefghij"), 0, 5, "", 0, 5);
+  test(S("abcdefghij"), 0, 5, "abcde", 0, 5);
+  test(S("abcdefghij"), 0, 5, "abcde", 1, 4);
+  test(S("abcdefghij"), 0, 5, "abcde", 2, 3);
+  test(S("abcdefghij"), 0, 5, "abcde", 4, 1);
+  test(S("abcdefghij"), 0, 5, "abcde", 5, 0);
+  test(S("abcdefghij"), 0, 5, "abcdefghij", 0, 5);
+  test(S("abcdefghij"), 0, 5, "abcdefghij", 1, 4);
+  test(S("abcdefghij"), 0, 5, "abcdefghij", 5, 0);
+  test(S("abcdefghij"), 0, 5, "abcdefghij", 9, -4);
+  test(S("abcdefghij"), 0, 5, "abcdefghij", 10, -5);
+  test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 0, 5);
+  test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 1, 4);
+  test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 10, -5);
+  test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 19, -14);
+  test(S("abcdefghij"), 0, 5, "abcdefghijklmnopqrst", 20, -15);
+  test(S("abcdefghij"), 0, 9, "", 0, 9);
+  test(S("abcdefghij"), 0, 9, "abcde", 0, 9);
+  test(S("abcdefghij"), 0, 9, "abcde", 1, 8);
+  test(S("abcdefghij"), 0, 9, "abcde", 2, 7);
+  test(S("abcdefghij"), 0, 9, "abcde", 4, 5);
+  test(S("abcdefghij"), 0, 9, "abcde", 5, 4);
+  test(S("abcdefghij"), 0, 9, "abcdefghij", 0, 9);
+  test(S("abcdefghij"), 0, 9, "abcdefghij", 1, 8);
+  test(S("abcdefghij"), 0, 9, "abcdefghij", 5, 4);
+  test(S("abcdefghij"), 0, 9, "abcdefghij", 9, 0);
+  test(S("abcdefghij"), 0, 9, "abcdefghij", 10, -1);
+  test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 0, 9);
+  test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 1, 8);
+  test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 10, -1);
+  test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 19, -10);
+  test(S("abcdefghij"), 0, 9, "abcdefghijklmnopqrst", 20, -11);
+  test(S("abcdefghij"), 0, 10, "", 0, 10);
+  test(S("abcdefghij"), 0, 10, "abcde", 0, 10);
+  test(S("abcdefghij"), 0, 10, "abcde", 1, 9);
+  test(S("abcdefghij"), 0, 10, "abcde", 2, 8);
+  test(S("abcdefghij"), 0, 10, "abcde", 4, 6);
+  test(S("abcdefghij"), 0, 10, "abcde", 5, 5);
+  test(S("abcdefghij"), 0, 10, "abcdefghij", 0, 10);
+  test(S("abcdefghij"), 0, 10, "abcdefghij", 1, 9);
+  test(S("abcdefghij"), 0, 10, "abcdefghij", 5, 5);
+  test(S("abcdefghij"), 0, 10, "abcdefghij", 9, 1);
+  test(S("abcdefghij"), 0, 10, "abcdefghij", 10, 0);
+  test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 0, 10);
+  test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 1, 9);
+  test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 10, 0);
+  test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 19, -9);
+  test(S("abcdefghij"), 0, 10, "abcdefghijklmnopqrst", 20, -10);
+  test(S("abcdefghij"), 0, 11, "", 0, 10);
+  test(S("abcdefghij"), 0, 11, "abcde", 0, 10);
+  test(S("abcdefghij"), 0, 11, "abcde", 1, 9);
+  test(S("abcdefghij"), 0, 11, "abcde", 2, 8);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test5()
-{
-    test(S("abcdefghij"), 0, 11, "abcde", 4, 6);
-    test(S("abcdefghij"), 0, 11, "abcde", 5, 5);
-    test(S("abcdefghij"), 0, 11, "abcdefghij", 0, 10);
-    test(S("abcdefghij"), 0, 11, "abcdefghij", 1, 9);
-    test(S("abcdefghij"), 0, 11, "abcdefghij", 5, 5);
-    test(S("abcdefghij"), 0, 11, "abcdefghij", 9, 1);
-    test(S("abcdefghij"), 0, 11, "abcdefghij", 10, 0);
-    test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 0, 10);
-    test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 1, 9);
-    test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 10, 0);
-    test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 19, -9);
-    test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 20, -10);
-    test(S("abcdefghij"), 1, 0, "", 0, 0);
-    test(S("abcdefghij"), 1, 0, "abcde", 0, 0);
-    test(S("abcdefghij"), 1, 0, "abcde", 1, -1);
-    test(S("abcdefghij"), 1, 0, "abcde", 2, -2);
-    test(S("abcdefghij"), 1, 0, "abcde", 4, -4);
-    test(S("abcdefghij"), 1, 0, "abcde", 5, -5);
-    test(S("abcdefghij"), 1, 0, "abcdefghij", 0, 0);
-    test(S("abcdefghij"), 1, 0, "abcdefghij", 1, -1);
-    test(S("abcdefghij"), 1, 0, "abcdefghij", 5, -5);
-    test(S("abcdefghij"), 1, 0, "abcdefghij", 9, -9);
-    test(S("abcdefghij"), 1, 0, "abcdefghij", 10, -10);
-    test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcdefghij"), 1, 1, "", 0, 1);
-    test(S("abcdefghij"), 1, 1, "abcde", 0, 1);
-    test(S("abcdefghij"), 1, 1, "abcde", 1, 1);
-    test(S("abcdefghij"), 1, 1, "abcde", 2, 1);
-    test(S("abcdefghij"), 1, 1, "abcde", 4, 1);
-    test(S("abcdefghij"), 1, 1, "abcde", 5, 1);
-    test(S("abcdefghij"), 1, 1, "abcdefghij", 0, 1);
-    test(S("abcdefghij"), 1, 1, "abcdefghij", 1, 1);
-    test(S("abcdefghij"), 1, 1, "abcdefghij", 5, 1);
-    test(S("abcdefghij"), 1, 1, "abcdefghij", 9, 1);
-    test(S("abcdefghij"), 1, 1, "abcdefghij", 10, 1);
-    test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcdefghij"), 1, 4, "", 0, 4);
-    test(S("abcdefghij"), 1, 4, "abcde", 0, 4);
-    test(S("abcdefghij"), 1, 4, "abcde", 1, 1);
-    test(S("abcdefghij"), 1, 4, "abcde", 2, 1);
-    test(S("abcdefghij"), 1, 4, "abcde", 4, 1);
-    test(S("abcdefghij"), 1, 4, "abcde", 5, 1);
-    test(S("abcdefghij"), 1, 4, "abcdefghij", 0, 4);
-    test(S("abcdefghij"), 1, 4, "abcdefghij", 1, 1);
-    test(S("abcdefghij"), 1, 4, "abcdefghij", 5, 1);
-    test(S("abcdefghij"), 1, 4, "abcdefghij", 9, 1);
-    test(S("abcdefghij"), 1, 4, "abcdefghij", 10, 1);
-    test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 0, 4);
-    test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcdefghij"), 1, 8, "", 0, 8);
-    test(S("abcdefghij"), 1, 8, "abcde", 0, 8);
-    test(S("abcdefghij"), 1, 8, "abcde", 1, 1);
-    test(S("abcdefghij"), 1, 8, "abcde", 2, 1);
-    test(S("abcdefghij"), 1, 8, "abcde", 4, 1);
-    test(S("abcdefghij"), 1, 8, "abcde", 5, 1);
-    test(S("abcdefghij"), 1, 8, "abcdefghij", 0, 8);
-    test(S("abcdefghij"), 1, 8, "abcdefghij", 1, 1);
-    test(S("abcdefghij"), 1, 8, "abcdefghij", 5, 1);
-    test(S("abcdefghij"), 1, 8, "abcdefghij", 9, 1);
-    test(S("abcdefghij"), 1, 8, "abcdefghij", 10, 1);
-    test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 0, 8);
-    test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcdefghij"), 1, 9, "", 0, 9);
-    test(S("abcdefghij"), 1, 9, "abcde", 0, 9);
-    test(S("abcdefghij"), 1, 9, "abcde", 1, 1);
-    test(S("abcdefghij"), 1, 9, "abcde", 2, 1);
-    test(S("abcdefghij"), 1, 9, "abcde", 4, 1);
-    test(S("abcdefghij"), 1, 9, "abcde", 5, 1);
-    test(S("abcdefghij"), 1, 9, "abcdefghij", 0, 9);
-    test(S("abcdefghij"), 1, 9, "abcdefghij", 1, 1);
-    test(S("abcdefghij"), 1, 9, "abcdefghij", 5, 1);
-    test(S("abcdefghij"), 1, 9, "abcdefghij", 9, 1);
-    test(S("abcdefghij"), 1, 9, "abcdefghij", 10, 1);
-    test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 0, 9);
-    test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcdefghij"), 1, 10, "", 0, 9);
-    test(S("abcdefghij"), 1, 10, "abcde", 0, 9);
-    test(S("abcdefghij"), 1, 10, "abcde", 1, 1);
-    test(S("abcdefghij"), 1, 10, "abcde", 2, 1);
-    test(S("abcdefghij"), 1, 10, "abcde", 4, 1);
-    test(S("abcdefghij"), 1, 10, "abcde", 5, 1);
-    test(S("abcdefghij"), 1, 10, "abcdefghij", 0, 9);
-    test(S("abcdefghij"), 1, 10, "abcdefghij", 1, 1);
+TEST_CONSTEXPR_CXX20 bool test5() {
+  test(S("abcdefghij"), 0, 11, "abcde", 4, 6);
+  test(S("abcdefghij"), 0, 11, "abcde", 5, 5);
+  test(S("abcdefghij"), 0, 11, "abcdefghij", 0, 10);
+  test(S("abcdefghij"), 0, 11, "abcdefghij", 1, 9);
+  test(S("abcdefghij"), 0, 11, "abcdefghij", 5, 5);
+  test(S("abcdefghij"), 0, 11, "abcdefghij", 9, 1);
+  test(S("abcdefghij"), 0, 11, "abcdefghij", 10, 0);
+  test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 0, 10);
+  test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 1, 9);
+  test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 10, 0);
+  test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 19, -9);
+  test(S("abcdefghij"), 0, 11, "abcdefghijklmnopqrst", 20, -10);
+  test(S("abcdefghij"), 1, 0, "", 0, 0);
+  test(S("abcdefghij"), 1, 0, "abcde", 0, 0);
+  test(S("abcdefghij"), 1, 0, "abcde", 1, -1);
+  test(S("abcdefghij"), 1, 0, "abcde", 2, -2);
+  test(S("abcdefghij"), 1, 0, "abcde", 4, -4);
+  test(S("abcdefghij"), 1, 0, "abcde", 5, -5);
+  test(S("abcdefghij"), 1, 0, "abcdefghij", 0, 0);
+  test(S("abcdefghij"), 1, 0, "abcdefghij", 1, -1);
+  test(S("abcdefghij"), 1, 0, "abcdefghij", 5, -5);
+  test(S("abcdefghij"), 1, 0, "abcdefghij", 9, -9);
+  test(S("abcdefghij"), 1, 0, "abcdefghij", 10, -10);
+  test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcdefghij"), 1, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcdefghij"), 1, 1, "", 0, 1);
+  test(S("abcdefghij"), 1, 1, "abcde", 0, 1);
+  test(S("abcdefghij"), 1, 1, "abcde", 1, 1);
+  test(S("abcdefghij"), 1, 1, "abcde", 2, 1);
+  test(S("abcdefghij"), 1, 1, "abcde", 4, 1);
+  test(S("abcdefghij"), 1, 1, "abcde", 5, 1);
+  test(S("abcdefghij"), 1, 1, "abcdefghij", 0, 1);
+  test(S("abcdefghij"), 1, 1, "abcdefghij", 1, 1);
+  test(S("abcdefghij"), 1, 1, "abcdefghij", 5, 1);
+  test(S("abcdefghij"), 1, 1, "abcdefghij", 9, 1);
+  test(S("abcdefghij"), 1, 1, "abcdefghij", 10, 1);
+  test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcdefghij"), 1, 1, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcdefghij"), 1, 4, "", 0, 4);
+  test(S("abcdefghij"), 1, 4, "abcde", 0, 4);
+  test(S("abcdefghij"), 1, 4, "abcde", 1, 1);
+  test(S("abcdefghij"), 1, 4, "abcde", 2, 1);
+  test(S("abcdefghij"), 1, 4, "abcde", 4, 1);
+  test(S("abcdefghij"), 1, 4, "abcde", 5, 1);
+  test(S("abcdefghij"), 1, 4, "abcdefghij", 0, 4);
+  test(S("abcdefghij"), 1, 4, "abcdefghij", 1, 1);
+  test(S("abcdefghij"), 1, 4, "abcdefghij", 5, 1);
+  test(S("abcdefghij"), 1, 4, "abcdefghij", 9, 1);
+  test(S("abcdefghij"), 1, 4, "abcdefghij", 10, 1);
+  test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 0, 4);
+  test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcdefghij"), 1, 4, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcdefghij"), 1, 8, "", 0, 8);
+  test(S("abcdefghij"), 1, 8, "abcde", 0, 8);
+  test(S("abcdefghij"), 1, 8, "abcde", 1, 1);
+  test(S("abcdefghij"), 1, 8, "abcde", 2, 1);
+  test(S("abcdefghij"), 1, 8, "abcde", 4, 1);
+  test(S("abcdefghij"), 1, 8, "abcde", 5, 1);
+  test(S("abcdefghij"), 1, 8, "abcdefghij", 0, 8);
+  test(S("abcdefghij"), 1, 8, "abcdefghij", 1, 1);
+  test(S("abcdefghij"), 1, 8, "abcdefghij", 5, 1);
+  test(S("abcdefghij"), 1, 8, "abcdefghij", 9, 1);
+  test(S("abcdefghij"), 1, 8, "abcdefghij", 10, 1);
+  test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 0, 8);
+  test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcdefghij"), 1, 8, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcdefghij"), 1, 9, "", 0, 9);
+  test(S("abcdefghij"), 1, 9, "abcde", 0, 9);
+  test(S("abcdefghij"), 1, 9, "abcde", 1, 1);
+  test(S("abcdefghij"), 1, 9, "abcde", 2, 1);
+  test(S("abcdefghij"), 1, 9, "abcde", 4, 1);
+  test(S("abcdefghij"), 1, 9, "abcde", 5, 1);
+  test(S("abcdefghij"), 1, 9, "abcdefghij", 0, 9);
+  test(S("abcdefghij"), 1, 9, "abcdefghij", 1, 1);
+  test(S("abcdefghij"), 1, 9, "abcdefghij", 5, 1);
+  test(S("abcdefghij"), 1, 9, "abcdefghij", 9, 1);
+  test(S("abcdefghij"), 1, 9, "abcdefghij", 10, 1);
+  test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 0, 9);
+  test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcdefghij"), 1, 9, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcdefghij"), 1, 10, "", 0, 9);
+  test(S("abcdefghij"), 1, 10, "abcde", 0, 9);
+  test(S("abcdefghij"), 1, 10, "abcde", 1, 1);
+  test(S("abcdefghij"), 1, 10, "abcde", 2, 1);
+  test(S("abcdefghij"), 1, 10, "abcde", 4, 1);
+  test(S("abcdefghij"), 1, 10, "abcde", 5, 1);
+  test(S("abcdefghij"), 1, 10, "abcdefghij", 0, 9);
+  test(S("abcdefghij"), 1, 10, "abcdefghij", 1, 1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test6()
-{
-    test(S("abcdefghij"), 1, 10, "abcdefghij", 5, 1);
-    test(S("abcdefghij"), 1, 10, "abcdefghij", 9, 1);
-    test(S("abcdefghij"), 1, 10, "abcdefghij", 10, 1);
-    test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 0, 9);
-    test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcdefghij"), 5, 0, "", 0, 0);
-    test(S("abcdefghij"), 5, 0, "abcde", 0, 0);
-    test(S("abcdefghij"), 5, 0, "abcde", 1, -1);
-    test(S("abcdefghij"), 5, 0, "abcde", 2, -2);
-    test(S("abcdefghij"), 5, 0, "abcde", 4, -4);
-    test(S("abcdefghij"), 5, 0, "abcde", 5, -5);
-    test(S("abcdefghij"), 5, 0, "abcdefghij", 0, 0);
-    test(S("abcdefghij"), 5, 0, "abcdefghij", 1, -1);
-    test(S("abcdefghij"), 5, 0, "abcdefghij", 5, -5);
-    test(S("abcdefghij"), 5, 0, "abcdefghij", 9, -9);
-    test(S("abcdefghij"), 5, 0, "abcdefghij", 10, -10);
-    test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcdefghij"), 5, 1, "", 0, 1);
-    test(S("abcdefghij"), 5, 1, "abcde", 0, 1);
-    test(S("abcdefghij"), 5, 1, "abcde", 1, 5);
-    test(S("abcdefghij"), 5, 1, "abcde", 2, 5);
-    test(S("abcdefghij"), 5, 1, "abcde", 4, 5);
-    test(S("abcdefghij"), 5, 1, "abcde", 5, 5);
-    test(S("abcdefghij"), 5, 1, "abcdefghij", 0, 1);
-    test(S("abcdefghij"), 5, 1, "abcdefghij", 1, 5);
-    test(S("abcdefghij"), 5, 1, "abcdefghij", 5, 5);
-    test(S("abcdefghij"), 5, 1, "abcdefghij", 9, 5);
-    test(S("abcdefghij"), 5, 1, "abcdefghij", 10, 5);
-    test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 1, 5);
-    test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 10, 5);
-    test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 19, 5);
-    test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 20, 5);
-    test(S("abcdefghij"), 5, 2, "", 0, 2);
-    test(S("abcdefghij"), 5, 2, "abcde", 0, 2);
-    test(S("abcdefghij"), 5, 2, "abcde", 1, 5);
-    test(S("abcdefghij"), 5, 2, "abcde", 2, 5);
-    test(S("abcdefghij"), 5, 2, "abcde", 4, 5);
-    test(S("abcdefghij"), 5, 2, "abcde", 5, 5);
-    test(S("abcdefghij"), 5, 2, "abcdefghij", 0, 2);
-    test(S("abcdefghij"), 5, 2, "abcdefghij", 1, 5);
-    test(S("abcdefghij"), 5, 2, "abcdefghij", 5, 5);
-    test(S("abcdefghij"), 5, 2, "abcdefghij", 9, 5);
-    test(S("abcdefghij"), 5, 2, "abcdefghij", 10, 5);
-    test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 0, 2);
-    test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 1, 5);
-    test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 10, 5);
-    test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 19, 5);
-    test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 20, 5);
-    test(S("abcdefghij"), 5, 4, "", 0, 4);
-    test(S("abcdefghij"), 5, 4, "abcde", 0, 4);
-    test(S("abcdefghij"), 5, 4, "abcde", 1, 5);
-    test(S("abcdefghij"), 5, 4, "abcde", 2, 5);
-    test(S("abcdefghij"), 5, 4, "abcde", 4, 5);
-    test(S("abcdefghij"), 5, 4, "abcde", 5, 5);
-    test(S("abcdefghij"), 5, 4, "abcdefghij", 0, 4);
-    test(S("abcdefghij"), 5, 4, "abcdefghij", 1, 5);
-    test(S("abcdefghij"), 5, 4, "abcdefghij", 5, 5);
-    test(S("abcdefghij"), 5, 4, "abcdefghij", 9, 5);
-    test(S("abcdefghij"), 5, 4, "abcdefghij", 10, 5);
-    test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 0, 4);
-    test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 1, 5);
-    test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 10, 5);
-    test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 19, 5);
-    test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 20, 5);
-    test(S("abcdefghij"), 5, 5, "", 0, 5);
-    test(S("abcdefghij"), 5, 5, "abcde", 0, 5);
-    test(S("abcdefghij"), 5, 5, "abcde", 1, 5);
-    test(S("abcdefghij"), 5, 5, "abcde", 2, 5);
-    test(S("abcdefghij"), 5, 5, "abcde", 4, 5);
-    test(S("abcdefghij"), 5, 5, "abcde", 5, 5);
-    test(S("abcdefghij"), 5, 5, "abcdefghij", 0, 5);
-    test(S("abcdefghij"), 5, 5, "abcdefghij", 1, 5);
-    test(S("abcdefghij"), 5, 5, "abcdefghij", 5, 5);
-    test(S("abcdefghij"), 5, 5, "abcdefghij", 9, 5);
-    test(S("abcdefghij"), 5, 5, "abcdefghij", 10, 5);
-    test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 0, 5);
-    test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 1, 5);
-    test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 10, 5);
-    test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 19, 5);
-    test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 20, 5);
-    test(S("abcdefghij"), 5, 6, "", 0, 5);
-    test(S("abcdefghij"), 5, 6, "abcde", 0, 5);
-    test(S("abcdefghij"), 5, 6, "abcde", 1, 5);
-    test(S("abcdefghij"), 5, 6, "abcde", 2, 5);
-    test(S("abcdefghij"), 5, 6, "abcde", 4, 5);
-    test(S("abcdefghij"), 5, 6, "abcde", 5, 5);
-    test(S("abcdefghij"), 5, 6, "abcdefghij", 0, 5);
-    test(S("abcdefghij"), 5, 6, "abcdefghij", 1, 5);
-    test(S("abcdefghij"), 5, 6, "abcdefghij", 5, 5);
-    test(S("abcdefghij"), 5, 6, "abcdefghij", 9, 5);
-    test(S("abcdefghij"), 5, 6, "abcdefghij", 10, 5);
-    test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 0, 5);
+TEST_CONSTEXPR_CXX20 bool test6() {
+  test(S("abcdefghij"), 1, 10, "abcdefghij", 5, 1);
+  test(S("abcdefghij"), 1, 10, "abcdefghij", 9, 1);
+  test(S("abcdefghij"), 1, 10, "abcdefghij", 10, 1);
+  test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 0, 9);
+  test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcdefghij"), 1, 10, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcdefghij"), 5, 0, "", 0, 0);
+  test(S("abcdefghij"), 5, 0, "abcde", 0, 0);
+  test(S("abcdefghij"), 5, 0, "abcde", 1, -1);
+  test(S("abcdefghij"), 5, 0, "abcde", 2, -2);
+  test(S("abcdefghij"), 5, 0, "abcde", 4, -4);
+  test(S("abcdefghij"), 5, 0, "abcde", 5, -5);
+  test(S("abcdefghij"), 5, 0, "abcdefghij", 0, 0);
+  test(S("abcdefghij"), 5, 0, "abcdefghij", 1, -1);
+  test(S("abcdefghij"), 5, 0, "abcdefghij", 5, -5);
+  test(S("abcdefghij"), 5, 0, "abcdefghij", 9, -9);
+  test(S("abcdefghij"), 5, 0, "abcdefghij", 10, -10);
+  test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcdefghij"), 5, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcdefghij"), 5, 1, "", 0, 1);
+  test(S("abcdefghij"), 5, 1, "abcde", 0, 1);
+  test(S("abcdefghij"), 5, 1, "abcde", 1, 5);
+  test(S("abcdefghij"), 5, 1, "abcde", 2, 5);
+  test(S("abcdefghij"), 5, 1, "abcde", 4, 5);
+  test(S("abcdefghij"), 5, 1, "abcde", 5, 5);
+  test(S("abcdefghij"), 5, 1, "abcdefghij", 0, 1);
+  test(S("abcdefghij"), 5, 1, "abcdefghij", 1, 5);
+  test(S("abcdefghij"), 5, 1, "abcdefghij", 5, 5);
+  test(S("abcdefghij"), 5, 1, "abcdefghij", 9, 5);
+  test(S("abcdefghij"), 5, 1, "abcdefghij", 10, 5);
+  test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 1, 5);
+  test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 10, 5);
+  test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 19, 5);
+  test(S("abcdefghij"), 5, 1, "abcdefghijklmnopqrst", 20, 5);
+  test(S("abcdefghij"), 5, 2, "", 0, 2);
+  test(S("abcdefghij"), 5, 2, "abcde", 0, 2);
+  test(S("abcdefghij"), 5, 2, "abcde", 1, 5);
+  test(S("abcdefghij"), 5, 2, "abcde", 2, 5);
+  test(S("abcdefghij"), 5, 2, "abcde", 4, 5);
+  test(S("abcdefghij"), 5, 2, "abcde", 5, 5);
+  test(S("abcdefghij"), 5, 2, "abcdefghij", 0, 2);
+  test(S("abcdefghij"), 5, 2, "abcdefghij", 1, 5);
+  test(S("abcdefghij"), 5, 2, "abcdefghij", 5, 5);
+  test(S("abcdefghij"), 5, 2, "abcdefghij", 9, 5);
+  test(S("abcdefghij"), 5, 2, "abcdefghij", 10, 5);
+  test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 0, 2);
+  test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 1, 5);
+  test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 10, 5);
+  test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 19, 5);
+  test(S("abcdefghij"), 5, 2, "abcdefghijklmnopqrst", 20, 5);
+  test(S("abcdefghij"), 5, 4, "", 0, 4);
+  test(S("abcdefghij"), 5, 4, "abcde", 0, 4);
+  test(S("abcdefghij"), 5, 4, "abcde", 1, 5);
+  test(S("abcdefghij"), 5, 4, "abcde", 2, 5);
+  test(S("abcdefghij"), 5, 4, "abcde", 4, 5);
+  test(S("abcdefghij"), 5, 4, "abcde", 5, 5);
+  test(S("abcdefghij"), 5, 4, "abcdefghij", 0, 4);
+  test(S("abcdefghij"), 5, 4, "abcdefghij", 1, 5);
+  test(S("abcdefghij"), 5, 4, "abcdefghij", 5, 5);
+  test(S("abcdefghij"), 5, 4, "abcdefghij", 9, 5);
+  test(S("abcdefghij"), 5, 4, "abcdefghij", 10, 5);
+  test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 0, 4);
+  test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 1, 5);
+  test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 10, 5);
+  test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 19, 5);
+  test(S("abcdefghij"), 5, 4, "abcdefghijklmnopqrst", 20, 5);
+  test(S("abcdefghij"), 5, 5, "", 0, 5);
+  test(S("abcdefghij"), 5, 5, "abcde", 0, 5);
+  test(S("abcdefghij"), 5, 5, "abcde", 1, 5);
+  test(S("abcdefghij"), 5, 5, "abcde", 2, 5);
+  test(S("abcdefghij"), 5, 5, "abcde", 4, 5);
+  test(S("abcdefghij"), 5, 5, "abcde", 5, 5);
+  test(S("abcdefghij"), 5, 5, "abcdefghij", 0, 5);
+  test(S("abcdefghij"), 5, 5, "abcdefghij", 1, 5);
+  test(S("abcdefghij"), 5, 5, "abcdefghij", 5, 5);
+  test(S("abcdefghij"), 5, 5, "abcdefghij", 9, 5);
+  test(S("abcdefghij"), 5, 5, "abcdefghij", 10, 5);
+  test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 0, 5);
+  test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 1, 5);
+  test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 10, 5);
+  test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 19, 5);
+  test(S("abcdefghij"), 5, 5, "abcdefghijklmnopqrst", 20, 5);
+  test(S("abcdefghij"), 5, 6, "", 0, 5);
+  test(S("abcdefghij"), 5, 6, "abcde", 0, 5);
+  test(S("abcdefghij"), 5, 6, "abcde", 1, 5);
+  test(S("abcdefghij"), 5, 6, "abcde", 2, 5);
+  test(S("abcdefghij"), 5, 6, "abcde", 4, 5);
+  test(S("abcdefghij"), 5, 6, "abcde", 5, 5);
+  test(S("abcdefghij"), 5, 6, "abcdefghij", 0, 5);
+  test(S("abcdefghij"), 5, 6, "abcdefghij", 1, 5);
+  test(S("abcdefghij"), 5, 6, "abcdefghij", 5, 5);
+  test(S("abcdefghij"), 5, 6, "abcdefghij", 9, 5);
+  test(S("abcdefghij"), 5, 6, "abcdefghij", 10, 5);
+  test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 0, 5);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test7()
-{
-    test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 1, 5);
-    test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 10, 5);
-    test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 19, 5);
-    test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 20, 5);
-    test(S("abcdefghij"), 9, 0, "", 0, 0);
-    test(S("abcdefghij"), 9, 0, "abcde", 0, 0);
-    test(S("abcdefghij"), 9, 0, "abcde", 1, -1);
-    test(S("abcdefghij"), 9, 0, "abcde", 2, -2);
-    test(S("abcdefghij"), 9, 0, "abcde", 4, -4);
-    test(S("abcdefghij"), 9, 0, "abcde", 5, -5);
-    test(S("abcdefghij"), 9, 0, "abcdefghij", 0, 0);
-    test(S("abcdefghij"), 9, 0, "abcdefghij", 1, -1);
-    test(S("abcdefghij"), 9, 0, "abcdefghij", 5, -5);
-    test(S("abcdefghij"), 9, 0, "abcdefghij", 9, -9);
-    test(S("abcdefghij"), 9, 0, "abcdefghij", 10, -10);
-    test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcdefghij"), 9, 1, "", 0, 1);
-    test(S("abcdefghij"), 9, 1, "abcde", 0, 1);
-    test(S("abcdefghij"), 9, 1, "abcde", 1, 9);
-    test(S("abcdefghij"), 9, 1, "abcde", 2, 9);
-    test(S("abcdefghij"), 9, 1, "abcde", 4, 9);
-    test(S("abcdefghij"), 9, 1, "abcde", 5, 9);
-    test(S("abcdefghij"), 9, 1, "abcdefghij", 0, 1);
-    test(S("abcdefghij"), 9, 1, "abcdefghij", 1, 9);
-    test(S("abcdefghij"), 9, 1, "abcdefghij", 5, 9);
-    test(S("abcdefghij"), 9, 1, "abcdefghij", 9, 9);
-    test(S("abcdefghij"), 9, 1, "abcdefghij", 10, 9);
-    test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 1, 9);
-    test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 10, 9);
-    test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 19, 9);
-    test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 20, 9);
-    test(S("abcdefghij"), 9, 2, "", 0, 1);
-    test(S("abcdefghij"), 9, 2, "abcde", 0, 1);
-    test(S("abcdefghij"), 9, 2, "abcde", 1, 9);
-    test(S("abcdefghij"), 9, 2, "abcde", 2, 9);
-    test(S("abcdefghij"), 9, 2, "abcde", 4, 9);
-    test(S("abcdefghij"), 9, 2, "abcde", 5, 9);
-    test(S("abcdefghij"), 9, 2, "abcdefghij", 0, 1);
-    test(S("abcdefghij"), 9, 2, "abcdefghij", 1, 9);
-    test(S("abcdefghij"), 9, 2, "abcdefghij", 5, 9);
-    test(S("abcdefghij"), 9, 2, "abcdefghij", 9, 9);
-    test(S("abcdefghij"), 9, 2, "abcdefghij", 10, 9);
-    test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 1, 9);
-    test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 10, 9);
-    test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 19, 9);
-    test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 20, 9);
-    test(S("abcdefghij"), 10, 0, "", 0, 0);
-    test(S("abcdefghij"), 10, 0, "abcde", 0, 0);
-    test(S("abcdefghij"), 10, 0, "abcde", 1, -1);
-    test(S("abcdefghij"), 10, 0, "abcde", 2, -2);
-    test(S("abcdefghij"), 10, 0, "abcde", 4, -4);
-    test(S("abcdefghij"), 10, 0, "abcde", 5, -5);
-    test(S("abcdefghij"), 10, 0, "abcdefghij", 0, 0);
-    test(S("abcdefghij"), 10, 0, "abcdefghij", 1, -1);
-    test(S("abcdefghij"), 10, 0, "abcdefghij", 5, -5);
-    test(S("abcdefghij"), 10, 0, "abcdefghij", 9, -9);
-    test(S("abcdefghij"), 10, 0, "abcdefghij", 10, -10);
-    test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcdefghij"), 10, 1, "", 0, 0);
-    test(S("abcdefghij"), 10, 1, "abcde", 0, 0);
-    test(S("abcdefghij"), 10, 1, "abcde", 1, -1);
-    test(S("abcdefghij"), 10, 1, "abcde", 2, -2);
-    test(S("abcdefghij"), 10, 1, "abcde", 4, -4);
-    test(S("abcdefghij"), 10, 1, "abcde", 5, -5);
-    test(S("abcdefghij"), 10, 1, "abcdefghij", 0, 0);
-    test(S("abcdefghij"), 10, 1, "abcdefghij", 1, -1);
-    test(S("abcdefghij"), 10, 1, "abcdefghij", 5, -5);
-    test(S("abcdefghij"), 10, 1, "abcdefghij", 9, -9);
-    test(S("abcdefghij"), 10, 1, "abcdefghij", 10, -10);
-    test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcdefghij"), 11, 0, "", 0, 0);
-    test(S("abcdefghij"), 11, 0, "abcde", 0, 0);
-    test(S("abcdefghij"), 11, 0, "abcde", 1, 0);
-    test(S("abcdefghij"), 11, 0, "abcde", 2, 0);
-    test(S("abcdefghij"), 11, 0, "abcde", 4, 0);
-    test(S("abcdefghij"), 11, 0, "abcde", 5, 0);
-    test(S("abcdefghij"), 11, 0, "abcdefghij", 0, 0);
-    test(S("abcdefghij"), 11, 0, "abcdefghij", 1, 0);
-    test(S("abcdefghij"), 11, 0, "abcdefghij", 5, 0);
-    test(S("abcdefghij"), 11, 0, "abcdefghij", 9, 0);
-    test(S("abcdefghij"), 11, 0, "abcdefghij", 10, 0);
-    test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 1, 0);
-    test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 10, 0);
-    test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 19, 0);
-    test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 20, 0);
+TEST_CONSTEXPR_CXX20 bool test7() {
+  test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 1, 5);
+  test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 10, 5);
+  test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 19, 5);
+  test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 20, 5);
+  test(S("abcdefghij"), 9, 0, "", 0, 0);
+  test(S("abcdefghij"), 9, 0, "abcde", 0, 0);
+  test(S("abcdefghij"), 9, 0, "abcde", 1, -1);
+  test(S("abcdefghij"), 9, 0, "abcde", 2, -2);
+  test(S("abcdefghij"), 9, 0, "abcde", 4, -4);
+  test(S("abcdefghij"), 9, 0, "abcde", 5, -5);
+  test(S("abcdefghij"), 9, 0, "abcdefghij", 0, 0);
+  test(S("abcdefghij"), 9, 0, "abcdefghij", 1, -1);
+  test(S("abcdefghij"), 9, 0, "abcdefghij", 5, -5);
+  test(S("abcdefghij"), 9, 0, "abcdefghij", 9, -9);
+  test(S("abcdefghij"), 9, 0, "abcdefghij", 10, -10);
+  test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcdefghij"), 9, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcdefghij"), 9, 1, "", 0, 1);
+  test(S("abcdefghij"), 9, 1, "abcde", 0, 1);
+  test(S("abcdefghij"), 9, 1, "abcde", 1, 9);
+  test(S("abcdefghij"), 9, 1, "abcde", 2, 9);
+  test(S("abcdefghij"), 9, 1, "abcde", 4, 9);
+  test(S("abcdefghij"), 9, 1, "abcde", 5, 9);
+  test(S("abcdefghij"), 9, 1, "abcdefghij", 0, 1);
+  test(S("abcdefghij"), 9, 1, "abcdefghij", 1, 9);
+  test(S("abcdefghij"), 9, 1, "abcdefghij", 5, 9);
+  test(S("abcdefghij"), 9, 1, "abcdefghij", 9, 9);
+  test(S("abcdefghij"), 9, 1, "abcdefghij", 10, 9);
+  test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 1, 9);
+  test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 10, 9);
+  test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 19, 9);
+  test(S("abcdefghij"), 9, 1, "abcdefghijklmnopqrst", 20, 9);
+  test(S("abcdefghij"), 9, 2, "", 0, 1);
+  test(S("abcdefghij"), 9, 2, "abcde", 0, 1);
+  test(S("abcdefghij"), 9, 2, "abcde", 1, 9);
+  test(S("abcdefghij"), 9, 2, "abcde", 2, 9);
+  test(S("abcdefghij"), 9, 2, "abcde", 4, 9);
+  test(S("abcdefghij"), 9, 2, "abcde", 5, 9);
+  test(S("abcdefghij"), 9, 2, "abcdefghij", 0, 1);
+  test(S("abcdefghij"), 9, 2, "abcdefghij", 1, 9);
+  test(S("abcdefghij"), 9, 2, "abcdefghij", 5, 9);
+  test(S("abcdefghij"), 9, 2, "abcdefghij", 9, 9);
+  test(S("abcdefghij"), 9, 2, "abcdefghij", 10, 9);
+  test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 1, 9);
+  test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 10, 9);
+  test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 19, 9);
+  test(S("abcdefghij"), 9, 2, "abcdefghijklmnopqrst", 20, 9);
+  test(S("abcdefghij"), 10, 0, "", 0, 0);
+  test(S("abcdefghij"), 10, 0, "abcde", 0, 0);
+  test(S("abcdefghij"), 10, 0, "abcde", 1, -1);
+  test(S("abcdefghij"), 10, 0, "abcde", 2, -2);
+  test(S("abcdefghij"), 10, 0, "abcde", 4, -4);
+  test(S("abcdefghij"), 10, 0, "abcde", 5, -5);
+  test(S("abcdefghij"), 10, 0, "abcdefghij", 0, 0);
+  test(S("abcdefghij"), 10, 0, "abcdefghij", 1, -1);
+  test(S("abcdefghij"), 10, 0, "abcdefghij", 5, -5);
+  test(S("abcdefghij"), 10, 0, "abcdefghij", 9, -9);
+  test(S("abcdefghij"), 10, 0, "abcdefghij", 10, -10);
+  test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcdefghij"), 10, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcdefghij"), 10, 1, "", 0, 0);
+  test(S("abcdefghij"), 10, 1, "abcde", 0, 0);
+  test(S("abcdefghij"), 10, 1, "abcde", 1, -1);
+  test(S("abcdefghij"), 10, 1, "abcde", 2, -2);
+  test(S("abcdefghij"), 10, 1, "abcde", 4, -4);
+  test(S("abcdefghij"), 10, 1, "abcde", 5, -5);
+  test(S("abcdefghij"), 10, 1, "abcdefghij", 0, 0);
+  test(S("abcdefghij"), 10, 1, "abcdefghij", 1, -1);
+  test(S("abcdefghij"), 10, 1, "abcdefghij", 5, -5);
+  test(S("abcdefghij"), 10, 1, "abcdefghij", 9, -9);
+  test(S("abcdefghij"), 10, 1, "abcdefghij", 10, -10);
+  test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcdefghij"), 10, 1, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcdefghij"), 11, 0, "", 0, 0);
+  test(S("abcdefghij"), 11, 0, "abcde", 0, 0);
+  test(S("abcdefghij"), 11, 0, "abcde", 1, 0);
+  test(S("abcdefghij"), 11, 0, "abcde", 2, 0);
+  test(S("abcdefghij"), 11, 0, "abcde", 4, 0);
+  test(S("abcdefghij"), 11, 0, "abcde", 5, 0);
+  test(S("abcdefghij"), 11, 0, "abcdefghij", 0, 0);
+  test(S("abcdefghij"), 11, 0, "abcdefghij", 1, 0);
+  test(S("abcdefghij"), 11, 0, "abcdefghij", 5, 0);
+  test(S("abcdefghij"), 11, 0, "abcdefghij", 9, 0);
+  test(S("abcdefghij"), 11, 0, "abcdefghij", 10, 0);
+  test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 1, 0);
+  test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 10, 0);
+  test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 19, 0);
+  test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 20, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test8()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, "", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 4, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 9, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 4, -3);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 5, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 5, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 9, -8);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 10, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 10, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 19, -18);
-    test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 20, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "", 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 1, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 2, 8);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 4, 6);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 5, 5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 1, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 5, 5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 9, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 10, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 1, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 10, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 19, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 20, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "", 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 1, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 2, 17);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 4, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 5, 14);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 1, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 5, 14);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 9, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 10, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 1, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 10, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 19, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "", 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 2, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 4, 16);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 5, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 5, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 9, 11);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 20, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "", 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 2, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 4, 16);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 5, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 5, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 9, 11);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 20, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 2, -2);
+TEST_CONSTEXPR_CXX20 bool test8() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, "", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 4, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcde", 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 9, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghij", 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 4, -3);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcde", 5, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 5, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 9, -8);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghij", 10, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 10, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 19, -18);
+  test(S("abcdefghijklmnopqrst"), 0, 1, "abcdefghijklmnopqrst", 20, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "", 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 1, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 2, 8);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 4, 6);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcde", 5, 5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 1, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 5, 5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 9, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghij", 10, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 1, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 10, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 19, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, "abcdefghijklmnopqrst", 20, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "", 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 1, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 2, 17);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 4, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcde", 5, 14);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 1, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 5, 14);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 9, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghij", 10, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 1, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 10, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 19, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 19, "abcdefghijklmnopqrst", 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "", 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 2, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 4, 16);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcde", 5, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 5, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 9, 11);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghij", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, "abcdefghijklmnopqrst", 20, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "", 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 2, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 4, 16);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcde", 5, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 5, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 9, 11);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghij", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, "abcdefghijklmnopqrst", 20, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 2, -2);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test9()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 5, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 5, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 10, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "", 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "", 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "", 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "", 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 20, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 2, -2);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 4, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 5, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 1, -1);
+TEST_CONSTEXPR_CXX20 bool test9() {
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 5, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 5, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghij", 10, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcdefghijklmnopqrst"), 1, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcde", 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghij", 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "", 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcde", 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghij", 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "", 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcde", 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghij", 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "", 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcde", 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghij", 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "", 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcde", 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghij", 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, "abcdefghijklmnopqrst", 20, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 2, -2);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 4, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcde", 5, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 1, -1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test10()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 5, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 9, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 10, -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "", 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "", 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "", 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "", 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 20, 10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 2, -2);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 4, -4);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 5, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 5, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 9, -9);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 10, -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 0, 0);
+TEST_CONSTEXPR_CXX20 bool test10() {
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 5, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 9, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 10, -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcde", 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghij", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, "abcdefghijklmnopqrst", 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "", 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcde", 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghij", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, "abcdefghijklmnopqrst", 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "", 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcde", 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghij", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, "abcdefghijklmnopqrst", 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "", 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcde", 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghij", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, "abcdefghijklmnopqrst", 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "", 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcde", 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghij", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, "abcdefghijklmnopqrst", 20, 10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 2, -2);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 4, -4);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcde", 5, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 5, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 9, -9);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghij", 10, -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 0, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test11()
-{
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 2, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 4, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 5, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 5, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 9, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 10, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 10, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 19, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 20, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 2, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 4, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 5, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 5, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 9, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 10, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 10, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 19, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 20, 19);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 19, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 20, -20);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 4, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 5, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 5, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 9, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 10, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 10, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 19, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 20, 0);
+TEST_CONSTEXPR_CXX20 bool test11() {
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 2, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 4, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcde", 5, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 5, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 9, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghij", 10, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 10, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 19, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, "abcdefghijklmnopqrst", 20, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 2, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 4, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcde", 5, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 5, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 9, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghij", 10, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 10, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 19, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, "abcdefghijklmnopqrst", 20, 19);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcde", 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghij", 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 0, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcde", 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghij", 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 19, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 1, "abcdefghijklmnopqrst", 20, -20);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 4, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcde", 5, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 5, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 9, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghij", 10, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 10, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 19, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, "abcdefghijklmnopqrst", 20, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
@@ -1349,8 +1335,7 @@ void test() {
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string.pass.cpp
index e3b5756b4e97417..c3a7d0d500e1e66 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string.pass.cpp
@@ -17,347 +17,336 @@
 #include "test_macros.h"
 #include "min_allocator.h"
 
-TEST_CONSTEXPR_CXX20 int sign(int x)
-{
-    if (x == 0)
-        return 0;
-    if (x < 0)
-        return -1;
-    return 1;
+TEST_CONSTEXPR_CXX20 int sign(int x) {
+  if (x == 0)
+    return 0;
+  if (x < 0)
+    return -1;
+  return 1;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::size_type pos1, typename S::size_type n1,
-     const S& str, int x)
-{
-    if (pos1 <= s.size())
-        assert(sign(s.compare(pos1, n1, str)) == sign(x));
+TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::size_type pos1, typename S::size_type n1, const S& str, int x) {
+  if (pos1 <= s.size())
+    assert(sign(s.compare(pos1, n1, str)) == sign(x));
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            TEST_IGNORE_NODISCARD s.compare(pos1, n1, str);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > s.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      TEST_IGNORE_NODISCARD s.compare(pos1, n1, str);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > s.size());
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), 0, 0, S(""), 0);
-    test(S(""), 0, 0, S("abcde"), -5);
-    test(S(""), 0, 0, S("abcdefghij"), -10);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S(""), 0, 1, S(""), 0);
-    test(S(""), 0, 1, S("abcde"), -5);
-    test(S(""), 0, 1, S("abcdefghij"), -10);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), -20);
-    test(S(""), 1, 0, S(""), 0);
-    test(S(""), 1, 0, S("abcde"), 0);
-    test(S(""), 1, 0, S("abcdefghij"), 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0);
-    test(S("abcde"), 0, 0, S(""), 0);
-    test(S("abcde"), 0, 0, S("abcde"), -5);
-    test(S("abcde"), 0, 0, S("abcdefghij"), -10);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcde"), 0, 1, S(""), 1);
-    test(S("abcde"), 0, 1, S("abcde"), -4);
-    test(S("abcde"), 0, 1, S("abcdefghij"), -9);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), -19);
-    test(S("abcde"), 0, 2, S(""), 2);
-    test(S("abcde"), 0, 2, S("abcde"), -3);
-    test(S("abcde"), 0, 2, S("abcdefghij"), -8);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), -18);
-    test(S("abcde"), 0, 4, S(""), 4);
-    test(S("abcde"), 0, 4, S("abcde"), -1);
-    test(S("abcde"), 0, 4, S("abcdefghij"), -6);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), -16);
-    test(S("abcde"), 0, 5, S(""), 5);
-    test(S("abcde"), 0, 5, S("abcde"), 0);
-    test(S("abcde"), 0, 5, S("abcdefghij"), -5);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), -15);
-    test(S("abcde"), 0, 6, S(""), 5);
-    test(S("abcde"), 0, 6, S("abcde"), 0);
-    test(S("abcde"), 0, 6, S("abcdefghij"), -5);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), -15);
-    test(S("abcde"), 1, 0, S(""), 0);
-    test(S("abcde"), 1, 0, S("abcde"), -5);
-    test(S("abcde"), 1, 0, S("abcdefghij"), -10);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcde"), 1, 1, S(""), 1);
-    test(S("abcde"), 1, 1, S("abcde"), 1);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 1);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcde"), 1, 2, S(""), 2);
-    test(S("abcde"), 1, 2, S("abcde"), 1);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 1);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcde"), 1, 3, S(""), 3);
-    test(S("abcde"), 1, 3, S("abcde"), 1);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 1);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcde"), 1, 4, S(""), 4);
-    test(S("abcde"), 1, 4, S("abcde"), 1);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 1);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcde"), 1, 5, S(""), 4);
-    test(S("abcde"), 1, 5, S("abcde"), 1);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 1);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcde"), 2, 0, S(""), 0);
-    test(S("abcde"), 2, 0, S("abcde"), -5);
-    test(S("abcde"), 2, 0, S("abcdefghij"), -10);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcde"), 2, 1, S(""), 1);
-    test(S("abcde"), 2, 1, S("abcde"), 2);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 2);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 2);
-    test(S("abcde"), 2, 2, S(""), 2);
-    test(S("abcde"), 2, 2, S("abcde"), 2);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 2);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 2);
-    test(S("abcde"), 2, 3, S(""), 3);
-    test(S("abcde"), 2, 3, S("abcde"), 2);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 2);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 2);
-    test(S("abcde"), 2, 4, S(""), 3);
-    test(S("abcde"), 2, 4, S("abcde"), 2);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 2);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 2);
-    test(S("abcde"), 4, 0, S(""), 0);
-    test(S("abcde"), 4, 0, S("abcde"), -5);
-    test(S("abcde"), 4, 0, S("abcdefghij"), -10);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcde"), 4, 1, S(""), 1);
-    test(S("abcde"), 4, 1, S("abcde"), 4);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 4);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 4);
-    test(S("abcde"), 4, 2, S(""), 1);
-    test(S("abcde"), 4, 2, S("abcde"), 4);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 4);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 4);
-    test(S("abcde"), 5, 0, S(""), 0);
-    test(S("abcde"), 5, 0, S("abcde"), -5);
-    test(S("abcde"), 5, 0, S("abcdefghij"), -10);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcde"), 5, 1, S(""), 0);
-    test(S("abcde"), 5, 1, S("abcde"), -5);
-    test(S("abcde"), 5, 1, S("abcdefghij"), -10);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), -20);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), 0, 0, S(""), 0);
+  test(S(""), 0, 0, S("abcde"), -5);
+  test(S(""), 0, 0, S("abcdefghij"), -10);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S(""), 0, 1, S(""), 0);
+  test(S(""), 0, 1, S("abcde"), -5);
+  test(S(""), 0, 1, S("abcdefghij"), -10);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), -20);
+  test(S(""), 1, 0, S(""), 0);
+  test(S(""), 1, 0, S("abcde"), 0);
+  test(S(""), 1, 0, S("abcdefghij"), 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0);
+  test(S("abcde"), 0, 0, S(""), 0);
+  test(S("abcde"), 0, 0, S("abcde"), -5);
+  test(S("abcde"), 0, 0, S("abcdefghij"), -10);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcde"), 0, 1, S(""), 1);
+  test(S("abcde"), 0, 1, S("abcde"), -4);
+  test(S("abcde"), 0, 1, S("abcdefghij"), -9);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), -19);
+  test(S("abcde"), 0, 2, S(""), 2);
+  test(S("abcde"), 0, 2, S("abcde"), -3);
+  test(S("abcde"), 0, 2, S("abcdefghij"), -8);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), -18);
+  test(S("abcde"), 0, 4, S(""), 4);
+  test(S("abcde"), 0, 4, S("abcde"), -1);
+  test(S("abcde"), 0, 4, S("abcdefghij"), -6);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), -16);
+  test(S("abcde"), 0, 5, S(""), 5);
+  test(S("abcde"), 0, 5, S("abcde"), 0);
+  test(S("abcde"), 0, 5, S("abcdefghij"), -5);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), -15);
+  test(S("abcde"), 0, 6, S(""), 5);
+  test(S("abcde"), 0, 6, S("abcde"), 0);
+  test(S("abcde"), 0, 6, S("abcdefghij"), -5);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), -15);
+  test(S("abcde"), 1, 0, S(""), 0);
+  test(S("abcde"), 1, 0, S("abcde"), -5);
+  test(S("abcde"), 1, 0, S("abcdefghij"), -10);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcde"), 1, 1, S(""), 1);
+  test(S("abcde"), 1, 1, S("abcde"), 1);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 1);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcde"), 1, 2, S(""), 2);
+  test(S("abcde"), 1, 2, S("abcde"), 1);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 1);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcde"), 1, 3, S(""), 3);
+  test(S("abcde"), 1, 3, S("abcde"), 1);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 1);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcde"), 1, 4, S(""), 4);
+  test(S("abcde"), 1, 4, S("abcde"), 1);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 1);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcde"), 1, 5, S(""), 4);
+  test(S("abcde"), 1, 5, S("abcde"), 1);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 1);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcde"), 2, 0, S(""), 0);
+  test(S("abcde"), 2, 0, S("abcde"), -5);
+  test(S("abcde"), 2, 0, S("abcdefghij"), -10);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcde"), 2, 1, S(""), 1);
+  test(S("abcde"), 2, 1, S("abcde"), 2);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 2);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 2);
+  test(S("abcde"), 2, 2, S(""), 2);
+  test(S("abcde"), 2, 2, S("abcde"), 2);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 2);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 2);
+  test(S("abcde"), 2, 3, S(""), 3);
+  test(S("abcde"), 2, 3, S("abcde"), 2);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 2);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 2);
+  test(S("abcde"), 2, 4, S(""), 3);
+  test(S("abcde"), 2, 4, S("abcde"), 2);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 2);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 2);
+  test(S("abcde"), 4, 0, S(""), 0);
+  test(S("abcde"), 4, 0, S("abcde"), -5);
+  test(S("abcde"), 4, 0, S("abcdefghij"), -10);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcde"), 4, 1, S(""), 1);
+  test(S("abcde"), 4, 1, S("abcde"), 4);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 4);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 4);
+  test(S("abcde"), 4, 2, S(""), 1);
+  test(S("abcde"), 4, 2, S("abcde"), 4);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 4);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 4);
+  test(S("abcde"), 5, 0, S(""), 0);
+  test(S("abcde"), 5, 0, S("abcde"), -5);
+  test(S("abcde"), 5, 0, S("abcdefghij"), -10);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcde"), 5, 1, S(""), 0);
+  test(S("abcde"), 5, 1, S("abcde"), -5);
+  test(S("abcde"), 5, 1, S("abcdefghij"), -10);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), -20);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S("abcde"), 6, 0, S(""), 0);
-    test(S("abcde"), 6, 0, S("abcde"), 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0);
-    test(S("abcdefghij"), 0, 0, S(""), 0);
-    test(S("abcdefghij"), 0, 0, S("abcde"), -5);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), -10);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghij"), 0, 1, S(""), 1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), -4);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), -9);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), -19);
-    test(S("abcdefghij"), 0, 5, S(""), 5);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 0);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), -5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), -15);
-    test(S("abcdefghij"), 0, 9, S(""), 9);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 4);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), -11);
-    test(S("abcdefghij"), 0, 10, S(""), 10);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 5);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), -10);
-    test(S("abcdefghij"), 0, 11, S(""), 10);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 5);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), -10);
-    test(S("abcdefghij"), 1, 0, S(""), 0);
-    test(S("abcdefghij"), 1, 0, S("abcde"), -5);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), -10);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghij"), 1, 1, S(""), 1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghij"), 1, 4, S(""), 4);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 1);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghij"), 1, 8, S(""), 8);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghij"), 1, 9, S(""), 9);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 1);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghij"), 1, 10, S(""), 9);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghij"), 5, 0, S(""), 0);
-    test(S("abcdefghij"), 5, 0, S("abcde"), -5);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), -10);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghij"), 5, 1, S(""), 1);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 5);
-    test(S("abcdefghij"), 5, 2, S(""), 2);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 5);
-    test(S("abcdefghij"), 5, 4, S(""), 4);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 5);
-    test(S("abcdefghij"), 5, 5, S(""), 5);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 5);
-    test(S("abcdefghij"), 5, 6, S(""), 5);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 5);
-    test(S("abcdefghij"), 9, 0, S(""), 0);
-    test(S("abcdefghij"), 9, 0, S("abcde"), -5);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), -10);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghij"), 9, 1, S(""), 1);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 9);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 9);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 9);
-    test(S("abcdefghij"), 9, 2, S(""), 1);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 9);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 9);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 9);
-    test(S("abcdefghij"), 10, 0, S(""), 0);
-    test(S("abcdefghij"), 10, 0, S("abcde"), -5);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), -10);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghij"), 10, 1, S(""), 0);
-    test(S("abcdefghij"), 10, 1, S("abcde"), -5);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), -10);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghij"), 11, 0, S(""), 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S("abcde"), 6, 0, S(""), 0);
+  test(S("abcde"), 6, 0, S("abcde"), 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0);
+  test(S("abcdefghij"), 0, 0, S(""), 0);
+  test(S("abcdefghij"), 0, 0, S("abcde"), -5);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), -10);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghij"), 0, 1, S(""), 1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), -4);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), -9);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), -19);
+  test(S("abcdefghij"), 0, 5, S(""), 5);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 0);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), -5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), -15);
+  test(S("abcdefghij"), 0, 9, S(""), 9);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 4);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), -11);
+  test(S("abcdefghij"), 0, 10, S(""), 10);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 5);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), -10);
+  test(S("abcdefghij"), 0, 11, S(""), 10);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 5);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), -10);
+  test(S("abcdefghij"), 1, 0, S(""), 0);
+  test(S("abcdefghij"), 1, 0, S("abcde"), -5);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), -10);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghij"), 1, 1, S(""), 1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghij"), 1, 4, S(""), 4);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 1);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghij"), 1, 8, S(""), 8);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghij"), 1, 9, S(""), 9);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 1);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghij"), 1, 10, S(""), 9);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghij"), 5, 0, S(""), 0);
+  test(S("abcdefghij"), 5, 0, S("abcde"), -5);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), -10);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghij"), 5, 1, S(""), 1);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 5);
+  test(S("abcdefghij"), 5, 2, S(""), 2);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 5);
+  test(S("abcdefghij"), 5, 4, S(""), 4);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 5);
+  test(S("abcdefghij"), 5, 5, S(""), 5);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 5);
+  test(S("abcdefghij"), 5, 6, S(""), 5);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 5);
+  test(S("abcdefghij"), 9, 0, S(""), 0);
+  test(S("abcdefghij"), 9, 0, S("abcde"), -5);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), -10);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghij"), 9, 1, S(""), 1);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 9);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 9);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 9);
+  test(S("abcdefghij"), 9, 2, S(""), 1);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 9);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 9);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 9);
+  test(S("abcdefghij"), 10, 0, S(""), 0);
+  test(S("abcdefghij"), 10, 0, S("abcde"), -5);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), -10);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghij"), 10, 1, S(""), 0);
+  test(S("abcdefghij"), 10, 1, S("abcde"), -5);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), -10);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghij"), 11, 0, S(""), 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test2()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), -19);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 14);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 15);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 15);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 19);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0);
+TEST_CONSTEXPR_CXX20 void test2() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), -19);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 14);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 15);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 15);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 19);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -386,8 +375,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_size_size.pass.cpp
index 33d780e695a577c..f5d70b93c979f94 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_size_size.pass.cpp
@@ -22,5932 +22,5869 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 int sign(int x)
-{
-    if (x == 0)
-        return 0;
-    if (x < 0)
-        return -1;
-    return 1;
+TEST_CONSTEXPR_CXX20 int sign(int x) {
+  if (x == 0)
+    return 0;
+  if (x < 0)
+    return -1;
+  return 1;
 }
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s,   typename S::size_type pos1, typename S::size_type n1,
-     const S& str, typename S::size_type pos2, typename S::size_type n2, int x)
-{
-    if (pos1 <= s.size() && pos2 <= str.size())
-        assert(sign(s.compare(pos1, n1, str, pos2, n2)) == sign(x));
+test(const S& s,
+     typename S::size_type pos1,
+     typename S::size_type n1,
+     const S& str,
+     typename S::size_type pos2,
+     typename S::size_type n2,
+     int x) {
+  if (pos1 <= s.size() && pos2 <= str.size())
+    assert(sign(s.compare(pos1, n1, str, pos2, n2)) == sign(x));
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            TEST_IGNORE_NODISCARD s.compare(pos1, n1, str, pos2, n2);
-            assert(false);
-        }
-        catch (const std::out_of_range&)
-        {
-            assert(pos1 > s.size() || pos2 > str.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      TEST_IGNORE_NODISCARD s.compare(pos1, n1, str, pos2, n2);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(pos1 > s.size() || pos2 > str.size());
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test_npos(const S& s,   typename S::size_type pos1, typename S::size_type n1,
-          const S& str, typename S::size_type pos2, int x)
-{
-    if (pos1 <= s.size() && pos2 <= str.size())
-        assert(sign(s.compare(pos1, n1, str, pos2)) == sign(x));
+TEST_CONSTEXPR_CXX20 void test_npos(
+    const S& s, typename S::size_type pos1, typename S::size_type n1, const S& str, typename S::size_type pos2, int x) {
+  if (pos1 <= s.size() && pos2 <= str.size())
+    assert(sign(s.compare(pos1, n1, str, pos2)) == sign(x));
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            TEST_IGNORE_NODISCARD s.compare(pos1, n1, str, pos2);
-            assert(false);
-        }
-        catch (const std::out_of_range&)
-        {
-            assert(pos1 > s.size() || pos2 > str.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      TEST_IGNORE_NODISCARD s.compare(pos1, n1, str, pos2);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(pos1 > s.size() || pos2 > str.size());
     }
+  }
 #endif
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test0()
-{
-    test(S(""), 0, 0, S(""), 0, 0, 0);
-    test(S(""), 0, 0, S(""), 0, 1, 0);
-    test(S(""), 0, 0, S(""), 1, 0, 0);
-    test(S(""), 0, 0, S("abcde"), 0, 0, 0);
-    test(S(""), 0, 0, S("abcde"), 0, 1, -1);
-    test(S(""), 0, 0, S("abcde"), 0, 2, -2);
-    test(S(""), 0, 0, S("abcde"), 0, 4, -4);
-    test(S(""), 0, 0, S("abcde"), 0, 5, -5);
-    test(S(""), 0, 0, S("abcde"), 0, 6, -5);
-    test(S(""), 0, 0, S("abcde"), 1, 0, 0);
-    test(S(""), 0, 0, S("abcde"), 1, 1, -1);
-    test(S(""), 0, 0, S("abcde"), 1, 2, -2);
-    test(S(""), 0, 0, S("abcde"), 1, 3, -3);
-    test(S(""), 0, 0, S("abcde"), 1, 4, -4);
-    test(S(""), 0, 0, S("abcde"), 1, 5, -4);
-    test(S(""), 0, 0, S("abcde"), 2, 0, 0);
-    test(S(""), 0, 0, S("abcde"), 2, 1, -1);
-    test(S(""), 0, 0, S("abcde"), 2, 2, -2);
-    test(S(""), 0, 0, S("abcde"), 2, 3, -3);
-    test(S(""), 0, 0, S("abcde"), 2, 4, -3);
-    test(S(""), 0, 0, S("abcde"), 4, 0, 0);
-    test(S(""), 0, 0, S("abcde"), 4, 1, -1);
-    test(S(""), 0, 0, S("abcde"), 4, 2, -1);
-    test(S(""), 0, 0, S("abcde"), 5, 0, 0);
-    test(S(""), 0, 0, S("abcde"), 5, 1, 0);
-    test(S(""), 0, 0, S("abcde"), 6, 0, 0);
-    test(S(""), 0, 0, S("abcdefghij"), 0, 0, 0);
-    test(S(""), 0, 0, S("abcdefghij"), 0, 1, -1);
-    test(S(""), 0, 0, S("abcdefghij"), 0, 5, -5);
-    test(S(""), 0, 0, S("abcdefghij"), 0, 9, -9);
-    test(S(""), 0, 0, S("abcdefghij"), 0, 10, -10);
-    test(S(""), 0, 0, S("abcdefghij"), 0, 11, -10);
-    test(S(""), 0, 0, S("abcdefghij"), 1, 0, 0);
-    test(S(""), 0, 0, S("abcdefghij"), 1, 1, -1);
-    test(S(""), 0, 0, S("abcdefghij"), 1, 4, -4);
-    test(S(""), 0, 0, S("abcdefghij"), 1, 8, -8);
-    test(S(""), 0, 0, S("abcdefghij"), 1, 9, -9);
-    test(S(""), 0, 0, S("abcdefghij"), 1, 10, -9);
-    test(S(""), 0, 0, S("abcdefghij"), 5, 0, 0);
-    test(S(""), 0, 0, S("abcdefghij"), 5, 1, -1);
-    test(S(""), 0, 0, S("abcdefghij"), 5, 2, -2);
-    test(S(""), 0, 0, S("abcdefghij"), 5, 4, -4);
-    test(S(""), 0, 0, S("abcdefghij"), 5, 5, -5);
-    test(S(""), 0, 0, S("abcdefghij"), 5, 6, -5);
-    test(S(""), 0, 0, S("abcdefghij"), 9, 0, 0);
-    test(S(""), 0, 0, S("abcdefghij"), 9, 1, -1);
-    test(S(""), 0, 0, S("abcdefghij"), 9, 2, -1);
-    test(S(""), 0, 0, S("abcdefghij"), 10, 0, 0);
-    test(S(""), 0, 0, S("abcdefghij"), 10, 1, 0);
-    test(S(""), 0, 0, S("abcdefghij"), 11, 0, 0);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S(""), 0, 1, S(""), 0, 0, 0);
-    test(S(""), 0, 1, S(""), 0, 1, 0);
-    test(S(""), 0, 1, S(""), 1, 0, 0);
-    test(S(""), 0, 1, S("abcde"), 0, 0, 0);
-    test(S(""), 0, 1, S("abcde"), 0, 1, -1);
-    test(S(""), 0, 1, S("abcde"), 0, 2, -2);
-    test(S(""), 0, 1, S("abcde"), 0, 4, -4);
-    test(S(""), 0, 1, S("abcde"), 0, 5, -5);
-    test(S(""), 0, 1, S("abcde"), 0, 6, -5);
-    test(S(""), 0, 1, S("abcde"), 1, 0, 0);
-    test(S(""), 0, 1, S("abcde"), 1, 1, -1);
-    test(S(""), 0, 1, S("abcde"), 1, 2, -2);
-    test(S(""), 0, 1, S("abcde"), 1, 3, -3);
-    test(S(""), 0, 1, S("abcde"), 1, 4, -4);
-    test(S(""), 0, 1, S("abcde"), 1, 5, -4);
-    test(S(""), 0, 1, S("abcde"), 2, 0, 0);
-    test(S(""), 0, 1, S("abcde"), 2, 1, -1);
-    test(S(""), 0, 1, S("abcde"), 2, 2, -2);
-    test(S(""), 0, 1, S("abcde"), 2, 3, -3);
-    test(S(""), 0, 1, S("abcde"), 2, 4, -3);
-    test(S(""), 0, 1, S("abcde"), 4, 0, 0);
-    test(S(""), 0, 1, S("abcde"), 4, 1, -1);
-    test(S(""), 0, 1, S("abcde"), 4, 2, -1);
-    test(S(""), 0, 1, S("abcde"), 5, 0, 0);
-    test(S(""), 0, 1, S("abcde"), 5, 1, 0);
-    test(S(""), 0, 1, S("abcde"), 6, 0, 0);
+TEST_CONSTEXPR_CXX20 bool test0() {
+  test(S(""), 0, 0, S(""), 0, 0, 0);
+  test(S(""), 0, 0, S(""), 0, 1, 0);
+  test(S(""), 0, 0, S(""), 1, 0, 0);
+  test(S(""), 0, 0, S("abcde"), 0, 0, 0);
+  test(S(""), 0, 0, S("abcde"), 0, 1, -1);
+  test(S(""), 0, 0, S("abcde"), 0, 2, -2);
+  test(S(""), 0, 0, S("abcde"), 0, 4, -4);
+  test(S(""), 0, 0, S("abcde"), 0, 5, -5);
+  test(S(""), 0, 0, S("abcde"), 0, 6, -5);
+  test(S(""), 0, 0, S("abcde"), 1, 0, 0);
+  test(S(""), 0, 0, S("abcde"), 1, 1, -1);
+  test(S(""), 0, 0, S("abcde"), 1, 2, -2);
+  test(S(""), 0, 0, S("abcde"), 1, 3, -3);
+  test(S(""), 0, 0, S("abcde"), 1, 4, -4);
+  test(S(""), 0, 0, S("abcde"), 1, 5, -4);
+  test(S(""), 0, 0, S("abcde"), 2, 0, 0);
+  test(S(""), 0, 0, S("abcde"), 2, 1, -1);
+  test(S(""), 0, 0, S("abcde"), 2, 2, -2);
+  test(S(""), 0, 0, S("abcde"), 2, 3, -3);
+  test(S(""), 0, 0, S("abcde"), 2, 4, -3);
+  test(S(""), 0, 0, S("abcde"), 4, 0, 0);
+  test(S(""), 0, 0, S("abcde"), 4, 1, -1);
+  test(S(""), 0, 0, S("abcde"), 4, 2, -1);
+  test(S(""), 0, 0, S("abcde"), 5, 0, 0);
+  test(S(""), 0, 0, S("abcde"), 5, 1, 0);
+  test(S(""), 0, 0, S("abcde"), 6, 0, 0);
+  test(S(""), 0, 0, S("abcdefghij"), 0, 0, 0);
+  test(S(""), 0, 0, S("abcdefghij"), 0, 1, -1);
+  test(S(""), 0, 0, S("abcdefghij"), 0, 5, -5);
+  test(S(""), 0, 0, S("abcdefghij"), 0, 9, -9);
+  test(S(""), 0, 0, S("abcdefghij"), 0, 10, -10);
+  test(S(""), 0, 0, S("abcdefghij"), 0, 11, -10);
+  test(S(""), 0, 0, S("abcdefghij"), 1, 0, 0);
+  test(S(""), 0, 0, S("abcdefghij"), 1, 1, -1);
+  test(S(""), 0, 0, S("abcdefghij"), 1, 4, -4);
+  test(S(""), 0, 0, S("abcdefghij"), 1, 8, -8);
+  test(S(""), 0, 0, S("abcdefghij"), 1, 9, -9);
+  test(S(""), 0, 0, S("abcdefghij"), 1, 10, -9);
+  test(S(""), 0, 0, S("abcdefghij"), 5, 0, 0);
+  test(S(""), 0, 0, S("abcdefghij"), 5, 1, -1);
+  test(S(""), 0, 0, S("abcdefghij"), 5, 2, -2);
+  test(S(""), 0, 0, S("abcdefghij"), 5, 4, -4);
+  test(S(""), 0, 0, S("abcdefghij"), 5, 5, -5);
+  test(S(""), 0, 0, S("abcdefghij"), 5, 6, -5);
+  test(S(""), 0, 0, S("abcdefghij"), 9, 0, 0);
+  test(S(""), 0, 0, S("abcdefghij"), 9, 1, -1);
+  test(S(""), 0, 0, S("abcdefghij"), 9, 2, -1);
+  test(S(""), 0, 0, S("abcdefghij"), 10, 0, 0);
+  test(S(""), 0, 0, S("abcdefghij"), 10, 1, 0);
+  test(S(""), 0, 0, S("abcdefghij"), 11, 0, 0);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S(""), 0, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S(""), 0, 1, S(""), 0, 0, 0);
+  test(S(""), 0, 1, S(""), 0, 1, 0);
+  test(S(""), 0, 1, S(""), 1, 0, 0);
+  test(S(""), 0, 1, S("abcde"), 0, 0, 0);
+  test(S(""), 0, 1, S("abcde"), 0, 1, -1);
+  test(S(""), 0, 1, S("abcde"), 0, 2, -2);
+  test(S(""), 0, 1, S("abcde"), 0, 4, -4);
+  test(S(""), 0, 1, S("abcde"), 0, 5, -5);
+  test(S(""), 0, 1, S("abcde"), 0, 6, -5);
+  test(S(""), 0, 1, S("abcde"), 1, 0, 0);
+  test(S(""), 0, 1, S("abcde"), 1, 1, -1);
+  test(S(""), 0, 1, S("abcde"), 1, 2, -2);
+  test(S(""), 0, 1, S("abcde"), 1, 3, -3);
+  test(S(""), 0, 1, S("abcde"), 1, 4, -4);
+  test(S(""), 0, 1, S("abcde"), 1, 5, -4);
+  test(S(""), 0, 1, S("abcde"), 2, 0, 0);
+  test(S(""), 0, 1, S("abcde"), 2, 1, -1);
+  test(S(""), 0, 1, S("abcde"), 2, 2, -2);
+  test(S(""), 0, 1, S("abcde"), 2, 3, -3);
+  test(S(""), 0, 1, S("abcde"), 2, 4, -3);
+  test(S(""), 0, 1, S("abcde"), 4, 0, 0);
+  test(S(""), 0, 1, S("abcde"), 4, 1, -1);
+  test(S(""), 0, 1, S("abcde"), 4, 2, -1);
+  test(S(""), 0, 1, S("abcde"), 5, 0, 0);
+  test(S(""), 0, 1, S("abcde"), 5, 1, 0);
+  test(S(""), 0, 1, S("abcde"), 6, 0, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test1()
-{
-    test(S(""), 0, 1, S("abcdefghij"), 0, 0, 0);
-    test(S(""), 0, 1, S("abcdefghij"), 0, 1, -1);
-    test(S(""), 0, 1, S("abcdefghij"), 0, 5, -5);
-    test(S(""), 0, 1, S("abcdefghij"), 0, 9, -9);
-    test(S(""), 0, 1, S("abcdefghij"), 0, 10, -10);
-    test(S(""), 0, 1, S("abcdefghij"), 0, 11, -10);
-    test(S(""), 0, 1, S("abcdefghij"), 1, 0, 0);
-    test(S(""), 0, 1, S("abcdefghij"), 1, 1, -1);
-    test(S(""), 0, 1, S("abcdefghij"), 1, 4, -4);
-    test(S(""), 0, 1, S("abcdefghij"), 1, 8, -8);
-    test(S(""), 0, 1, S("abcdefghij"), 1, 9, -9);
-    test(S(""), 0, 1, S("abcdefghij"), 1, 10, -9);
-    test(S(""), 0, 1, S("abcdefghij"), 5, 0, 0);
-    test(S(""), 0, 1, S("abcdefghij"), 5, 1, -1);
-    test(S(""), 0, 1, S("abcdefghij"), 5, 2, -2);
-    test(S(""), 0, 1, S("abcdefghij"), 5, 4, -4);
-    test(S(""), 0, 1, S("abcdefghij"), 5, 5, -5);
-    test(S(""), 0, 1, S("abcdefghij"), 5, 6, -5);
-    test(S(""), 0, 1, S("abcdefghij"), 9, 0, 0);
-    test(S(""), 0, 1, S("abcdefghij"), 9, 1, -1);
-    test(S(""), 0, 1, S("abcdefghij"), 9, 2, -1);
-    test(S(""), 0, 1, S("abcdefghij"), 10, 0, 0);
-    test(S(""), 0, 1, S("abcdefghij"), 10, 1, 0);
-    test(S(""), 0, 1, S("abcdefghij"), 11, 0, 0);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S(""), 1, 0, S(""), 0, 0, 0);
-    test(S(""), 1, 0, S(""), 0, 1, 0);
-    test(S(""), 1, 0, S(""), 1, 0, 0);
-    test(S(""), 1, 0, S("abcde"), 0, 0, 0);
-    test(S(""), 1, 0, S("abcde"), 0, 1, 0);
-    test(S(""), 1, 0, S("abcde"), 0, 2, 0);
-    test(S(""), 1, 0, S("abcde"), 0, 4, 0);
-    test(S(""), 1, 0, S("abcde"), 0, 5, 0);
-    test(S(""), 1, 0, S("abcde"), 0, 6, 0);
-    test(S(""), 1, 0, S("abcde"), 1, 0, 0);
-    test(S(""), 1, 0, S("abcde"), 1, 1, 0);
-    test(S(""), 1, 0, S("abcde"), 1, 2, 0);
-    test(S(""), 1, 0, S("abcde"), 1, 3, 0);
-    test(S(""), 1, 0, S("abcde"), 1, 4, 0);
-    test(S(""), 1, 0, S("abcde"), 1, 5, 0);
-    test(S(""), 1, 0, S("abcde"), 2, 0, 0);
-    test(S(""), 1, 0, S("abcde"), 2, 1, 0);
-    test(S(""), 1, 0, S("abcde"), 2, 2, 0);
-    test(S(""), 1, 0, S("abcde"), 2, 3, 0);
-    test(S(""), 1, 0, S("abcde"), 2, 4, 0);
-    test(S(""), 1, 0, S("abcde"), 4, 0, 0);
-    test(S(""), 1, 0, S("abcde"), 4, 1, 0);
-    test(S(""), 1, 0, S("abcde"), 4, 2, 0);
-    test(S(""), 1, 0, S("abcde"), 5, 0, 0);
-    test(S(""), 1, 0, S("abcde"), 5, 1, 0);
-    test(S(""), 1, 0, S("abcde"), 6, 0, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 0, 0, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 0, 1, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 0, 5, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 0, 9, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 0, 10, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 0, 11, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 1, 0, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 1, 1, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 1, 4, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 1, 8, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 1, 9, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 1, 10, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 5, 0, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 5, 1, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 5, 2, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 5, 4, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 5, 5, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 5, 6, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 9, 0, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 9, 1, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 9, 2, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 10, 0, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 10, 1, 0);
-    test(S(""), 1, 0, S("abcdefghij"), 11, 0, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, 0);
+TEST_CONSTEXPR_CXX20 bool test1() {
+  test(S(""), 0, 1, S("abcdefghij"), 0, 0, 0);
+  test(S(""), 0, 1, S("abcdefghij"), 0, 1, -1);
+  test(S(""), 0, 1, S("abcdefghij"), 0, 5, -5);
+  test(S(""), 0, 1, S("abcdefghij"), 0, 9, -9);
+  test(S(""), 0, 1, S("abcdefghij"), 0, 10, -10);
+  test(S(""), 0, 1, S("abcdefghij"), 0, 11, -10);
+  test(S(""), 0, 1, S("abcdefghij"), 1, 0, 0);
+  test(S(""), 0, 1, S("abcdefghij"), 1, 1, -1);
+  test(S(""), 0, 1, S("abcdefghij"), 1, 4, -4);
+  test(S(""), 0, 1, S("abcdefghij"), 1, 8, -8);
+  test(S(""), 0, 1, S("abcdefghij"), 1, 9, -9);
+  test(S(""), 0, 1, S("abcdefghij"), 1, 10, -9);
+  test(S(""), 0, 1, S("abcdefghij"), 5, 0, 0);
+  test(S(""), 0, 1, S("abcdefghij"), 5, 1, -1);
+  test(S(""), 0, 1, S("abcdefghij"), 5, 2, -2);
+  test(S(""), 0, 1, S("abcdefghij"), 5, 4, -4);
+  test(S(""), 0, 1, S("abcdefghij"), 5, 5, -5);
+  test(S(""), 0, 1, S("abcdefghij"), 5, 6, -5);
+  test(S(""), 0, 1, S("abcdefghij"), 9, 0, 0);
+  test(S(""), 0, 1, S("abcdefghij"), 9, 1, -1);
+  test(S(""), 0, 1, S("abcdefghij"), 9, 2, -1);
+  test(S(""), 0, 1, S("abcdefghij"), 10, 0, 0);
+  test(S(""), 0, 1, S("abcdefghij"), 10, 1, 0);
+  test(S(""), 0, 1, S("abcdefghij"), 11, 0, 0);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S(""), 0, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S(""), 1, 0, S(""), 0, 0, 0);
+  test(S(""), 1, 0, S(""), 0, 1, 0);
+  test(S(""), 1, 0, S(""), 1, 0, 0);
+  test(S(""), 1, 0, S("abcde"), 0, 0, 0);
+  test(S(""), 1, 0, S("abcde"), 0, 1, 0);
+  test(S(""), 1, 0, S("abcde"), 0, 2, 0);
+  test(S(""), 1, 0, S("abcde"), 0, 4, 0);
+  test(S(""), 1, 0, S("abcde"), 0, 5, 0);
+  test(S(""), 1, 0, S("abcde"), 0, 6, 0);
+  test(S(""), 1, 0, S("abcde"), 1, 0, 0);
+  test(S(""), 1, 0, S("abcde"), 1, 1, 0);
+  test(S(""), 1, 0, S("abcde"), 1, 2, 0);
+  test(S(""), 1, 0, S("abcde"), 1, 3, 0);
+  test(S(""), 1, 0, S("abcde"), 1, 4, 0);
+  test(S(""), 1, 0, S("abcde"), 1, 5, 0);
+  test(S(""), 1, 0, S("abcde"), 2, 0, 0);
+  test(S(""), 1, 0, S("abcde"), 2, 1, 0);
+  test(S(""), 1, 0, S("abcde"), 2, 2, 0);
+  test(S(""), 1, 0, S("abcde"), 2, 3, 0);
+  test(S(""), 1, 0, S("abcde"), 2, 4, 0);
+  test(S(""), 1, 0, S("abcde"), 4, 0, 0);
+  test(S(""), 1, 0, S("abcde"), 4, 1, 0);
+  test(S(""), 1, 0, S("abcde"), 4, 2, 0);
+  test(S(""), 1, 0, S("abcde"), 5, 0, 0);
+  test(S(""), 1, 0, S("abcde"), 5, 1, 0);
+  test(S(""), 1, 0, S("abcde"), 6, 0, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 0, 0, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 0, 1, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 0, 5, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 0, 9, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 0, 10, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 0, 11, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 1, 0, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 1, 1, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 1, 4, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 1, 8, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 1, 9, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 1, 10, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 5, 0, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 5, 1, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 5, 2, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 5, 4, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 5, 5, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 5, 6, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 9, 0, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 9, 1, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 9, 2, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 10, 0, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 10, 1, 0);
+  test(S(""), 1, 0, S("abcdefghij"), 11, 0, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test2()
-{
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 19, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 20, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 1, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 18, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 19, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 20, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 1, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 5, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 9, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 10, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 11, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 19, 1, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 19, 2, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 0, 0, S(""), 0, 0, 0);
-    test(S("abcde"), 0, 0, S(""), 0, 1, 0);
-    test(S("abcde"), 0, 0, S(""), 1, 0, 0);
-    test(S("abcde"), 0, 0, S("abcde"), 0, 0, 0);
-    test(S("abcde"), 0, 0, S("abcde"), 0, 1, -1);
-    test(S("abcde"), 0, 0, S("abcde"), 0, 2, -2);
-    test(S("abcde"), 0, 0, S("abcde"), 0, 4, -4);
-    test(S("abcde"), 0, 0, S("abcde"), 0, 5, -5);
-    test(S("abcde"), 0, 0, S("abcde"), 0, 6, -5);
-    test(S("abcde"), 0, 0, S("abcde"), 1, 0, 0);
-    test(S("abcde"), 0, 0, S("abcde"), 1, 1, -1);
-    test(S("abcde"), 0, 0, S("abcde"), 1, 2, -2);
-    test(S("abcde"), 0, 0, S("abcde"), 1, 3, -3);
-    test(S("abcde"), 0, 0, S("abcde"), 1, 4, -4);
-    test(S("abcde"), 0, 0, S("abcde"), 1, 5, -4);
-    test(S("abcde"), 0, 0, S("abcde"), 2, 0, 0);
-    test(S("abcde"), 0, 0, S("abcde"), 2, 1, -1);
-    test(S("abcde"), 0, 0, S("abcde"), 2, 2, -2);
-    test(S("abcde"), 0, 0, S("abcde"), 2, 3, -3);
-    test(S("abcde"), 0, 0, S("abcde"), 2, 4, -3);
-    test(S("abcde"), 0, 0, S("abcde"), 4, 0, 0);
-    test(S("abcde"), 0, 0, S("abcde"), 4, 1, -1);
-    test(S("abcde"), 0, 0, S("abcde"), 4, 2, -1);
-    test(S("abcde"), 0, 0, S("abcde"), 5, 0, 0);
-    test(S("abcde"), 0, 0, S("abcde"), 5, 1, 0);
-    test(S("abcde"), 0, 0, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 0, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 0, 1, S(""), 0, 0, 1);
-    test(S("abcde"), 0, 1, S(""), 0, 1, 1);
-    test(S("abcde"), 0, 1, S(""), 1, 0, 0);
-    test(S("abcde"), 0, 1, S("abcde"), 0, 0, 1);
+TEST_CONSTEXPR_CXX20 bool test2() {
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 19, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 20, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 1, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 18, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 19, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 1, 20, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 1, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 5, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 9, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 10, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 10, 11, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 19, 1, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 19, 2, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 0, 0, S(""), 0, 0, 0);
+  test(S("abcde"), 0, 0, S(""), 0, 1, 0);
+  test(S("abcde"), 0, 0, S(""), 1, 0, 0);
+  test(S("abcde"), 0, 0, S("abcde"), 0, 0, 0);
+  test(S("abcde"), 0, 0, S("abcde"), 0, 1, -1);
+  test(S("abcde"), 0, 0, S("abcde"), 0, 2, -2);
+  test(S("abcde"), 0, 0, S("abcde"), 0, 4, -4);
+  test(S("abcde"), 0, 0, S("abcde"), 0, 5, -5);
+  test(S("abcde"), 0, 0, S("abcde"), 0, 6, -5);
+  test(S("abcde"), 0, 0, S("abcde"), 1, 0, 0);
+  test(S("abcde"), 0, 0, S("abcde"), 1, 1, -1);
+  test(S("abcde"), 0, 0, S("abcde"), 1, 2, -2);
+  test(S("abcde"), 0, 0, S("abcde"), 1, 3, -3);
+  test(S("abcde"), 0, 0, S("abcde"), 1, 4, -4);
+  test(S("abcde"), 0, 0, S("abcde"), 1, 5, -4);
+  test(S("abcde"), 0, 0, S("abcde"), 2, 0, 0);
+  test(S("abcde"), 0, 0, S("abcde"), 2, 1, -1);
+  test(S("abcde"), 0, 0, S("abcde"), 2, 2, -2);
+  test(S("abcde"), 0, 0, S("abcde"), 2, 3, -3);
+  test(S("abcde"), 0, 0, S("abcde"), 2, 4, -3);
+  test(S("abcde"), 0, 0, S("abcde"), 4, 0, 0);
+  test(S("abcde"), 0, 0, S("abcde"), 4, 1, -1);
+  test(S("abcde"), 0, 0, S("abcde"), 4, 2, -1);
+  test(S("abcde"), 0, 0, S("abcde"), 5, 0, 0);
+  test(S("abcde"), 0, 0, S("abcde"), 5, 1, 0);
+  test(S("abcde"), 0, 0, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 0, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 0, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 0, 1, S(""), 0, 0, 1);
+  test(S("abcde"), 0, 1, S(""), 0, 1, 1);
+  test(S("abcde"), 0, 1, S(""), 1, 0, 0);
+  test(S("abcde"), 0, 1, S("abcde"), 0, 0, 1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test3()
-{
-    test(S("abcde"), 0, 1, S("abcde"), 0, 1, 0);
-    test(S("abcde"), 0, 1, S("abcde"), 0, 2, -1);
-    test(S("abcde"), 0, 1, S("abcde"), 0, 4, -3);
-    test(S("abcde"), 0, 1, S("abcde"), 0, 5, -4);
-    test(S("abcde"), 0, 1, S("abcde"), 0, 6, -4);
-    test(S("abcde"), 0, 1, S("abcde"), 1, 0, 1);
-    test(S("abcde"), 0, 1, S("abcde"), 1, 1, -1);
-    test(S("abcde"), 0, 1, S("abcde"), 1, 2, -1);
-    test(S("abcde"), 0, 1, S("abcde"), 1, 3, -1);
-    test(S("abcde"), 0, 1, S("abcde"), 1, 4, -1);
-    test(S("abcde"), 0, 1, S("abcde"), 1, 5, -1);
-    test(S("abcde"), 0, 1, S("abcde"), 2, 0, 1);
-    test(S("abcde"), 0, 1, S("abcde"), 2, 1, -2);
-    test(S("abcde"), 0, 1, S("abcde"), 2, 2, -2);
-    test(S("abcde"), 0, 1, S("abcde"), 2, 3, -2);
-    test(S("abcde"), 0, 1, S("abcde"), 2, 4, -2);
-    test(S("abcde"), 0, 1, S("abcde"), 4, 0, 1);
-    test(S("abcde"), 0, 1, S("abcde"), 4, 1, -4);
-    test(S("abcde"), 0, 1, S("abcde"), 4, 2, -4);
-    test(S("abcde"), 0, 1, S("abcde"), 5, 0, 1);
-    test(S("abcde"), 0, 1, S("abcde"), 5, 1, 1);
-    test(S("abcde"), 0, 1, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 0, 0, 1);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 0, 1, 0);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 0, 5, -4);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 0, 9, -8);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 0, 10, -9);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 0, 11, -9);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 1, 0, 1);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 1, 4, -1);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 1, 8, -1);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 1, 9, -1);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 1, 10, -1);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 5, 0, 1);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 5, 1, -5);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 5, 2, -5);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 5, 4, -5);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 9, 0, 1);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 9, 1, -9);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 9, 2, -9);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 10, 0, 1);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 10, 1, 1);
-    test(S("abcde"), 0, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 1, 0);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 10, -9);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 19, -18);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 20, -19);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 21, -19);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 0, 2, S(""), 0, 0, 2);
-    test(S("abcde"), 0, 2, S(""), 0, 1, 2);
-    test(S("abcde"), 0, 2, S(""), 1, 0, 0);
-    test(S("abcde"), 0, 2, S("abcde"), 0, 0, 2);
-    test(S("abcde"), 0, 2, S("abcde"), 0, 1, 1);
-    test(S("abcde"), 0, 2, S("abcde"), 0, 2, 0);
-    test(S("abcde"), 0, 2, S("abcde"), 0, 4, -2);
-    test(S("abcde"), 0, 2, S("abcde"), 0, 5, -3);
-    test(S("abcde"), 0, 2, S("abcde"), 0, 6, -3);
-    test(S("abcde"), 0, 2, S("abcde"), 1, 0, 2);
-    test(S("abcde"), 0, 2, S("abcde"), 1, 1, -1);
-    test(S("abcde"), 0, 2, S("abcde"), 1, 2, -1);
-    test(S("abcde"), 0, 2, S("abcde"), 1, 3, -1);
-    test(S("abcde"), 0, 2, S("abcde"), 1, 4, -1);
-    test(S("abcde"), 0, 2, S("abcde"), 1, 5, -1);
-    test(S("abcde"), 0, 2, S("abcde"), 2, 0, 2);
-    test(S("abcde"), 0, 2, S("abcde"), 2, 1, -2);
-    test(S("abcde"), 0, 2, S("abcde"), 2, 2, -2);
-    test(S("abcde"), 0, 2, S("abcde"), 2, 3, -2);
-    test(S("abcde"), 0, 2, S("abcde"), 2, 4, -2);
-    test(S("abcde"), 0, 2, S("abcde"), 4, 0, 2);
-    test(S("abcde"), 0, 2, S("abcde"), 4, 1, -4);
-    test(S("abcde"), 0, 2, S("abcde"), 4, 2, -4);
-    test(S("abcde"), 0, 2, S("abcde"), 5, 0, 2);
-    test(S("abcde"), 0, 2, S("abcde"), 5, 1, 2);
-    test(S("abcde"), 0, 2, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 0, 0, 2);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 0, 1, 1);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 0, 5, -3);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 0, 9, -7);
+TEST_CONSTEXPR_CXX20 bool test3() {
+  test(S("abcde"), 0, 1, S("abcde"), 0, 1, 0);
+  test(S("abcde"), 0, 1, S("abcde"), 0, 2, -1);
+  test(S("abcde"), 0, 1, S("abcde"), 0, 4, -3);
+  test(S("abcde"), 0, 1, S("abcde"), 0, 5, -4);
+  test(S("abcde"), 0, 1, S("abcde"), 0, 6, -4);
+  test(S("abcde"), 0, 1, S("abcde"), 1, 0, 1);
+  test(S("abcde"), 0, 1, S("abcde"), 1, 1, -1);
+  test(S("abcde"), 0, 1, S("abcde"), 1, 2, -1);
+  test(S("abcde"), 0, 1, S("abcde"), 1, 3, -1);
+  test(S("abcde"), 0, 1, S("abcde"), 1, 4, -1);
+  test(S("abcde"), 0, 1, S("abcde"), 1, 5, -1);
+  test(S("abcde"), 0, 1, S("abcde"), 2, 0, 1);
+  test(S("abcde"), 0, 1, S("abcde"), 2, 1, -2);
+  test(S("abcde"), 0, 1, S("abcde"), 2, 2, -2);
+  test(S("abcde"), 0, 1, S("abcde"), 2, 3, -2);
+  test(S("abcde"), 0, 1, S("abcde"), 2, 4, -2);
+  test(S("abcde"), 0, 1, S("abcde"), 4, 0, 1);
+  test(S("abcde"), 0, 1, S("abcde"), 4, 1, -4);
+  test(S("abcde"), 0, 1, S("abcde"), 4, 2, -4);
+  test(S("abcde"), 0, 1, S("abcde"), 5, 0, 1);
+  test(S("abcde"), 0, 1, S("abcde"), 5, 1, 1);
+  test(S("abcde"), 0, 1, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 0, 0, 1);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 0, 1, 0);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 0, 5, -4);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 0, 9, -8);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 0, 10, -9);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 0, 11, -9);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 1, 0, 1);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 1, 4, -1);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 1, 8, -1);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 1, 9, -1);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 1, 10, -1);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 5, 0, 1);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 5, 1, -5);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 5, 2, -5);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 5, 4, -5);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 9, 0, 1);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 9, 1, -9);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 9, 2, -9);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 10, 0, 1);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 10, 1, 1);
+  test(S("abcde"), 0, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 1, 0);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 10, -9);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 19, -18);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 20, -19);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 0, 21, -19);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcde"), 0, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 0, 2, S(""), 0, 0, 2);
+  test(S("abcde"), 0, 2, S(""), 0, 1, 2);
+  test(S("abcde"), 0, 2, S(""), 1, 0, 0);
+  test(S("abcde"), 0, 2, S("abcde"), 0, 0, 2);
+  test(S("abcde"), 0, 2, S("abcde"), 0, 1, 1);
+  test(S("abcde"), 0, 2, S("abcde"), 0, 2, 0);
+  test(S("abcde"), 0, 2, S("abcde"), 0, 4, -2);
+  test(S("abcde"), 0, 2, S("abcde"), 0, 5, -3);
+  test(S("abcde"), 0, 2, S("abcde"), 0, 6, -3);
+  test(S("abcde"), 0, 2, S("abcde"), 1, 0, 2);
+  test(S("abcde"), 0, 2, S("abcde"), 1, 1, -1);
+  test(S("abcde"), 0, 2, S("abcde"), 1, 2, -1);
+  test(S("abcde"), 0, 2, S("abcde"), 1, 3, -1);
+  test(S("abcde"), 0, 2, S("abcde"), 1, 4, -1);
+  test(S("abcde"), 0, 2, S("abcde"), 1, 5, -1);
+  test(S("abcde"), 0, 2, S("abcde"), 2, 0, 2);
+  test(S("abcde"), 0, 2, S("abcde"), 2, 1, -2);
+  test(S("abcde"), 0, 2, S("abcde"), 2, 2, -2);
+  test(S("abcde"), 0, 2, S("abcde"), 2, 3, -2);
+  test(S("abcde"), 0, 2, S("abcde"), 2, 4, -2);
+  test(S("abcde"), 0, 2, S("abcde"), 4, 0, 2);
+  test(S("abcde"), 0, 2, S("abcde"), 4, 1, -4);
+  test(S("abcde"), 0, 2, S("abcde"), 4, 2, -4);
+  test(S("abcde"), 0, 2, S("abcde"), 5, 0, 2);
+  test(S("abcde"), 0, 2, S("abcde"), 5, 1, 2);
+  test(S("abcde"), 0, 2, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 0, 0, 2);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 0, 1, 1);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 0, 5, -3);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 0, 9, -7);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test4()
-{
-    test(S("abcde"), 0, 2, S("abcdefghij"), 0, 10, -8);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 0, 11, -8);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 1, 0, 2);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 1, 4, -1);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 1, 8, -1);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 1, 9, -1);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 1, 10, -1);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 5, 0, 2);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 5, 1, -5);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 5, 2, -5);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 5, 4, -5);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 9, 0, 2);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 9, 1, -9);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 9, 2, -9);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 10, 0, 2);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 10, 1, 2);
-    test(S("abcde"), 0, 2, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 0, 2);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 10, -8);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 19, -17);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 20, -18);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 21, -18);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 0, 2);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 0, 2);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 19, 0, 2);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 20, 0, 2);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 20, 1, 2);
-    test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 0, 4, S(""), 0, 0, 4);
-    test(S("abcde"), 0, 4, S(""), 0, 1, 4);
-    test(S("abcde"), 0, 4, S(""), 1, 0, 0);
-    test(S("abcde"), 0, 4, S("abcde"), 0, 0, 4);
-    test(S("abcde"), 0, 4, S("abcde"), 0, 1, 3);
-    test(S("abcde"), 0, 4, S("abcde"), 0, 2, 2);
-    test(S("abcde"), 0, 4, S("abcde"), 0, 4, 0);
-    test(S("abcde"), 0, 4, S("abcde"), 0, 5, -1);
-    test(S("abcde"), 0, 4, S("abcde"), 0, 6, -1);
-    test(S("abcde"), 0, 4, S("abcde"), 1, 0, 4);
-    test(S("abcde"), 0, 4, S("abcde"), 1, 1, -1);
-    test(S("abcde"), 0, 4, S("abcde"), 1, 2, -1);
-    test(S("abcde"), 0, 4, S("abcde"), 1, 3, -1);
-    test(S("abcde"), 0, 4, S("abcde"), 1, 4, -1);
-    test(S("abcde"), 0, 4, S("abcde"), 1, 5, -1);
-    test(S("abcde"), 0, 4, S("abcde"), 2, 0, 4);
-    test(S("abcde"), 0, 4, S("abcde"), 2, 1, -2);
-    test(S("abcde"), 0, 4, S("abcde"), 2, 2, -2);
-    test(S("abcde"), 0, 4, S("abcde"), 2, 3, -2);
-    test(S("abcde"), 0, 4, S("abcde"), 2, 4, -2);
-    test(S("abcde"), 0, 4, S("abcde"), 4, 0, 4);
-    test(S("abcde"), 0, 4, S("abcde"), 4, 1, -4);
-    test(S("abcde"), 0, 4, S("abcde"), 4, 2, -4);
-    test(S("abcde"), 0, 4, S("abcde"), 5, 0, 4);
-    test(S("abcde"), 0, 4, S("abcde"), 5, 1, 4);
-    test(S("abcde"), 0, 4, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 0, 0, 4);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 0, 1, 3);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 0, 5, -1);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 0, 9, -5);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 0, 10, -6);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 0, 11, -6);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 1, 0, 4);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 1, 4, -1);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 1, 8, -1);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 1, 9, -1);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 1, 10, -1);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 5, 0, 4);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 5, 1, -5);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 5, 2, -5);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 5, 4, -5);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 9, 0, 4);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 9, 1, -9);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 9, 2, -9);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 10, 0, 4);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 10, 1, 4);
-    test(S("abcde"), 0, 4, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 0, 4);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 1, 3);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 10, -6);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 19, -15);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 20, -16);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 21, -16);
+TEST_CONSTEXPR_CXX20 bool test4() {
+  test(S("abcde"), 0, 2, S("abcdefghij"), 0, 10, -8);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 0, 11, -8);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 1, 0, 2);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 1, 4, -1);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 1, 8, -1);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 1, 9, -1);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 1, 10, -1);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 5, 0, 2);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 5, 1, -5);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 5, 2, -5);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 5, 4, -5);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 9, 0, 2);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 9, 1, -9);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 9, 2, -9);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 10, 0, 2);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 10, 1, 2);
+  test(S("abcde"), 0, 2, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 0, 2);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 10, -8);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 19, -17);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 20, -18);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 0, 21, -18);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 0, 2);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 0, 2);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 19, 0, 2);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 20, 0, 2);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 20, 1, 2);
+  test(S("abcde"), 0, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 0, 4, S(""), 0, 0, 4);
+  test(S("abcde"), 0, 4, S(""), 0, 1, 4);
+  test(S("abcde"), 0, 4, S(""), 1, 0, 0);
+  test(S("abcde"), 0, 4, S("abcde"), 0, 0, 4);
+  test(S("abcde"), 0, 4, S("abcde"), 0, 1, 3);
+  test(S("abcde"), 0, 4, S("abcde"), 0, 2, 2);
+  test(S("abcde"), 0, 4, S("abcde"), 0, 4, 0);
+  test(S("abcde"), 0, 4, S("abcde"), 0, 5, -1);
+  test(S("abcde"), 0, 4, S("abcde"), 0, 6, -1);
+  test(S("abcde"), 0, 4, S("abcde"), 1, 0, 4);
+  test(S("abcde"), 0, 4, S("abcde"), 1, 1, -1);
+  test(S("abcde"), 0, 4, S("abcde"), 1, 2, -1);
+  test(S("abcde"), 0, 4, S("abcde"), 1, 3, -1);
+  test(S("abcde"), 0, 4, S("abcde"), 1, 4, -1);
+  test(S("abcde"), 0, 4, S("abcde"), 1, 5, -1);
+  test(S("abcde"), 0, 4, S("abcde"), 2, 0, 4);
+  test(S("abcde"), 0, 4, S("abcde"), 2, 1, -2);
+  test(S("abcde"), 0, 4, S("abcde"), 2, 2, -2);
+  test(S("abcde"), 0, 4, S("abcde"), 2, 3, -2);
+  test(S("abcde"), 0, 4, S("abcde"), 2, 4, -2);
+  test(S("abcde"), 0, 4, S("abcde"), 4, 0, 4);
+  test(S("abcde"), 0, 4, S("abcde"), 4, 1, -4);
+  test(S("abcde"), 0, 4, S("abcde"), 4, 2, -4);
+  test(S("abcde"), 0, 4, S("abcde"), 5, 0, 4);
+  test(S("abcde"), 0, 4, S("abcde"), 5, 1, 4);
+  test(S("abcde"), 0, 4, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 0, 0, 4);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 0, 1, 3);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 0, 5, -1);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 0, 9, -5);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 0, 10, -6);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 0, 11, -6);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 1, 0, 4);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 1, 4, -1);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 1, 8, -1);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 1, 9, -1);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 1, 10, -1);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 5, 0, 4);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 5, 1, -5);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 5, 2, -5);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 5, 4, -5);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 9, 0, 4);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 9, 1, -9);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 9, 2, -9);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 10, 0, 4);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 10, 1, 4);
+  test(S("abcde"), 0, 4, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 0, 4);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 1, 3);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 10, -6);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 19, -15);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 20, -16);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 21, -16);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test5()
-{
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 0, 4);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 0, 4);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 19, 0, 4);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 20, 0, 4);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 20, 1, 4);
-    test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 0, 5, S(""), 0, 0, 5);
-    test(S("abcde"), 0, 5, S(""), 0, 1, 5);
-    test(S("abcde"), 0, 5, S(""), 1, 0, 0);
-    test(S("abcde"), 0, 5, S("abcde"), 0, 0, 5);
-    test(S("abcde"), 0, 5, S("abcde"), 0, 1, 4);
-    test(S("abcde"), 0, 5, S("abcde"), 0, 2, 3);
-    test(S("abcde"), 0, 5, S("abcde"), 0, 4, 1);
-    test(S("abcde"), 0, 5, S("abcde"), 0, 5, 0);
-    test(S("abcde"), 0, 5, S("abcde"), 0, 6, 0);
-    test(S("abcde"), 0, 5, S("abcde"), 1, 0, 5);
-    test(S("abcde"), 0, 5, S("abcde"), 1, 1, -1);
-    test(S("abcde"), 0, 5, S("abcde"), 1, 2, -1);
-    test(S("abcde"), 0, 5, S("abcde"), 1, 3, -1);
-    test(S("abcde"), 0, 5, S("abcde"), 1, 4, -1);
-    test(S("abcde"), 0, 5, S("abcde"), 1, 5, -1);
-    test(S("abcde"), 0, 5, S("abcde"), 2, 0, 5);
-    test(S("abcde"), 0, 5, S("abcde"), 2, 1, -2);
-    test(S("abcde"), 0, 5, S("abcde"), 2, 2, -2);
-    test(S("abcde"), 0, 5, S("abcde"), 2, 3, -2);
-    test(S("abcde"), 0, 5, S("abcde"), 2, 4, -2);
-    test(S("abcde"), 0, 5, S("abcde"), 4, 0, 5);
-    test(S("abcde"), 0, 5, S("abcde"), 4, 1, -4);
-    test(S("abcde"), 0, 5, S("abcde"), 4, 2, -4);
-    test(S("abcde"), 0, 5, S("abcde"), 5, 0, 5);
-    test(S("abcde"), 0, 5, S("abcde"), 5, 1, 5);
-    test(S("abcde"), 0, 5, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 0, 0, 5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 0, 1, 4);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 0, 5, 0);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 0, 9, -4);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 0, 10, -5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 0, 11, -5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 1, 0, 5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 1, 4, -1);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 1, 8, -1);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 1, 9, -1);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 1, 10, -1);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 5, 0, 5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 5, 1, -5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 5, 2, -5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 5, 4, -5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 9, 0, 5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 9, 1, -9);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 9, 2, -9);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 10, 0, 5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 10, 1, 5);
-    test(S("abcde"), 0, 5, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 0, 5);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 1, 4);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 10, -5);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 19, -14);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 20, -15);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 21, -15);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 0, 5);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 0, 5);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 19, 0, 5);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 20, 0, 5);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 20, 1, 5);
-    test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 0, 6, S(""), 0, 0, 5);
-    test(S("abcde"), 0, 6, S(""), 0, 1, 5);
-    test(S("abcde"), 0, 6, S(""), 1, 0, 0);
-    test(S("abcde"), 0, 6, S("abcde"), 0, 0, 5);
-    test(S("abcde"), 0, 6, S("abcde"), 0, 1, 4);
-    test(S("abcde"), 0, 6, S("abcde"), 0, 2, 3);
-    test(S("abcde"), 0, 6, S("abcde"), 0, 4, 1);
-    test(S("abcde"), 0, 6, S("abcde"), 0, 5, 0);
+TEST_CONSTEXPR_CXX20 bool test5() {
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 0, 4);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 0, 4);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 19, 0, 4);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 20, 0, 4);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 20, 1, 4);
+  test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 0, 5, S(""), 0, 0, 5);
+  test(S("abcde"), 0, 5, S(""), 0, 1, 5);
+  test(S("abcde"), 0, 5, S(""), 1, 0, 0);
+  test(S("abcde"), 0, 5, S("abcde"), 0, 0, 5);
+  test(S("abcde"), 0, 5, S("abcde"), 0, 1, 4);
+  test(S("abcde"), 0, 5, S("abcde"), 0, 2, 3);
+  test(S("abcde"), 0, 5, S("abcde"), 0, 4, 1);
+  test(S("abcde"), 0, 5, S("abcde"), 0, 5, 0);
+  test(S("abcde"), 0, 5, S("abcde"), 0, 6, 0);
+  test(S("abcde"), 0, 5, S("abcde"), 1, 0, 5);
+  test(S("abcde"), 0, 5, S("abcde"), 1, 1, -1);
+  test(S("abcde"), 0, 5, S("abcde"), 1, 2, -1);
+  test(S("abcde"), 0, 5, S("abcde"), 1, 3, -1);
+  test(S("abcde"), 0, 5, S("abcde"), 1, 4, -1);
+  test(S("abcde"), 0, 5, S("abcde"), 1, 5, -1);
+  test(S("abcde"), 0, 5, S("abcde"), 2, 0, 5);
+  test(S("abcde"), 0, 5, S("abcde"), 2, 1, -2);
+  test(S("abcde"), 0, 5, S("abcde"), 2, 2, -2);
+  test(S("abcde"), 0, 5, S("abcde"), 2, 3, -2);
+  test(S("abcde"), 0, 5, S("abcde"), 2, 4, -2);
+  test(S("abcde"), 0, 5, S("abcde"), 4, 0, 5);
+  test(S("abcde"), 0, 5, S("abcde"), 4, 1, -4);
+  test(S("abcde"), 0, 5, S("abcde"), 4, 2, -4);
+  test(S("abcde"), 0, 5, S("abcde"), 5, 0, 5);
+  test(S("abcde"), 0, 5, S("abcde"), 5, 1, 5);
+  test(S("abcde"), 0, 5, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 0, 0, 5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 0, 1, 4);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 0, 5, 0);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 0, 9, -4);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 0, 10, -5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 0, 11, -5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 1, 0, 5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 1, 4, -1);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 1, 8, -1);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 1, 9, -1);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 1, 10, -1);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 5, 0, 5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 5, 1, -5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 5, 2, -5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 5, 4, -5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 9, 0, 5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 9, 1, -9);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 9, 2, -9);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 10, 0, 5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 10, 1, 5);
+  test(S("abcde"), 0, 5, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 0, 5);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 1, 4);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 10, -5);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 19, -14);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 20, -15);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 0, 21, -15);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 0, 5);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 0, 5);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 19, 0, 5);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 20, 0, 5);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 20, 1, 5);
+  test(S("abcde"), 0, 5, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 0, 6, S(""), 0, 0, 5);
+  test(S("abcde"), 0, 6, S(""), 0, 1, 5);
+  test(S("abcde"), 0, 6, S(""), 1, 0, 0);
+  test(S("abcde"), 0, 6, S("abcde"), 0, 0, 5);
+  test(S("abcde"), 0, 6, S("abcde"), 0, 1, 4);
+  test(S("abcde"), 0, 6, S("abcde"), 0, 2, 3);
+  test(S("abcde"), 0, 6, S("abcde"), 0, 4, 1);
+  test(S("abcde"), 0, 6, S("abcde"), 0, 5, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test6()
-{
-    test(S("abcde"), 0, 6, S("abcde"), 0, 6, 0);
-    test(S("abcde"), 0, 6, S("abcde"), 1, 0, 5);
-    test(S("abcde"), 0, 6, S("abcde"), 1, 1, -1);
-    test(S("abcde"), 0, 6, S("abcde"), 1, 2, -1);
-    test(S("abcde"), 0, 6, S("abcde"), 1, 3, -1);
-    test(S("abcde"), 0, 6, S("abcde"), 1, 4, -1);
-    test(S("abcde"), 0, 6, S("abcde"), 1, 5, -1);
-    test(S("abcde"), 0, 6, S("abcde"), 2, 0, 5);
-    test(S("abcde"), 0, 6, S("abcde"), 2, 1, -2);
-    test(S("abcde"), 0, 6, S("abcde"), 2, 2, -2);
-    test(S("abcde"), 0, 6, S("abcde"), 2, 3, -2);
-    test(S("abcde"), 0, 6, S("abcde"), 2, 4, -2);
-    test(S("abcde"), 0, 6, S("abcde"), 4, 0, 5);
-    test(S("abcde"), 0, 6, S("abcde"), 4, 1, -4);
-    test(S("abcde"), 0, 6, S("abcde"), 4, 2, -4);
-    test(S("abcde"), 0, 6, S("abcde"), 5, 0, 5);
-    test(S("abcde"), 0, 6, S("abcde"), 5, 1, 5);
-    test(S("abcde"), 0, 6, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 0, 0, 5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 0, 1, 4);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 0, 5, 0);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 0, 9, -4);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 0, 10, -5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 0, 11, -5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 1, 0, 5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 1, 4, -1);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 1, 8, -1);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 1, 9, -1);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 1, 10, -1);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 5, 0, 5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 5, 1, -5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 5, 2, -5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 5, 4, -5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 9, 0, 5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 9, 1, -9);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 9, 2, -9);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 10, 0, 5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 10, 1, 5);
-    test(S("abcde"), 0, 6, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 0, 5);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 1, 4);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 10, -5);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 19, -14);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 20, -15);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 21, -15);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 0, 5);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 0, 5);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 19, 0, 5);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 20, 0, 5);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 20, 1, 5);
-    test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 1, 0, S(""), 0, 0, 0);
-    test(S("abcde"), 1, 0, S(""), 0, 1, 0);
-    test(S("abcde"), 1, 0, S(""), 1, 0, 0);
-    test(S("abcde"), 1, 0, S("abcde"), 0, 0, 0);
-    test(S("abcde"), 1, 0, S("abcde"), 0, 1, -1);
-    test(S("abcde"), 1, 0, S("abcde"), 0, 2, -2);
-    test(S("abcde"), 1, 0, S("abcde"), 0, 4, -4);
-    test(S("abcde"), 1, 0, S("abcde"), 0, 5, -5);
-    test(S("abcde"), 1, 0, S("abcde"), 0, 6, -5);
-    test(S("abcde"), 1, 0, S("abcde"), 1, 0, 0);
-    test(S("abcde"), 1, 0, S("abcde"), 1, 1, -1);
-    test(S("abcde"), 1, 0, S("abcde"), 1, 2, -2);
-    test(S("abcde"), 1, 0, S("abcde"), 1, 3, -3);
-    test(S("abcde"), 1, 0, S("abcde"), 1, 4, -4);
-    test(S("abcde"), 1, 0, S("abcde"), 1, 5, -4);
-    test(S("abcde"), 1, 0, S("abcde"), 2, 0, 0);
-    test(S("abcde"), 1, 0, S("abcde"), 2, 1, -1);
-    test(S("abcde"), 1, 0, S("abcde"), 2, 2, -2);
-    test(S("abcde"), 1, 0, S("abcde"), 2, 3, -3);
-    test(S("abcde"), 1, 0, S("abcde"), 2, 4, -3);
-    test(S("abcde"), 1, 0, S("abcde"), 4, 0, 0);
-    test(S("abcde"), 1, 0, S("abcde"), 4, 1, -1);
-    test(S("abcde"), 1, 0, S("abcde"), 4, 2, -1);
-    test(S("abcde"), 1, 0, S("abcde"), 5, 0, 0);
-    test(S("abcde"), 1, 0, S("abcde"), 5, 1, 0);
-    test(S("abcde"), 1, 0, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 1, 1, -1);
+TEST_CONSTEXPR_CXX20 bool test6() {
+  test(S("abcde"), 0, 6, S("abcde"), 0, 6, 0);
+  test(S("abcde"), 0, 6, S("abcde"), 1, 0, 5);
+  test(S("abcde"), 0, 6, S("abcde"), 1, 1, -1);
+  test(S("abcde"), 0, 6, S("abcde"), 1, 2, -1);
+  test(S("abcde"), 0, 6, S("abcde"), 1, 3, -1);
+  test(S("abcde"), 0, 6, S("abcde"), 1, 4, -1);
+  test(S("abcde"), 0, 6, S("abcde"), 1, 5, -1);
+  test(S("abcde"), 0, 6, S("abcde"), 2, 0, 5);
+  test(S("abcde"), 0, 6, S("abcde"), 2, 1, -2);
+  test(S("abcde"), 0, 6, S("abcde"), 2, 2, -2);
+  test(S("abcde"), 0, 6, S("abcde"), 2, 3, -2);
+  test(S("abcde"), 0, 6, S("abcde"), 2, 4, -2);
+  test(S("abcde"), 0, 6, S("abcde"), 4, 0, 5);
+  test(S("abcde"), 0, 6, S("abcde"), 4, 1, -4);
+  test(S("abcde"), 0, 6, S("abcde"), 4, 2, -4);
+  test(S("abcde"), 0, 6, S("abcde"), 5, 0, 5);
+  test(S("abcde"), 0, 6, S("abcde"), 5, 1, 5);
+  test(S("abcde"), 0, 6, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 0, 0, 5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 0, 1, 4);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 0, 5, 0);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 0, 9, -4);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 0, 10, -5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 0, 11, -5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 1, 0, 5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 1, 4, -1);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 1, 8, -1);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 1, 9, -1);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 1, 10, -1);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 5, 0, 5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 5, 1, -5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 5, 2, -5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 5, 4, -5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 9, 0, 5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 9, 1, -9);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 9, 2, -9);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 10, 0, 5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 10, 1, 5);
+  test(S("abcde"), 0, 6, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 0, 5);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 1, 4);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 10, -5);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 19, -14);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 20, -15);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 0, 21, -15);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 0, 5);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 0, 5);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 19, 0, 5);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 20, 0, 5);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 20, 1, 5);
+  test(S("abcde"), 0, 6, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 1, 0, S(""), 0, 0, 0);
+  test(S("abcde"), 1, 0, S(""), 0, 1, 0);
+  test(S("abcde"), 1, 0, S(""), 1, 0, 0);
+  test(S("abcde"), 1, 0, S("abcde"), 0, 0, 0);
+  test(S("abcde"), 1, 0, S("abcde"), 0, 1, -1);
+  test(S("abcde"), 1, 0, S("abcde"), 0, 2, -2);
+  test(S("abcde"), 1, 0, S("abcde"), 0, 4, -4);
+  test(S("abcde"), 1, 0, S("abcde"), 0, 5, -5);
+  test(S("abcde"), 1, 0, S("abcde"), 0, 6, -5);
+  test(S("abcde"), 1, 0, S("abcde"), 1, 0, 0);
+  test(S("abcde"), 1, 0, S("abcde"), 1, 1, -1);
+  test(S("abcde"), 1, 0, S("abcde"), 1, 2, -2);
+  test(S("abcde"), 1, 0, S("abcde"), 1, 3, -3);
+  test(S("abcde"), 1, 0, S("abcde"), 1, 4, -4);
+  test(S("abcde"), 1, 0, S("abcde"), 1, 5, -4);
+  test(S("abcde"), 1, 0, S("abcde"), 2, 0, 0);
+  test(S("abcde"), 1, 0, S("abcde"), 2, 1, -1);
+  test(S("abcde"), 1, 0, S("abcde"), 2, 2, -2);
+  test(S("abcde"), 1, 0, S("abcde"), 2, 3, -3);
+  test(S("abcde"), 1, 0, S("abcde"), 2, 4, -3);
+  test(S("abcde"), 1, 0, S("abcde"), 4, 0, 0);
+  test(S("abcde"), 1, 0, S("abcde"), 4, 1, -1);
+  test(S("abcde"), 1, 0, S("abcde"), 4, 2, -1);
+  test(S("abcde"), 1, 0, S("abcde"), 5, 0, 0);
+  test(S("abcde"), 1, 0, S("abcde"), 5, 1, 0);
+  test(S("abcde"), 1, 0, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 1, 1, -1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test7()
-{
-    test(S("abcde"), 1, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 1, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 1, 1, S(""), 0, 0, 1);
-    test(S("abcde"), 1, 1, S(""), 0, 1, 1);
-    test(S("abcde"), 1, 1, S(""), 1, 0, 0);
-    test(S("abcde"), 1, 1, S("abcde"), 0, 0, 1);
-    test(S("abcde"), 1, 1, S("abcde"), 0, 1, 1);
-    test(S("abcde"), 1, 1, S("abcde"), 0, 2, 1);
-    test(S("abcde"), 1, 1, S("abcde"), 0, 4, 1);
-    test(S("abcde"), 1, 1, S("abcde"), 0, 5, 1);
-    test(S("abcde"), 1, 1, S("abcde"), 0, 6, 1);
-    test(S("abcde"), 1, 1, S("abcde"), 1, 0, 1);
-    test(S("abcde"), 1, 1, S("abcde"), 1, 1, 0);
-    test(S("abcde"), 1, 1, S("abcde"), 1, 2, -1);
-    test(S("abcde"), 1, 1, S("abcde"), 1, 3, -2);
-    test(S("abcde"), 1, 1, S("abcde"), 1, 4, -3);
-    test(S("abcde"), 1, 1, S("abcde"), 1, 5, -3);
-    test(S("abcde"), 1, 1, S("abcde"), 2, 0, 1);
-    test(S("abcde"), 1, 1, S("abcde"), 2, 1, -1);
-    test(S("abcde"), 1, 1, S("abcde"), 2, 2, -1);
-    test(S("abcde"), 1, 1, S("abcde"), 2, 3, -1);
-    test(S("abcde"), 1, 1, S("abcde"), 2, 4, -1);
-    test(S("abcde"), 1, 1, S("abcde"), 4, 0, 1);
-    test(S("abcde"), 1, 1, S("abcde"), 4, 1, -3);
-    test(S("abcde"), 1, 1, S("abcde"), 4, 2, -3);
-    test(S("abcde"), 1, 1, S("abcde"), 5, 0, 1);
-    test(S("abcde"), 1, 1, S("abcde"), 5, 1, 1);
-    test(S("abcde"), 1, 1, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 0, 0, 1);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 0, 1, 1);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 0, 5, 1);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 0, 9, 1);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 0, 10, 1);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 0, 11, 1);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 1, 0, 1);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 1, 1, 0);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 1, 4, -3);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 1, 8, -7);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 1, 9, -8);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 1, 10, -8);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 5, 0, 1);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 5, 1, -4);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 5, 2, -4);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 5, 5, -4);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 5, 6, -4);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 9, 0, 1);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 9, 1, -8);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 9, 2, -8);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 10, 0, 1);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 10, 1, 1);
-    test(S("abcde"), 1, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 1, 0);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 9, -8);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 18, -17);
+TEST_CONSTEXPR_CXX20 bool test7() {
+  test(S("abcde"), 1, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 1, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 1, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 1, 1, S(""), 0, 0, 1);
+  test(S("abcde"), 1, 1, S(""), 0, 1, 1);
+  test(S("abcde"), 1, 1, S(""), 1, 0, 0);
+  test(S("abcde"), 1, 1, S("abcde"), 0, 0, 1);
+  test(S("abcde"), 1, 1, S("abcde"), 0, 1, 1);
+  test(S("abcde"), 1, 1, S("abcde"), 0, 2, 1);
+  test(S("abcde"), 1, 1, S("abcde"), 0, 4, 1);
+  test(S("abcde"), 1, 1, S("abcde"), 0, 5, 1);
+  test(S("abcde"), 1, 1, S("abcde"), 0, 6, 1);
+  test(S("abcde"), 1, 1, S("abcde"), 1, 0, 1);
+  test(S("abcde"), 1, 1, S("abcde"), 1, 1, 0);
+  test(S("abcde"), 1, 1, S("abcde"), 1, 2, -1);
+  test(S("abcde"), 1, 1, S("abcde"), 1, 3, -2);
+  test(S("abcde"), 1, 1, S("abcde"), 1, 4, -3);
+  test(S("abcde"), 1, 1, S("abcde"), 1, 5, -3);
+  test(S("abcde"), 1, 1, S("abcde"), 2, 0, 1);
+  test(S("abcde"), 1, 1, S("abcde"), 2, 1, -1);
+  test(S("abcde"), 1, 1, S("abcde"), 2, 2, -1);
+  test(S("abcde"), 1, 1, S("abcde"), 2, 3, -1);
+  test(S("abcde"), 1, 1, S("abcde"), 2, 4, -1);
+  test(S("abcde"), 1, 1, S("abcde"), 4, 0, 1);
+  test(S("abcde"), 1, 1, S("abcde"), 4, 1, -3);
+  test(S("abcde"), 1, 1, S("abcde"), 4, 2, -3);
+  test(S("abcde"), 1, 1, S("abcde"), 5, 0, 1);
+  test(S("abcde"), 1, 1, S("abcde"), 5, 1, 1);
+  test(S("abcde"), 1, 1, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 0, 0, 1);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 0, 1, 1);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 0, 5, 1);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 0, 9, 1);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 0, 10, 1);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 0, 11, 1);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 1, 0, 1);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 1, 1, 0);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 1, 4, -3);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 1, 8, -7);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 1, 9, -8);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 1, 10, -8);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 5, 0, 1);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 5, 1, -4);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 5, 2, -4);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 5, 5, -4);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 5, 6, -4);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 9, 0, 1);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 9, 1, -8);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 9, 2, -8);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 10, 0, 1);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 10, 1, 1);
+  test(S("abcde"), 1, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 1, 0);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 9, -8);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 18, -17);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test8()
-{
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 19, -18);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 20, -18);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 1, 2, S(""), 0, 0, 2);
-    test(S("abcde"), 1, 2, S(""), 0, 1, 2);
-    test(S("abcde"), 1, 2, S(""), 1, 0, 0);
-    test(S("abcde"), 1, 2, S("abcde"), 0, 0, 2);
-    test(S("abcde"), 1, 2, S("abcde"), 0, 1, 1);
-    test(S("abcde"), 1, 2, S("abcde"), 0, 2, 1);
-    test(S("abcde"), 1, 2, S("abcde"), 0, 4, 1);
-    test(S("abcde"), 1, 2, S("abcde"), 0, 5, 1);
-    test(S("abcde"), 1, 2, S("abcde"), 0, 6, 1);
-    test(S("abcde"), 1, 2, S("abcde"), 1, 0, 2);
-    test(S("abcde"), 1, 2, S("abcde"), 1, 1, 1);
-    test(S("abcde"), 1, 2, S("abcde"), 1, 2, 0);
-    test(S("abcde"), 1, 2, S("abcde"), 1, 3, -1);
-    test(S("abcde"), 1, 2, S("abcde"), 1, 4, -2);
-    test(S("abcde"), 1, 2, S("abcde"), 1, 5, -2);
-    test(S("abcde"), 1, 2, S("abcde"), 2, 0, 2);
-    test(S("abcde"), 1, 2, S("abcde"), 2, 1, -1);
-    test(S("abcde"), 1, 2, S("abcde"), 2, 2, -1);
-    test(S("abcde"), 1, 2, S("abcde"), 2, 3, -1);
-    test(S("abcde"), 1, 2, S("abcde"), 2, 4, -1);
-    test(S("abcde"), 1, 2, S("abcde"), 4, 0, 2);
-    test(S("abcde"), 1, 2, S("abcde"), 4, 1, -3);
-    test(S("abcde"), 1, 2, S("abcde"), 4, 2, -3);
-    test(S("abcde"), 1, 2, S("abcde"), 5, 0, 2);
-    test(S("abcde"), 1, 2, S("abcde"), 5, 1, 2);
-    test(S("abcde"), 1, 2, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 0, 0, 2);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 0, 1, 1);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 0, 5, 1);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 0, 9, 1);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 0, 10, 1);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 0, 11, 1);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 1, 0, 2);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 1, 1, 1);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 1, 4, -2);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 1, 8, -6);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 1, 9, -7);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 1, 10, -7);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 5, 0, 2);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 5, 1, -4);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 5, 2, -4);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 5, 5, -4);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 5, 6, -4);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 9, 0, 2);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 9, 1, -8);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 9, 2, -8);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 10, 0, 2);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 10, 1, 2);
-    test(S("abcde"), 1, 2, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 0, 2);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 0, 2);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 1, 1);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 9, -7);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 18, -16);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 19, -17);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 20, -17);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 0, 2);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 19, 0, 2);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 20, 0, 2);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 20, 1, 2);
-    test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 1, 3, S(""), 0, 0, 3);
-    test(S("abcde"), 1, 3, S(""), 0, 1, 3);
-    test(S("abcde"), 1, 3, S(""), 1, 0, 0);
-    test(S("abcde"), 1, 3, S("abcde"), 0, 0, 3);
-    test(S("abcde"), 1, 3, S("abcde"), 0, 1, 1);
-    test(S("abcde"), 1, 3, S("abcde"), 0, 2, 1);
-    test(S("abcde"), 1, 3, S("abcde"), 0, 4, 1);
-    test(S("abcde"), 1, 3, S("abcde"), 0, 5, 1);
-    test(S("abcde"), 1, 3, S("abcde"), 0, 6, 1);
-    test(S("abcde"), 1, 3, S("abcde"), 1, 0, 3);
-    test(S("abcde"), 1, 3, S("abcde"), 1, 1, 2);
-    test(S("abcde"), 1, 3, S("abcde"), 1, 2, 1);
+TEST_CONSTEXPR_CXX20 bool test8() {
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 19, -18);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 20, -18);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 1, 2, S(""), 0, 0, 2);
+  test(S("abcde"), 1, 2, S(""), 0, 1, 2);
+  test(S("abcde"), 1, 2, S(""), 1, 0, 0);
+  test(S("abcde"), 1, 2, S("abcde"), 0, 0, 2);
+  test(S("abcde"), 1, 2, S("abcde"), 0, 1, 1);
+  test(S("abcde"), 1, 2, S("abcde"), 0, 2, 1);
+  test(S("abcde"), 1, 2, S("abcde"), 0, 4, 1);
+  test(S("abcde"), 1, 2, S("abcde"), 0, 5, 1);
+  test(S("abcde"), 1, 2, S("abcde"), 0, 6, 1);
+  test(S("abcde"), 1, 2, S("abcde"), 1, 0, 2);
+  test(S("abcde"), 1, 2, S("abcde"), 1, 1, 1);
+  test(S("abcde"), 1, 2, S("abcde"), 1, 2, 0);
+  test(S("abcde"), 1, 2, S("abcde"), 1, 3, -1);
+  test(S("abcde"), 1, 2, S("abcde"), 1, 4, -2);
+  test(S("abcde"), 1, 2, S("abcde"), 1, 5, -2);
+  test(S("abcde"), 1, 2, S("abcde"), 2, 0, 2);
+  test(S("abcde"), 1, 2, S("abcde"), 2, 1, -1);
+  test(S("abcde"), 1, 2, S("abcde"), 2, 2, -1);
+  test(S("abcde"), 1, 2, S("abcde"), 2, 3, -1);
+  test(S("abcde"), 1, 2, S("abcde"), 2, 4, -1);
+  test(S("abcde"), 1, 2, S("abcde"), 4, 0, 2);
+  test(S("abcde"), 1, 2, S("abcde"), 4, 1, -3);
+  test(S("abcde"), 1, 2, S("abcde"), 4, 2, -3);
+  test(S("abcde"), 1, 2, S("abcde"), 5, 0, 2);
+  test(S("abcde"), 1, 2, S("abcde"), 5, 1, 2);
+  test(S("abcde"), 1, 2, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 0, 0, 2);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 0, 1, 1);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 0, 5, 1);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 0, 9, 1);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 0, 10, 1);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 0, 11, 1);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 1, 0, 2);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 1, 1, 1);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 1, 4, -2);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 1, 8, -6);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 1, 9, -7);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 1, 10, -7);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 5, 0, 2);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 5, 1, -4);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 5, 2, -4);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 5, 5, -4);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 5, 6, -4);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 9, 0, 2);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 9, 1, -8);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 9, 2, -8);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 10, 0, 2);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 10, 1, 2);
+  test(S("abcde"), 1, 2, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 0, 2);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 0, 2);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 1, 1);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 9, -7);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 18, -16);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 19, -17);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 1, 20, -17);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 0, 2);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 19, 0, 2);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 20, 0, 2);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 20, 1, 2);
+  test(S("abcde"), 1, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 1, 3, S(""), 0, 0, 3);
+  test(S("abcde"), 1, 3, S(""), 0, 1, 3);
+  test(S("abcde"), 1, 3, S(""), 1, 0, 0);
+  test(S("abcde"), 1, 3, S("abcde"), 0, 0, 3);
+  test(S("abcde"), 1, 3, S("abcde"), 0, 1, 1);
+  test(S("abcde"), 1, 3, S("abcde"), 0, 2, 1);
+  test(S("abcde"), 1, 3, S("abcde"), 0, 4, 1);
+  test(S("abcde"), 1, 3, S("abcde"), 0, 5, 1);
+  test(S("abcde"), 1, 3, S("abcde"), 0, 6, 1);
+  test(S("abcde"), 1, 3, S("abcde"), 1, 0, 3);
+  test(S("abcde"), 1, 3, S("abcde"), 1, 1, 2);
+  test(S("abcde"), 1, 3, S("abcde"), 1, 2, 1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test9()
-{
-    test(S("abcde"), 1, 3, S("abcde"), 1, 3, 0);
-    test(S("abcde"), 1, 3, S("abcde"), 1, 4, -1);
-    test(S("abcde"), 1, 3, S("abcde"), 1, 5, -1);
-    test(S("abcde"), 1, 3, S("abcde"), 2, 0, 3);
-    test(S("abcde"), 1, 3, S("abcde"), 2, 1, -1);
-    test(S("abcde"), 1, 3, S("abcde"), 2, 2, -1);
-    test(S("abcde"), 1, 3, S("abcde"), 2, 3, -1);
-    test(S("abcde"), 1, 3, S("abcde"), 2, 4, -1);
-    test(S("abcde"), 1, 3, S("abcde"), 4, 0, 3);
-    test(S("abcde"), 1, 3, S("abcde"), 4, 1, -3);
-    test(S("abcde"), 1, 3, S("abcde"), 4, 2, -3);
-    test(S("abcde"), 1, 3, S("abcde"), 5, 0, 3);
-    test(S("abcde"), 1, 3, S("abcde"), 5, 1, 3);
-    test(S("abcde"), 1, 3, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 0, 0, 3);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 0, 1, 1);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 0, 5, 1);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 0, 9, 1);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 0, 10, 1);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 0, 11, 1);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 1, 0, 3);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 1, 1, 2);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 1, 4, -1);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 1, 8, -5);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 1, 9, -6);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 1, 10, -6);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 5, 0, 3);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 5, 1, -4);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 5, 2, -4);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 5, 5, -4);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 5, 6, -4);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 9, 0, 3);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 9, 1, -8);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 9, 2, -8);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 10, 0, 3);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 10, 1, 3);
-    test(S("abcde"), 1, 3, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 0, 3);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 0, 3);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 1, 2);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 9, -6);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 18, -15);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 19, -16);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 20, -16);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 0, 3);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 19, 0, 3);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 20, 0, 3);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 20, 1, 3);
-    test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 1, 4, S(""), 0, 0, 4);
-    test(S("abcde"), 1, 4, S(""), 0, 1, 4);
-    test(S("abcde"), 1, 4, S(""), 1, 0, 0);
-    test(S("abcde"), 1, 4, S("abcde"), 0, 0, 4);
-    test(S("abcde"), 1, 4, S("abcde"), 0, 1, 1);
-    test(S("abcde"), 1, 4, S("abcde"), 0, 2, 1);
-    test(S("abcde"), 1, 4, S("abcde"), 0, 4, 1);
-    test(S("abcde"), 1, 4, S("abcde"), 0, 5, 1);
-    test(S("abcde"), 1, 4, S("abcde"), 0, 6, 1);
-    test(S("abcde"), 1, 4, S("abcde"), 1, 0, 4);
-    test(S("abcde"), 1, 4, S("abcde"), 1, 1, 3);
-    test(S("abcde"), 1, 4, S("abcde"), 1, 2, 2);
-    test(S("abcde"), 1, 4, S("abcde"), 1, 3, 1);
-    test(S("abcde"), 1, 4, S("abcde"), 1, 4, 0);
-    test(S("abcde"), 1, 4, S("abcde"), 1, 5, 0);
-    test(S("abcde"), 1, 4, S("abcde"), 2, 0, 4);
-    test(S("abcde"), 1, 4, S("abcde"), 2, 1, -1);
-    test(S("abcde"), 1, 4, S("abcde"), 2, 2, -1);
-    test(S("abcde"), 1, 4, S("abcde"), 2, 3, -1);
-    test(S("abcde"), 1, 4, S("abcde"), 2, 4, -1);
-    test(S("abcde"), 1, 4, S("abcde"), 4, 0, 4);
-    test(S("abcde"), 1, 4, S("abcde"), 4, 1, -3);
-    test(S("abcde"), 1, 4, S("abcde"), 4, 2, -3);
-    test(S("abcde"), 1, 4, S("abcde"), 5, 0, 4);
-    test(S("abcde"), 1, 4, S("abcde"), 5, 1, 4);
-    test(S("abcde"), 1, 4, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 0, 0, 4);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 0, 1, 1);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 0, 5, 1);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 0, 9, 1);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 0, 10, 1);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 0, 11, 1);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 1, 0, 4);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 1, 1, 3);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 1, 4, 0);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 1, 8, -4);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 1, 9, -5);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 1, 10, -5);
+TEST_CONSTEXPR_CXX20 bool test9() {
+  test(S("abcde"), 1, 3, S("abcde"), 1, 3, 0);
+  test(S("abcde"), 1, 3, S("abcde"), 1, 4, -1);
+  test(S("abcde"), 1, 3, S("abcde"), 1, 5, -1);
+  test(S("abcde"), 1, 3, S("abcde"), 2, 0, 3);
+  test(S("abcde"), 1, 3, S("abcde"), 2, 1, -1);
+  test(S("abcde"), 1, 3, S("abcde"), 2, 2, -1);
+  test(S("abcde"), 1, 3, S("abcde"), 2, 3, -1);
+  test(S("abcde"), 1, 3, S("abcde"), 2, 4, -1);
+  test(S("abcde"), 1, 3, S("abcde"), 4, 0, 3);
+  test(S("abcde"), 1, 3, S("abcde"), 4, 1, -3);
+  test(S("abcde"), 1, 3, S("abcde"), 4, 2, -3);
+  test(S("abcde"), 1, 3, S("abcde"), 5, 0, 3);
+  test(S("abcde"), 1, 3, S("abcde"), 5, 1, 3);
+  test(S("abcde"), 1, 3, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 0, 0, 3);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 0, 1, 1);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 0, 5, 1);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 0, 9, 1);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 0, 10, 1);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 0, 11, 1);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 1, 0, 3);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 1, 1, 2);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 1, 4, -1);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 1, 8, -5);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 1, 9, -6);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 1, 10, -6);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 5, 0, 3);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 5, 1, -4);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 5, 2, -4);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 5, 5, -4);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 5, 6, -4);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 9, 0, 3);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 9, 1, -8);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 9, 2, -8);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 10, 0, 3);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 10, 1, 3);
+  test(S("abcde"), 1, 3, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 0, 3);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 0, 3);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 1, 2);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 9, -6);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 18, -15);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 19, -16);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 1, 20, -16);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 0, 3);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 19, 0, 3);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 20, 0, 3);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 20, 1, 3);
+  test(S("abcde"), 1, 3, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 1, 4, S(""), 0, 0, 4);
+  test(S("abcde"), 1, 4, S(""), 0, 1, 4);
+  test(S("abcde"), 1, 4, S(""), 1, 0, 0);
+  test(S("abcde"), 1, 4, S("abcde"), 0, 0, 4);
+  test(S("abcde"), 1, 4, S("abcde"), 0, 1, 1);
+  test(S("abcde"), 1, 4, S("abcde"), 0, 2, 1);
+  test(S("abcde"), 1, 4, S("abcde"), 0, 4, 1);
+  test(S("abcde"), 1, 4, S("abcde"), 0, 5, 1);
+  test(S("abcde"), 1, 4, S("abcde"), 0, 6, 1);
+  test(S("abcde"), 1, 4, S("abcde"), 1, 0, 4);
+  test(S("abcde"), 1, 4, S("abcde"), 1, 1, 3);
+  test(S("abcde"), 1, 4, S("abcde"), 1, 2, 2);
+  test(S("abcde"), 1, 4, S("abcde"), 1, 3, 1);
+  test(S("abcde"), 1, 4, S("abcde"), 1, 4, 0);
+  test(S("abcde"), 1, 4, S("abcde"), 1, 5, 0);
+  test(S("abcde"), 1, 4, S("abcde"), 2, 0, 4);
+  test(S("abcde"), 1, 4, S("abcde"), 2, 1, -1);
+  test(S("abcde"), 1, 4, S("abcde"), 2, 2, -1);
+  test(S("abcde"), 1, 4, S("abcde"), 2, 3, -1);
+  test(S("abcde"), 1, 4, S("abcde"), 2, 4, -1);
+  test(S("abcde"), 1, 4, S("abcde"), 4, 0, 4);
+  test(S("abcde"), 1, 4, S("abcde"), 4, 1, -3);
+  test(S("abcde"), 1, 4, S("abcde"), 4, 2, -3);
+  test(S("abcde"), 1, 4, S("abcde"), 5, 0, 4);
+  test(S("abcde"), 1, 4, S("abcde"), 5, 1, 4);
+  test(S("abcde"), 1, 4, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 0, 0, 4);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 0, 1, 1);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 0, 5, 1);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 0, 9, 1);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 0, 10, 1);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 0, 11, 1);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 1, 0, 4);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 1, 1, 3);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 1, 4, 0);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 1, 8, -4);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 1, 9, -5);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 1, 10, -5);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test10()
-{
-    test(S("abcde"), 1, 4, S("abcdefghij"), 5, 0, 4);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 5, 1, -4);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 5, 2, -4);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 5, 5, -4);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 5, 6, -4);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 9, 0, 4);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 9, 1, -8);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 9, 2, -8);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 10, 0, 4);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 10, 1, 4);
-    test(S("abcde"), 1, 4, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 0, 4);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 0, 4);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 1, 3);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 9, -5);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 18, -14);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 19, -15);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 20, -15);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 0, 4);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 19, 0, 4);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 20, 0, 4);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 20, 1, 4);
-    test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 1, 5, S(""), 0, 0, 4);
-    test(S("abcde"), 1, 5, S(""), 0, 1, 4);
-    test(S("abcde"), 1, 5, S(""), 1, 0, 0);
-    test(S("abcde"), 1, 5, S("abcde"), 0, 0, 4);
-    test(S("abcde"), 1, 5, S("abcde"), 0, 1, 1);
-    test(S("abcde"), 1, 5, S("abcde"), 0, 2, 1);
-    test(S("abcde"), 1, 5, S("abcde"), 0, 4, 1);
-    test(S("abcde"), 1, 5, S("abcde"), 0, 5, 1);
-    test(S("abcde"), 1, 5, S("abcde"), 0, 6, 1);
-    test(S("abcde"), 1, 5, S("abcde"), 1, 0, 4);
-    test(S("abcde"), 1, 5, S("abcde"), 1, 1, 3);
-    test(S("abcde"), 1, 5, S("abcde"), 1, 2, 2);
-    test(S("abcde"), 1, 5, S("abcde"), 1, 3, 1);
-    test(S("abcde"), 1, 5, S("abcde"), 1, 4, 0);
-    test(S("abcde"), 1, 5, S("abcde"), 1, 5, 0);
-    test(S("abcde"), 1, 5, S("abcde"), 2, 0, 4);
-    test(S("abcde"), 1, 5, S("abcde"), 2, 1, -1);
-    test(S("abcde"), 1, 5, S("abcde"), 2, 2, -1);
-    test(S("abcde"), 1, 5, S("abcde"), 2, 3, -1);
-    test(S("abcde"), 1, 5, S("abcde"), 2, 4, -1);
-    test(S("abcde"), 1, 5, S("abcde"), 4, 0, 4);
-    test(S("abcde"), 1, 5, S("abcde"), 4, 1, -3);
-    test(S("abcde"), 1, 5, S("abcde"), 4, 2, -3);
-    test(S("abcde"), 1, 5, S("abcde"), 5, 0, 4);
-    test(S("abcde"), 1, 5, S("abcde"), 5, 1, 4);
-    test(S("abcde"), 1, 5, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 0, 0, 4);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 0, 1, 1);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 0, 5, 1);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 0, 9, 1);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 0, 10, 1);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 0, 11, 1);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 1, 0, 4);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 1, 1, 3);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 1, 4, 0);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 1, 8, -4);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 1, 9, -5);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 1, 10, -5);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 5, 0, 4);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 5, 1, -4);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 5, 2, -4);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 5, 5, -4);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 5, 6, -4);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 9, 0, 4);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 9, 1, -8);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 9, 2, -8);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 10, 0, 4);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 10, 1, 4);
-    test(S("abcde"), 1, 5, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 0, 4);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 0, 4);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 1, 3);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 9, -5);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 18, -14);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 19, -15);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 20, -15);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 0, 4);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 1, -9);
+TEST_CONSTEXPR_CXX20 bool test10() {
+  test(S("abcde"), 1, 4, S("abcdefghij"), 5, 0, 4);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 5, 1, -4);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 5, 2, -4);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 5, 5, -4);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 5, 6, -4);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 9, 0, 4);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 9, 1, -8);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 9, 2, -8);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 10, 0, 4);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 10, 1, 4);
+  test(S("abcde"), 1, 4, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 0, 4);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 0, 4);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 1, 3);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 9, -5);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 18, -14);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 19, -15);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 1, 20, -15);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 0, 4);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 19, 0, 4);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 20, 0, 4);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 20, 1, 4);
+  test(S("abcde"), 1, 4, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 1, 5, S(""), 0, 0, 4);
+  test(S("abcde"), 1, 5, S(""), 0, 1, 4);
+  test(S("abcde"), 1, 5, S(""), 1, 0, 0);
+  test(S("abcde"), 1, 5, S("abcde"), 0, 0, 4);
+  test(S("abcde"), 1, 5, S("abcde"), 0, 1, 1);
+  test(S("abcde"), 1, 5, S("abcde"), 0, 2, 1);
+  test(S("abcde"), 1, 5, S("abcde"), 0, 4, 1);
+  test(S("abcde"), 1, 5, S("abcde"), 0, 5, 1);
+  test(S("abcde"), 1, 5, S("abcde"), 0, 6, 1);
+  test(S("abcde"), 1, 5, S("abcde"), 1, 0, 4);
+  test(S("abcde"), 1, 5, S("abcde"), 1, 1, 3);
+  test(S("abcde"), 1, 5, S("abcde"), 1, 2, 2);
+  test(S("abcde"), 1, 5, S("abcde"), 1, 3, 1);
+  test(S("abcde"), 1, 5, S("abcde"), 1, 4, 0);
+  test(S("abcde"), 1, 5, S("abcde"), 1, 5, 0);
+  test(S("abcde"), 1, 5, S("abcde"), 2, 0, 4);
+  test(S("abcde"), 1, 5, S("abcde"), 2, 1, -1);
+  test(S("abcde"), 1, 5, S("abcde"), 2, 2, -1);
+  test(S("abcde"), 1, 5, S("abcde"), 2, 3, -1);
+  test(S("abcde"), 1, 5, S("abcde"), 2, 4, -1);
+  test(S("abcde"), 1, 5, S("abcde"), 4, 0, 4);
+  test(S("abcde"), 1, 5, S("abcde"), 4, 1, -3);
+  test(S("abcde"), 1, 5, S("abcde"), 4, 2, -3);
+  test(S("abcde"), 1, 5, S("abcde"), 5, 0, 4);
+  test(S("abcde"), 1, 5, S("abcde"), 5, 1, 4);
+  test(S("abcde"), 1, 5, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 0, 0, 4);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 0, 1, 1);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 0, 5, 1);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 0, 9, 1);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 0, 10, 1);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 0, 11, 1);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 1, 0, 4);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 1, 1, 3);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 1, 4, 0);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 1, 8, -4);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 1, 9, -5);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 1, 10, -5);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 5, 0, 4);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 5, 1, -4);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 5, 2, -4);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 5, 5, -4);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 5, 6, -4);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 9, 0, 4);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 9, 1, -8);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 9, 2, -8);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 10, 0, 4);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 10, 1, 4);
+  test(S("abcde"), 1, 5, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 0, 4);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 0, 4);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 1, 3);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 9, -5);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 18, -14);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 19, -15);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 1, 20, -15);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 0, 4);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 1, -9);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test11()
-{
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 19, 0, 4);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 20, 0, 4);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 20, 1, 4);
-    test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 2, 0, S(""), 0, 0, 0);
-    test(S("abcde"), 2, 0, S(""), 0, 1, 0);
-    test(S("abcde"), 2, 0, S(""), 1, 0, 0);
-    test(S("abcde"), 2, 0, S("abcde"), 0, 0, 0);
-    test(S("abcde"), 2, 0, S("abcde"), 0, 1, -1);
-    test(S("abcde"), 2, 0, S("abcde"), 0, 2, -2);
-    test(S("abcde"), 2, 0, S("abcde"), 0, 4, -4);
-    test(S("abcde"), 2, 0, S("abcde"), 0, 5, -5);
-    test(S("abcde"), 2, 0, S("abcde"), 0, 6, -5);
-    test(S("abcde"), 2, 0, S("abcde"), 1, 0, 0);
-    test(S("abcde"), 2, 0, S("abcde"), 1, 1, -1);
-    test(S("abcde"), 2, 0, S("abcde"), 1, 2, -2);
-    test(S("abcde"), 2, 0, S("abcde"), 1, 3, -3);
-    test(S("abcde"), 2, 0, S("abcde"), 1, 4, -4);
-    test(S("abcde"), 2, 0, S("abcde"), 1, 5, -4);
-    test(S("abcde"), 2, 0, S("abcde"), 2, 0, 0);
-    test(S("abcde"), 2, 0, S("abcde"), 2, 1, -1);
-    test(S("abcde"), 2, 0, S("abcde"), 2, 2, -2);
-    test(S("abcde"), 2, 0, S("abcde"), 2, 3, -3);
-    test(S("abcde"), 2, 0, S("abcde"), 2, 4, -3);
-    test(S("abcde"), 2, 0, S("abcde"), 4, 0, 0);
-    test(S("abcde"), 2, 0, S("abcde"), 4, 1, -1);
-    test(S("abcde"), 2, 0, S("abcde"), 4, 2, -1);
-    test(S("abcde"), 2, 0, S("abcde"), 5, 0, 0);
-    test(S("abcde"), 2, 0, S("abcde"), 5, 1, 0);
-    test(S("abcde"), 2, 0, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 2, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 2, 1, S(""), 0, 0, 1);
-    test(S("abcde"), 2, 1, S(""), 0, 1, 1);
-    test(S("abcde"), 2, 1, S(""), 1, 0, 0);
-    test(S("abcde"), 2, 1, S("abcde"), 0, 0, 1);
-    test(S("abcde"), 2, 1, S("abcde"), 0, 1, 2);
-    test(S("abcde"), 2, 1, S("abcde"), 0, 2, 2);
-    test(S("abcde"), 2, 1, S("abcde"), 0, 4, 2);
-    test(S("abcde"), 2, 1, S("abcde"), 0, 5, 2);
-    test(S("abcde"), 2, 1, S("abcde"), 0, 6, 2);
-    test(S("abcde"), 2, 1, S("abcde"), 1, 0, 1);
-    test(S("abcde"), 2, 1, S("abcde"), 1, 1, 1);
-    test(S("abcde"), 2, 1, S("abcde"), 1, 2, 1);
-    test(S("abcde"), 2, 1, S("abcde"), 1, 3, 1);
-    test(S("abcde"), 2, 1, S("abcde"), 1, 4, 1);
-    test(S("abcde"), 2, 1, S("abcde"), 1, 5, 1);
-    test(S("abcde"), 2, 1, S("abcde"), 2, 0, 1);
+TEST_CONSTEXPR_CXX20 bool test11() {
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 19, 0, 4);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 20, 0, 4);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 20, 1, 4);
+  test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 2, 0, S(""), 0, 0, 0);
+  test(S("abcde"), 2, 0, S(""), 0, 1, 0);
+  test(S("abcde"), 2, 0, S(""), 1, 0, 0);
+  test(S("abcde"), 2, 0, S("abcde"), 0, 0, 0);
+  test(S("abcde"), 2, 0, S("abcde"), 0, 1, -1);
+  test(S("abcde"), 2, 0, S("abcde"), 0, 2, -2);
+  test(S("abcde"), 2, 0, S("abcde"), 0, 4, -4);
+  test(S("abcde"), 2, 0, S("abcde"), 0, 5, -5);
+  test(S("abcde"), 2, 0, S("abcde"), 0, 6, -5);
+  test(S("abcde"), 2, 0, S("abcde"), 1, 0, 0);
+  test(S("abcde"), 2, 0, S("abcde"), 1, 1, -1);
+  test(S("abcde"), 2, 0, S("abcde"), 1, 2, -2);
+  test(S("abcde"), 2, 0, S("abcde"), 1, 3, -3);
+  test(S("abcde"), 2, 0, S("abcde"), 1, 4, -4);
+  test(S("abcde"), 2, 0, S("abcde"), 1, 5, -4);
+  test(S("abcde"), 2, 0, S("abcde"), 2, 0, 0);
+  test(S("abcde"), 2, 0, S("abcde"), 2, 1, -1);
+  test(S("abcde"), 2, 0, S("abcde"), 2, 2, -2);
+  test(S("abcde"), 2, 0, S("abcde"), 2, 3, -3);
+  test(S("abcde"), 2, 0, S("abcde"), 2, 4, -3);
+  test(S("abcde"), 2, 0, S("abcde"), 4, 0, 0);
+  test(S("abcde"), 2, 0, S("abcde"), 4, 1, -1);
+  test(S("abcde"), 2, 0, S("abcde"), 4, 2, -1);
+  test(S("abcde"), 2, 0, S("abcde"), 5, 0, 0);
+  test(S("abcde"), 2, 0, S("abcde"), 5, 1, 0);
+  test(S("abcde"), 2, 0, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 2, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 2, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 2, 1, S(""), 0, 0, 1);
+  test(S("abcde"), 2, 1, S(""), 0, 1, 1);
+  test(S("abcde"), 2, 1, S(""), 1, 0, 0);
+  test(S("abcde"), 2, 1, S("abcde"), 0, 0, 1);
+  test(S("abcde"), 2, 1, S("abcde"), 0, 1, 2);
+  test(S("abcde"), 2, 1, S("abcde"), 0, 2, 2);
+  test(S("abcde"), 2, 1, S("abcde"), 0, 4, 2);
+  test(S("abcde"), 2, 1, S("abcde"), 0, 5, 2);
+  test(S("abcde"), 2, 1, S("abcde"), 0, 6, 2);
+  test(S("abcde"), 2, 1, S("abcde"), 1, 0, 1);
+  test(S("abcde"), 2, 1, S("abcde"), 1, 1, 1);
+  test(S("abcde"), 2, 1, S("abcde"), 1, 2, 1);
+  test(S("abcde"), 2, 1, S("abcde"), 1, 3, 1);
+  test(S("abcde"), 2, 1, S("abcde"), 1, 4, 1);
+  test(S("abcde"), 2, 1, S("abcde"), 1, 5, 1);
+  test(S("abcde"), 2, 1, S("abcde"), 2, 0, 1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test12()
-{
-    test(S("abcde"), 2, 1, S("abcde"), 2, 1, 0);
-    test(S("abcde"), 2, 1, S("abcde"), 2, 2, -1);
-    test(S("abcde"), 2, 1, S("abcde"), 2, 3, -2);
-    test(S("abcde"), 2, 1, S("abcde"), 2, 4, -2);
-    test(S("abcde"), 2, 1, S("abcde"), 4, 0, 1);
-    test(S("abcde"), 2, 1, S("abcde"), 4, 1, -2);
-    test(S("abcde"), 2, 1, S("abcde"), 4, 2, -2);
-    test(S("abcde"), 2, 1, S("abcde"), 5, 0, 1);
-    test(S("abcde"), 2, 1, S("abcde"), 5, 1, 1);
-    test(S("abcde"), 2, 1, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 0, 0, 1);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 0, 1, 2);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 0, 5, 2);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 0, 9, 2);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 0, 10, 2);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 0, 11, 2);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 1, 0, 1);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 1, 1, 1);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 1, 4, 1);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 1, 8, 1);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 1, 9, 1);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 1, 10, 1);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 5, 0, 1);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 5, 1, -3);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 5, 2, -3);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 5, 4, -3);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 5, 5, -3);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 5, 6, -3);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 9, 0, 1);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 9, 1, -7);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 9, 2, -7);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 10, 0, 1);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 10, 1, 1);
-    test(S("abcde"), 2, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 1, 2);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 10, 2);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 19, 2);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 20, 2);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 21, 2);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 1, 1);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 9, 1);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 18, 1);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 19, 1);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 20, 1);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 1, -8);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 5, -8);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 9, -8);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 10, -8);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 11, -8);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 19, 1, -17);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 19, 2, -17);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 2, 2, S(""), 0, 0, 2);
-    test(S("abcde"), 2, 2, S(""), 0, 1, 2);
-    test(S("abcde"), 2, 2, S(""), 1, 0, 0);
-    test(S("abcde"), 2, 2, S("abcde"), 0, 0, 2);
-    test(S("abcde"), 2, 2, S("abcde"), 0, 1, 2);
-    test(S("abcde"), 2, 2, S("abcde"), 0, 2, 2);
-    test(S("abcde"), 2, 2, S("abcde"), 0, 4, 2);
-    test(S("abcde"), 2, 2, S("abcde"), 0, 5, 2);
-    test(S("abcde"), 2, 2, S("abcde"), 0, 6, 2);
-    test(S("abcde"), 2, 2, S("abcde"), 1, 0, 2);
-    test(S("abcde"), 2, 2, S("abcde"), 1, 1, 1);
-    test(S("abcde"), 2, 2, S("abcde"), 1, 2, 1);
-    test(S("abcde"), 2, 2, S("abcde"), 1, 3, 1);
-    test(S("abcde"), 2, 2, S("abcde"), 1, 4, 1);
-    test(S("abcde"), 2, 2, S("abcde"), 1, 5, 1);
-    test(S("abcde"), 2, 2, S("abcde"), 2, 0, 2);
-    test(S("abcde"), 2, 2, S("abcde"), 2, 1, 1);
-    test(S("abcde"), 2, 2, S("abcde"), 2, 2, 0);
-    test(S("abcde"), 2, 2, S("abcde"), 2, 3, -1);
-    test(S("abcde"), 2, 2, S("abcde"), 2, 4, -1);
-    test(S("abcde"), 2, 2, S("abcde"), 4, 0, 2);
-    test(S("abcde"), 2, 2, S("abcde"), 4, 1, -2);
-    test(S("abcde"), 2, 2, S("abcde"), 4, 2, -2);
-    test(S("abcde"), 2, 2, S("abcde"), 5, 0, 2);
-    test(S("abcde"), 2, 2, S("abcde"), 5, 1, 2);
-    test(S("abcde"), 2, 2, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 0, 0, 2);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 0, 1, 2);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 0, 5, 2);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 0, 9, 2);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 0, 10, 2);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 0, 11, 2);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 1, 0, 2);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 1, 1, 1);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 1, 4, 1);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 1, 8, 1);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 1, 9, 1);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 1, 10, 1);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 5, 0, 2);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 5, 1, -3);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 5, 2, -3);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 5, 4, -3);
+TEST_CONSTEXPR_CXX20 bool test12() {
+  test(S("abcde"), 2, 1, S("abcde"), 2, 1, 0);
+  test(S("abcde"), 2, 1, S("abcde"), 2, 2, -1);
+  test(S("abcde"), 2, 1, S("abcde"), 2, 3, -2);
+  test(S("abcde"), 2, 1, S("abcde"), 2, 4, -2);
+  test(S("abcde"), 2, 1, S("abcde"), 4, 0, 1);
+  test(S("abcde"), 2, 1, S("abcde"), 4, 1, -2);
+  test(S("abcde"), 2, 1, S("abcde"), 4, 2, -2);
+  test(S("abcde"), 2, 1, S("abcde"), 5, 0, 1);
+  test(S("abcde"), 2, 1, S("abcde"), 5, 1, 1);
+  test(S("abcde"), 2, 1, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 0, 0, 1);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 0, 1, 2);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 0, 5, 2);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 0, 9, 2);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 0, 10, 2);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 0, 11, 2);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 1, 0, 1);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 1, 1, 1);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 1, 4, 1);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 1, 8, 1);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 1, 9, 1);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 1, 10, 1);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 5, 0, 1);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 5, 1, -3);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 5, 2, -3);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 5, 4, -3);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 5, 5, -3);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 5, 6, -3);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 9, 0, 1);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 9, 1, -7);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 9, 2, -7);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 10, 0, 1);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 10, 1, 1);
+  test(S("abcde"), 2, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 1, 2);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 10, 2);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 19, 2);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 20, 2);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 0, 21, 2);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 1, 1);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 9, 1);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 18, 1);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 19, 1);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 1, 20, 1);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 1, -8);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 5, -8);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 9, -8);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 10, -8);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 10, 11, -8);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 19, 1, -17);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 19, 2, -17);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcde"), 2, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 2, 2, S(""), 0, 0, 2);
+  test(S("abcde"), 2, 2, S(""), 0, 1, 2);
+  test(S("abcde"), 2, 2, S(""), 1, 0, 0);
+  test(S("abcde"), 2, 2, S("abcde"), 0, 0, 2);
+  test(S("abcde"), 2, 2, S("abcde"), 0, 1, 2);
+  test(S("abcde"), 2, 2, S("abcde"), 0, 2, 2);
+  test(S("abcde"), 2, 2, S("abcde"), 0, 4, 2);
+  test(S("abcde"), 2, 2, S("abcde"), 0, 5, 2);
+  test(S("abcde"), 2, 2, S("abcde"), 0, 6, 2);
+  test(S("abcde"), 2, 2, S("abcde"), 1, 0, 2);
+  test(S("abcde"), 2, 2, S("abcde"), 1, 1, 1);
+  test(S("abcde"), 2, 2, S("abcde"), 1, 2, 1);
+  test(S("abcde"), 2, 2, S("abcde"), 1, 3, 1);
+  test(S("abcde"), 2, 2, S("abcde"), 1, 4, 1);
+  test(S("abcde"), 2, 2, S("abcde"), 1, 5, 1);
+  test(S("abcde"), 2, 2, S("abcde"), 2, 0, 2);
+  test(S("abcde"), 2, 2, S("abcde"), 2, 1, 1);
+  test(S("abcde"), 2, 2, S("abcde"), 2, 2, 0);
+  test(S("abcde"), 2, 2, S("abcde"), 2, 3, -1);
+  test(S("abcde"), 2, 2, S("abcde"), 2, 4, -1);
+  test(S("abcde"), 2, 2, S("abcde"), 4, 0, 2);
+  test(S("abcde"), 2, 2, S("abcde"), 4, 1, -2);
+  test(S("abcde"), 2, 2, S("abcde"), 4, 2, -2);
+  test(S("abcde"), 2, 2, S("abcde"), 5, 0, 2);
+  test(S("abcde"), 2, 2, S("abcde"), 5, 1, 2);
+  test(S("abcde"), 2, 2, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 0, 0, 2);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 0, 1, 2);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 0, 5, 2);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 0, 9, 2);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 0, 10, 2);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 0, 11, 2);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 1, 0, 2);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 1, 1, 1);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 1, 4, 1);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 1, 8, 1);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 1, 9, 1);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 1, 10, 1);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 5, 0, 2);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 5, 1, -3);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 5, 2, -3);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 5, 4, -3);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test13()
-{
-    test(S("abcde"), 2, 2, S("abcdefghij"), 5, 5, -3);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 5, 6, -3);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 9, 0, 2);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 9, 1, -7);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 9, 2, -7);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 10, 0, 2);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 10, 1, 2);
-    test(S("abcde"), 2, 2, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 0, 2);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 1, 2);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 10, 2);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 19, 2);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 20, 2);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 21, 2);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 0, 2);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 1, 1);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 9, 1);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 18, 1);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 19, 1);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 20, 1);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 0, 2);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 1, -8);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 5, -8);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 9, -8);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 10, -8);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 11, -8);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 19, 0, 2);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 19, 1, -17);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 19, 2, -17);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 20, 0, 2);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 20, 1, 2);
-    test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 2, 3, S(""), 0, 0, 3);
-    test(S("abcde"), 2, 3, S(""), 0, 1, 3);
-    test(S("abcde"), 2, 3, S(""), 1, 0, 0);
-    test(S("abcde"), 2, 3, S("abcde"), 0, 0, 3);
-    test(S("abcde"), 2, 3, S("abcde"), 0, 1, 2);
-    test(S("abcde"), 2, 3, S("abcde"), 0, 2, 2);
-    test(S("abcde"), 2, 3, S("abcde"), 0, 4, 2);
-    test(S("abcde"), 2, 3, S("abcde"), 0, 5, 2);
-    test(S("abcde"), 2, 3, S("abcde"), 0, 6, 2);
-    test(S("abcde"), 2, 3, S("abcde"), 1, 0, 3);
-    test(S("abcde"), 2, 3, S("abcde"), 1, 1, 1);
-    test(S("abcde"), 2, 3, S("abcde"), 1, 2, 1);
-    test(S("abcde"), 2, 3, S("abcde"), 1, 3, 1);
-    test(S("abcde"), 2, 3, S("abcde"), 1, 4, 1);
-    test(S("abcde"), 2, 3, S("abcde"), 1, 5, 1);
-    test(S("abcde"), 2, 3, S("abcde"), 2, 0, 3);
-    test(S("abcde"), 2, 3, S("abcde"), 2, 1, 2);
-    test(S("abcde"), 2, 3, S("abcde"), 2, 2, 1);
-    test(S("abcde"), 2, 3, S("abcde"), 2, 3, 0);
-    test(S("abcde"), 2, 3, S("abcde"), 2, 4, 0);
-    test(S("abcde"), 2, 3, S("abcde"), 4, 0, 3);
-    test(S("abcde"), 2, 3, S("abcde"), 4, 1, -2);
-    test(S("abcde"), 2, 3, S("abcde"), 4, 2, -2);
-    test(S("abcde"), 2, 3, S("abcde"), 5, 0, 3);
-    test(S("abcde"), 2, 3, S("abcde"), 5, 1, 3);
-    test(S("abcde"), 2, 3, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 0, 0, 3);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 0, 1, 2);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 0, 5, 2);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 0, 9, 2);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 0, 10, 2);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 0, 11, 2);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 1, 0, 3);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 1, 1, 1);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 1, 4, 1);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 1, 8, 1);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 1, 9, 1);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 1, 10, 1);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 5, 0, 3);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 5, 1, -3);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 5, 2, -3);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 5, 4, -3);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 5, 5, -3);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 5, 6, -3);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 9, 0, 3);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 9, 1, -7);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 9, 2, -7);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 10, 0, 3);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 10, 1, 3);
-    test(S("abcde"), 2, 3, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 0, 3);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 1, 2);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 10, 2);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 19, 2);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 20, 2);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 21, 2);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 0, 3);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 1, 1);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 9, 1);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 18, 1);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 19, 1);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 20, 1);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 0, 3);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 1, -8);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 5, -8);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 9, -8);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 10, -8);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 11, -8);
+TEST_CONSTEXPR_CXX20 bool test13() {
+  test(S("abcde"), 2, 2, S("abcdefghij"), 5, 5, -3);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 5, 6, -3);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 9, 0, 2);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 9, 1, -7);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 9, 2, -7);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 10, 0, 2);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 10, 1, 2);
+  test(S("abcde"), 2, 2, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 0, 2);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 1, 2);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 10, 2);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 19, 2);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 20, 2);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 0, 21, 2);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 0, 2);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 1, 1);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 9, 1);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 18, 1);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 19, 1);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 1, 20, 1);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 0, 2);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 1, -8);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 5, -8);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 9, -8);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 10, -8);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 10, 11, -8);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 19, 0, 2);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 19, 1, -17);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 19, 2, -17);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 20, 0, 2);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 20, 1, 2);
+  test(S("abcde"), 2, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 2, 3, S(""), 0, 0, 3);
+  test(S("abcde"), 2, 3, S(""), 0, 1, 3);
+  test(S("abcde"), 2, 3, S(""), 1, 0, 0);
+  test(S("abcde"), 2, 3, S("abcde"), 0, 0, 3);
+  test(S("abcde"), 2, 3, S("abcde"), 0, 1, 2);
+  test(S("abcde"), 2, 3, S("abcde"), 0, 2, 2);
+  test(S("abcde"), 2, 3, S("abcde"), 0, 4, 2);
+  test(S("abcde"), 2, 3, S("abcde"), 0, 5, 2);
+  test(S("abcde"), 2, 3, S("abcde"), 0, 6, 2);
+  test(S("abcde"), 2, 3, S("abcde"), 1, 0, 3);
+  test(S("abcde"), 2, 3, S("abcde"), 1, 1, 1);
+  test(S("abcde"), 2, 3, S("abcde"), 1, 2, 1);
+  test(S("abcde"), 2, 3, S("abcde"), 1, 3, 1);
+  test(S("abcde"), 2, 3, S("abcde"), 1, 4, 1);
+  test(S("abcde"), 2, 3, S("abcde"), 1, 5, 1);
+  test(S("abcde"), 2, 3, S("abcde"), 2, 0, 3);
+  test(S("abcde"), 2, 3, S("abcde"), 2, 1, 2);
+  test(S("abcde"), 2, 3, S("abcde"), 2, 2, 1);
+  test(S("abcde"), 2, 3, S("abcde"), 2, 3, 0);
+  test(S("abcde"), 2, 3, S("abcde"), 2, 4, 0);
+  test(S("abcde"), 2, 3, S("abcde"), 4, 0, 3);
+  test(S("abcde"), 2, 3, S("abcde"), 4, 1, -2);
+  test(S("abcde"), 2, 3, S("abcde"), 4, 2, -2);
+  test(S("abcde"), 2, 3, S("abcde"), 5, 0, 3);
+  test(S("abcde"), 2, 3, S("abcde"), 5, 1, 3);
+  test(S("abcde"), 2, 3, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 0, 0, 3);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 0, 1, 2);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 0, 5, 2);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 0, 9, 2);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 0, 10, 2);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 0, 11, 2);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 1, 0, 3);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 1, 1, 1);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 1, 4, 1);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 1, 8, 1);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 1, 9, 1);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 1, 10, 1);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 5, 0, 3);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 5, 1, -3);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 5, 2, -3);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 5, 4, -3);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 5, 5, -3);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 5, 6, -3);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 9, 0, 3);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 9, 1, -7);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 9, 2, -7);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 10, 0, 3);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 10, 1, 3);
+  test(S("abcde"), 2, 3, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 0, 3);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 1, 2);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 10, 2);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 19, 2);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 20, 2);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 0, 21, 2);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 0, 3);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 1, 1);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 9, 1);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 18, 1);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 19, 1);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 1, 20, 1);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 0, 3);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 1, -8);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 5, -8);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 9, -8);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 10, -8);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 11, -8);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test14()
-{
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 19, 0, 3);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 19, 1, -17);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 19, 2, -17);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 20, 0, 3);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 20, 1, 3);
-    test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 2, 4, S(""), 0, 0, 3);
-    test(S("abcde"), 2, 4, S(""), 0, 1, 3);
-    test(S("abcde"), 2, 4, S(""), 1, 0, 0);
-    test(S("abcde"), 2, 4, S("abcde"), 0, 0, 3);
-    test(S("abcde"), 2, 4, S("abcde"), 0, 1, 2);
-    test(S("abcde"), 2, 4, S("abcde"), 0, 2, 2);
-    test(S("abcde"), 2, 4, S("abcde"), 0, 4, 2);
-    test(S("abcde"), 2, 4, S("abcde"), 0, 5, 2);
-    test(S("abcde"), 2, 4, S("abcde"), 0, 6, 2);
-    test(S("abcde"), 2, 4, S("abcde"), 1, 0, 3);
-    test(S("abcde"), 2, 4, S("abcde"), 1, 1, 1);
-    test(S("abcde"), 2, 4, S("abcde"), 1, 2, 1);
-    test(S("abcde"), 2, 4, S("abcde"), 1, 3, 1);
-    test(S("abcde"), 2, 4, S("abcde"), 1, 4, 1);
-    test(S("abcde"), 2, 4, S("abcde"), 1, 5, 1);
-    test(S("abcde"), 2, 4, S("abcde"), 2, 0, 3);
-    test(S("abcde"), 2, 4, S("abcde"), 2, 1, 2);
-    test(S("abcde"), 2, 4, S("abcde"), 2, 2, 1);
-    test(S("abcde"), 2, 4, S("abcde"), 2, 3, 0);
-    test(S("abcde"), 2, 4, S("abcde"), 2, 4, 0);
-    test(S("abcde"), 2, 4, S("abcde"), 4, 0, 3);
-    test(S("abcde"), 2, 4, S("abcde"), 4, 1, -2);
-    test(S("abcde"), 2, 4, S("abcde"), 4, 2, -2);
-    test(S("abcde"), 2, 4, S("abcde"), 5, 0, 3);
-    test(S("abcde"), 2, 4, S("abcde"), 5, 1, 3);
-    test(S("abcde"), 2, 4, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 0, 0, 3);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 0, 1, 2);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 0, 5, 2);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 0, 9, 2);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 0, 10, 2);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 0, 11, 2);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 1, 0, 3);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 1, 1, 1);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 1, 4, 1);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 1, 8, 1);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 1, 9, 1);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 1, 10, 1);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 5, 0, 3);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 5, 1, -3);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 5, 2, -3);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 5, 4, -3);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 5, 5, -3);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 5, 6, -3);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 9, 0, 3);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 9, 1, -7);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 9, 2, -7);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 10, 0, 3);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 10, 1, 3);
-    test(S("abcde"), 2, 4, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 0, 3);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 1, 2);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 10, 2);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 19, 2);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 20, 2);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 21, 2);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 0, 3);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 1, 1);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 9, 1);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 18, 1);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 19, 1);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 20, 1);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 0, 3);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 1, -8);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 5, -8);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 9, -8);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 10, -8);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 11, -8);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 19, 0, 3);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 19, 1, -17);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 19, 2, -17);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 20, 0, 3);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 20, 1, 3);
-    test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 4, 0, S(""), 0, 0, 0);
-    test(S("abcde"), 4, 0, S(""), 0, 1, 0);
-    test(S("abcde"), 4, 0, S(""), 1, 0, 0);
-    test(S("abcde"), 4, 0, S("abcde"), 0, 0, 0);
-    test(S("abcde"), 4, 0, S("abcde"), 0, 1, -1);
-    test(S("abcde"), 4, 0, S("abcde"), 0, 2, -2);
-    test(S("abcde"), 4, 0, S("abcde"), 0, 4, -4);
-    test(S("abcde"), 4, 0, S("abcde"), 0, 5, -5);
-    test(S("abcde"), 4, 0, S("abcde"), 0, 6, -5);
-    test(S("abcde"), 4, 0, S("abcde"), 1, 0, 0);
-    test(S("abcde"), 4, 0, S("abcde"), 1, 1, -1);
-    test(S("abcde"), 4, 0, S("abcde"), 1, 2, -2);
-    test(S("abcde"), 4, 0, S("abcde"), 1, 3, -3);
-    test(S("abcde"), 4, 0, S("abcde"), 1, 4, -4);
-    test(S("abcde"), 4, 0, S("abcde"), 1, 5, -4);
-    test(S("abcde"), 4, 0, S("abcde"), 2, 0, 0);
-    test(S("abcde"), 4, 0, S("abcde"), 2, 1, -1);
-    test(S("abcde"), 4, 0, S("abcde"), 2, 2, -2);
-    test(S("abcde"), 4, 0, S("abcde"), 2, 3, -3);
-    test(S("abcde"), 4, 0, S("abcde"), 2, 4, -3);
+TEST_CONSTEXPR_CXX20 bool test14() {
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 19, 0, 3);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 19, 1, -17);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 19, 2, -17);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 20, 0, 3);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 20, 1, 3);
+  test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 2, 4, S(""), 0, 0, 3);
+  test(S("abcde"), 2, 4, S(""), 0, 1, 3);
+  test(S("abcde"), 2, 4, S(""), 1, 0, 0);
+  test(S("abcde"), 2, 4, S("abcde"), 0, 0, 3);
+  test(S("abcde"), 2, 4, S("abcde"), 0, 1, 2);
+  test(S("abcde"), 2, 4, S("abcde"), 0, 2, 2);
+  test(S("abcde"), 2, 4, S("abcde"), 0, 4, 2);
+  test(S("abcde"), 2, 4, S("abcde"), 0, 5, 2);
+  test(S("abcde"), 2, 4, S("abcde"), 0, 6, 2);
+  test(S("abcde"), 2, 4, S("abcde"), 1, 0, 3);
+  test(S("abcde"), 2, 4, S("abcde"), 1, 1, 1);
+  test(S("abcde"), 2, 4, S("abcde"), 1, 2, 1);
+  test(S("abcde"), 2, 4, S("abcde"), 1, 3, 1);
+  test(S("abcde"), 2, 4, S("abcde"), 1, 4, 1);
+  test(S("abcde"), 2, 4, S("abcde"), 1, 5, 1);
+  test(S("abcde"), 2, 4, S("abcde"), 2, 0, 3);
+  test(S("abcde"), 2, 4, S("abcde"), 2, 1, 2);
+  test(S("abcde"), 2, 4, S("abcde"), 2, 2, 1);
+  test(S("abcde"), 2, 4, S("abcde"), 2, 3, 0);
+  test(S("abcde"), 2, 4, S("abcde"), 2, 4, 0);
+  test(S("abcde"), 2, 4, S("abcde"), 4, 0, 3);
+  test(S("abcde"), 2, 4, S("abcde"), 4, 1, -2);
+  test(S("abcde"), 2, 4, S("abcde"), 4, 2, -2);
+  test(S("abcde"), 2, 4, S("abcde"), 5, 0, 3);
+  test(S("abcde"), 2, 4, S("abcde"), 5, 1, 3);
+  test(S("abcde"), 2, 4, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 0, 0, 3);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 0, 1, 2);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 0, 5, 2);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 0, 9, 2);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 0, 10, 2);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 0, 11, 2);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 1, 0, 3);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 1, 1, 1);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 1, 4, 1);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 1, 8, 1);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 1, 9, 1);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 1, 10, 1);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 5, 0, 3);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 5, 1, -3);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 5, 2, -3);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 5, 4, -3);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 5, 5, -3);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 5, 6, -3);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 9, 0, 3);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 9, 1, -7);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 9, 2, -7);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 10, 0, 3);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 10, 1, 3);
+  test(S("abcde"), 2, 4, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 0, 3);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 1, 2);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 10, 2);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 19, 2);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 20, 2);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 0, 21, 2);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 0, 3);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 1, 1);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 9, 1);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 18, 1);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 19, 1);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 1, 20, 1);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 0, 3);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 1, -8);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 5, -8);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 9, -8);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 10, -8);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 10, 11, -8);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 19, 0, 3);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 19, 1, -17);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 19, 2, -17);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 20, 0, 3);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 20, 1, 3);
+  test(S("abcde"), 2, 4, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 4, 0, S(""), 0, 0, 0);
+  test(S("abcde"), 4, 0, S(""), 0, 1, 0);
+  test(S("abcde"), 4, 0, S(""), 1, 0, 0);
+  test(S("abcde"), 4, 0, S("abcde"), 0, 0, 0);
+  test(S("abcde"), 4, 0, S("abcde"), 0, 1, -1);
+  test(S("abcde"), 4, 0, S("abcde"), 0, 2, -2);
+  test(S("abcde"), 4, 0, S("abcde"), 0, 4, -4);
+  test(S("abcde"), 4, 0, S("abcde"), 0, 5, -5);
+  test(S("abcde"), 4, 0, S("abcde"), 0, 6, -5);
+  test(S("abcde"), 4, 0, S("abcde"), 1, 0, 0);
+  test(S("abcde"), 4, 0, S("abcde"), 1, 1, -1);
+  test(S("abcde"), 4, 0, S("abcde"), 1, 2, -2);
+  test(S("abcde"), 4, 0, S("abcde"), 1, 3, -3);
+  test(S("abcde"), 4, 0, S("abcde"), 1, 4, -4);
+  test(S("abcde"), 4, 0, S("abcde"), 1, 5, -4);
+  test(S("abcde"), 4, 0, S("abcde"), 2, 0, 0);
+  test(S("abcde"), 4, 0, S("abcde"), 2, 1, -1);
+  test(S("abcde"), 4, 0, S("abcde"), 2, 2, -2);
+  test(S("abcde"), 4, 0, S("abcde"), 2, 3, -3);
+  test(S("abcde"), 4, 0, S("abcde"), 2, 4, -3);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test15()
-{
-    test(S("abcde"), 4, 0, S("abcde"), 4, 0, 0);
-    test(S("abcde"), 4, 0, S("abcde"), 4, 1, -1);
-    test(S("abcde"), 4, 0, S("abcde"), 4, 2, -1);
-    test(S("abcde"), 4, 0, S("abcde"), 5, 0, 0);
-    test(S("abcde"), 4, 0, S("abcde"), 5, 1, 0);
-    test(S("abcde"), 4, 0, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 4, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 4, 1, S(""), 0, 0, 1);
-    test(S("abcde"), 4, 1, S(""), 0, 1, 1);
-    test(S("abcde"), 4, 1, S(""), 1, 0, 0);
-    test(S("abcde"), 4, 1, S("abcde"), 0, 0, 1);
-    test(S("abcde"), 4, 1, S("abcde"), 0, 1, 4);
-    test(S("abcde"), 4, 1, S("abcde"), 0, 2, 4);
-    test(S("abcde"), 4, 1, S("abcde"), 0, 4, 4);
-    test(S("abcde"), 4, 1, S("abcde"), 0, 5, 4);
-    test(S("abcde"), 4, 1, S("abcde"), 0, 6, 4);
-    test(S("abcde"), 4, 1, S("abcde"), 1, 0, 1);
-    test(S("abcde"), 4, 1, S("abcde"), 1, 1, 3);
-    test(S("abcde"), 4, 1, S("abcde"), 1, 2, 3);
-    test(S("abcde"), 4, 1, S("abcde"), 1, 3, 3);
-    test(S("abcde"), 4, 1, S("abcde"), 1, 4, 3);
-    test(S("abcde"), 4, 1, S("abcde"), 1, 5, 3);
-    test(S("abcde"), 4, 1, S("abcde"), 2, 0, 1);
-    test(S("abcde"), 4, 1, S("abcde"), 2, 1, 2);
-    test(S("abcde"), 4, 1, S("abcde"), 2, 2, 2);
-    test(S("abcde"), 4, 1, S("abcde"), 2, 3, 2);
-    test(S("abcde"), 4, 1, S("abcde"), 2, 4, 2);
-    test(S("abcde"), 4, 1, S("abcde"), 4, 0, 1);
-    test(S("abcde"), 4, 1, S("abcde"), 4, 1, 0);
-    test(S("abcde"), 4, 1, S("abcde"), 4, 2, 0);
-    test(S("abcde"), 4, 1, S("abcde"), 5, 0, 1);
-    test(S("abcde"), 4, 1, S("abcde"), 5, 1, 1);
-    test(S("abcde"), 4, 1, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 0, 0, 1);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 0, 1, 4);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 0, 5, 4);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 0, 9, 4);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 0, 10, 4);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 0, 11, 4);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 1, 0, 1);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 1, 1, 3);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 1, 4, 3);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 1, 8, 3);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 1, 9, 3);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 1, 10, 3);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 5, 0, 1);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 5, 2, -1);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 5, 4, -1);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 5, 5, -1);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 5, 6, -1);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 9, 0, 1);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 9, 1, -5);
+TEST_CONSTEXPR_CXX20 bool test15() {
+  test(S("abcde"), 4, 0, S("abcde"), 4, 0, 0);
+  test(S("abcde"), 4, 0, S("abcde"), 4, 1, -1);
+  test(S("abcde"), 4, 0, S("abcde"), 4, 2, -1);
+  test(S("abcde"), 4, 0, S("abcde"), 5, 0, 0);
+  test(S("abcde"), 4, 0, S("abcde"), 5, 1, 0);
+  test(S("abcde"), 4, 0, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 4, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 4, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 4, 1, S(""), 0, 0, 1);
+  test(S("abcde"), 4, 1, S(""), 0, 1, 1);
+  test(S("abcde"), 4, 1, S(""), 1, 0, 0);
+  test(S("abcde"), 4, 1, S("abcde"), 0, 0, 1);
+  test(S("abcde"), 4, 1, S("abcde"), 0, 1, 4);
+  test(S("abcde"), 4, 1, S("abcde"), 0, 2, 4);
+  test(S("abcde"), 4, 1, S("abcde"), 0, 4, 4);
+  test(S("abcde"), 4, 1, S("abcde"), 0, 5, 4);
+  test(S("abcde"), 4, 1, S("abcde"), 0, 6, 4);
+  test(S("abcde"), 4, 1, S("abcde"), 1, 0, 1);
+  test(S("abcde"), 4, 1, S("abcde"), 1, 1, 3);
+  test(S("abcde"), 4, 1, S("abcde"), 1, 2, 3);
+  test(S("abcde"), 4, 1, S("abcde"), 1, 3, 3);
+  test(S("abcde"), 4, 1, S("abcde"), 1, 4, 3);
+  test(S("abcde"), 4, 1, S("abcde"), 1, 5, 3);
+  test(S("abcde"), 4, 1, S("abcde"), 2, 0, 1);
+  test(S("abcde"), 4, 1, S("abcde"), 2, 1, 2);
+  test(S("abcde"), 4, 1, S("abcde"), 2, 2, 2);
+  test(S("abcde"), 4, 1, S("abcde"), 2, 3, 2);
+  test(S("abcde"), 4, 1, S("abcde"), 2, 4, 2);
+  test(S("abcde"), 4, 1, S("abcde"), 4, 0, 1);
+  test(S("abcde"), 4, 1, S("abcde"), 4, 1, 0);
+  test(S("abcde"), 4, 1, S("abcde"), 4, 2, 0);
+  test(S("abcde"), 4, 1, S("abcde"), 5, 0, 1);
+  test(S("abcde"), 4, 1, S("abcde"), 5, 1, 1);
+  test(S("abcde"), 4, 1, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 0, 0, 1);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 0, 1, 4);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 0, 5, 4);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 0, 9, 4);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 0, 10, 4);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 0, 11, 4);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 1, 0, 1);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 1, 1, 3);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 1, 4, 3);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 1, 8, 3);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 1, 9, 3);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 1, 10, 3);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 5, 0, 1);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 5, 2, -1);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 5, 4, -1);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 5, 5, -1);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 5, 6, -1);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 9, 0, 1);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 9, 1, -5);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test16()
-{
-    test(S("abcde"), 4, 1, S("abcdefghij"), 9, 2, -5);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 10, 0, 1);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 10, 1, 1);
-    test(S("abcde"), 4, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 1, 4);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 10, 4);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 19, 4);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 20, 4);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 21, 4);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 1, 3);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 9, 3);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 18, 3);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 19, 3);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 20, 3);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 1, -6);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 5, -6);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 9, -6);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 10, -6);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 11, -6);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 19, 1, -15);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 19, 2, -15);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 4, 2, S(""), 0, 0, 1);
-    test(S("abcde"), 4, 2, S(""), 0, 1, 1);
-    test(S("abcde"), 4, 2, S(""), 1, 0, 0);
-    test(S("abcde"), 4, 2, S("abcde"), 0, 0, 1);
-    test(S("abcde"), 4, 2, S("abcde"), 0, 1, 4);
-    test(S("abcde"), 4, 2, S("abcde"), 0, 2, 4);
-    test(S("abcde"), 4, 2, S("abcde"), 0, 4, 4);
-    test(S("abcde"), 4, 2, S("abcde"), 0, 5, 4);
-    test(S("abcde"), 4, 2, S("abcde"), 0, 6, 4);
-    test(S("abcde"), 4, 2, S("abcde"), 1, 0, 1);
-    test(S("abcde"), 4, 2, S("abcde"), 1, 1, 3);
-    test(S("abcde"), 4, 2, S("abcde"), 1, 2, 3);
-    test(S("abcde"), 4, 2, S("abcde"), 1, 3, 3);
-    test(S("abcde"), 4, 2, S("abcde"), 1, 4, 3);
-    test(S("abcde"), 4, 2, S("abcde"), 1, 5, 3);
-    test(S("abcde"), 4, 2, S("abcde"), 2, 0, 1);
-    test(S("abcde"), 4, 2, S("abcde"), 2, 1, 2);
-    test(S("abcde"), 4, 2, S("abcde"), 2, 2, 2);
-    test(S("abcde"), 4, 2, S("abcde"), 2, 3, 2);
-    test(S("abcde"), 4, 2, S("abcde"), 2, 4, 2);
-    test(S("abcde"), 4, 2, S("abcde"), 4, 0, 1);
-    test(S("abcde"), 4, 2, S("abcde"), 4, 1, 0);
-    test(S("abcde"), 4, 2, S("abcde"), 4, 2, 0);
-    test(S("abcde"), 4, 2, S("abcde"), 5, 0, 1);
-    test(S("abcde"), 4, 2, S("abcde"), 5, 1, 1);
-    test(S("abcde"), 4, 2, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 0, 0, 1);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 0, 1, 4);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 0, 5, 4);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 0, 9, 4);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 0, 10, 4);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 0, 11, 4);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 1, 0, 1);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 1, 1, 3);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 1, 4, 3);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 1, 8, 3);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 1, 9, 3);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 1, 10, 3);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 5, 0, 1);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 5, 2, -1);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 5, 4, -1);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 5, 5, -1);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 5, 6, -1);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 9, 0, 1);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 9, 1, -5);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 9, 2, -5);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 10, 0, 1);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 10, 1, 1);
-    test(S("abcde"), 4, 2, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 1, 4);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 10, 4);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 19, 4);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 20, 4);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 21, 4);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 1, 3);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 9, 3);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 18, 3);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 19, 3);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 20, 3);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 1, -6);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 5, -6);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 9, -6);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 10, -6);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 11, -6);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 19, 1, -15);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 19, 2, -15);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 20, 0, 1);
+TEST_CONSTEXPR_CXX20 bool test16() {
+  test(S("abcde"), 4, 1, S("abcdefghij"), 9, 2, -5);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 10, 0, 1);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 10, 1, 1);
+  test(S("abcde"), 4, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 1, 4);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 10, 4);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 19, 4);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 20, 4);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 0, 21, 4);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 1, 3);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 9, 3);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 18, 3);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 19, 3);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 1, 20, 3);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 1, -6);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 5, -6);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 9, -6);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 10, -6);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 10, 11, -6);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 19, 1, -15);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 19, 2, -15);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcde"), 4, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 4, 2, S(""), 0, 0, 1);
+  test(S("abcde"), 4, 2, S(""), 0, 1, 1);
+  test(S("abcde"), 4, 2, S(""), 1, 0, 0);
+  test(S("abcde"), 4, 2, S("abcde"), 0, 0, 1);
+  test(S("abcde"), 4, 2, S("abcde"), 0, 1, 4);
+  test(S("abcde"), 4, 2, S("abcde"), 0, 2, 4);
+  test(S("abcde"), 4, 2, S("abcde"), 0, 4, 4);
+  test(S("abcde"), 4, 2, S("abcde"), 0, 5, 4);
+  test(S("abcde"), 4, 2, S("abcde"), 0, 6, 4);
+  test(S("abcde"), 4, 2, S("abcde"), 1, 0, 1);
+  test(S("abcde"), 4, 2, S("abcde"), 1, 1, 3);
+  test(S("abcde"), 4, 2, S("abcde"), 1, 2, 3);
+  test(S("abcde"), 4, 2, S("abcde"), 1, 3, 3);
+  test(S("abcde"), 4, 2, S("abcde"), 1, 4, 3);
+  test(S("abcde"), 4, 2, S("abcde"), 1, 5, 3);
+  test(S("abcde"), 4, 2, S("abcde"), 2, 0, 1);
+  test(S("abcde"), 4, 2, S("abcde"), 2, 1, 2);
+  test(S("abcde"), 4, 2, S("abcde"), 2, 2, 2);
+  test(S("abcde"), 4, 2, S("abcde"), 2, 3, 2);
+  test(S("abcde"), 4, 2, S("abcde"), 2, 4, 2);
+  test(S("abcde"), 4, 2, S("abcde"), 4, 0, 1);
+  test(S("abcde"), 4, 2, S("abcde"), 4, 1, 0);
+  test(S("abcde"), 4, 2, S("abcde"), 4, 2, 0);
+  test(S("abcde"), 4, 2, S("abcde"), 5, 0, 1);
+  test(S("abcde"), 4, 2, S("abcde"), 5, 1, 1);
+  test(S("abcde"), 4, 2, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 0, 0, 1);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 0, 1, 4);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 0, 5, 4);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 0, 9, 4);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 0, 10, 4);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 0, 11, 4);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 1, 0, 1);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 1, 1, 3);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 1, 4, 3);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 1, 8, 3);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 1, 9, 3);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 1, 10, 3);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 5, 0, 1);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 5, 2, -1);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 5, 4, -1);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 5, 5, -1);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 5, 6, -1);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 9, 0, 1);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 9, 1, -5);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 9, 2, -5);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 10, 0, 1);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 10, 1, 1);
+  test(S("abcde"), 4, 2, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 1, 4);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 10, 4);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 19, 4);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 20, 4);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 0, 21, 4);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 1, 3);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 9, 3);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 18, 3);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 19, 3);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 1, 20, 3);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 1, -6);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 5, -6);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 9, -6);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 10, -6);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 10, 11, -6);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 19, 1, -15);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 19, 2, -15);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 20, 0, 1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test17()
-{
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 5, 0, S(""), 0, 0, 0);
-    test(S("abcde"), 5, 0, S(""), 0, 1, 0);
-    test(S("abcde"), 5, 0, S(""), 1, 0, 0);
-    test(S("abcde"), 5, 0, S("abcde"), 0, 0, 0);
-    test(S("abcde"), 5, 0, S("abcde"), 0, 1, -1);
-    test(S("abcde"), 5, 0, S("abcde"), 0, 2, -2);
-    test(S("abcde"), 5, 0, S("abcde"), 0, 4, -4);
-    test(S("abcde"), 5, 0, S("abcde"), 0, 5, -5);
-    test(S("abcde"), 5, 0, S("abcde"), 0, 6, -5);
-    test(S("abcde"), 5, 0, S("abcde"), 1, 0, 0);
-    test(S("abcde"), 5, 0, S("abcde"), 1, 1, -1);
-    test(S("abcde"), 5, 0, S("abcde"), 1, 2, -2);
-    test(S("abcde"), 5, 0, S("abcde"), 1, 3, -3);
-    test(S("abcde"), 5, 0, S("abcde"), 1, 4, -4);
-    test(S("abcde"), 5, 0, S("abcde"), 1, 5, -4);
-    test(S("abcde"), 5, 0, S("abcde"), 2, 0, 0);
-    test(S("abcde"), 5, 0, S("abcde"), 2, 1, -1);
-    test(S("abcde"), 5, 0, S("abcde"), 2, 2, -2);
-    test(S("abcde"), 5, 0, S("abcde"), 2, 3, -3);
-    test(S("abcde"), 5, 0, S("abcde"), 2, 4, -3);
-    test(S("abcde"), 5, 0, S("abcde"), 4, 0, 0);
-    test(S("abcde"), 5, 0, S("abcde"), 4, 1, -1);
-    test(S("abcde"), 5, 0, S("abcde"), 4, 2, -1);
-    test(S("abcde"), 5, 0, S("abcde"), 5, 0, 0);
-    test(S("abcde"), 5, 0, S("abcde"), 5, 1, 0);
-    test(S("abcde"), 5, 0, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 5, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 5, 1, S(""), 0, 0, 0);
-    test(S("abcde"), 5, 1, S(""), 0, 1, 0);
-    test(S("abcde"), 5, 1, S(""), 1, 0, 0);
-    test(S("abcde"), 5, 1, S("abcde"), 0, 0, 0);
-    test(S("abcde"), 5, 1, S("abcde"), 0, 1, -1);
-    test(S("abcde"), 5, 1, S("abcde"), 0, 2, -2);
-    test(S("abcde"), 5, 1, S("abcde"), 0, 4, -4);
-    test(S("abcde"), 5, 1, S("abcde"), 0, 5, -5);
-    test(S("abcde"), 5, 1, S("abcde"), 0, 6, -5);
-    test(S("abcde"), 5, 1, S("abcde"), 1, 0, 0);
-    test(S("abcde"), 5, 1, S("abcde"), 1, 1, -1);
-    test(S("abcde"), 5, 1, S("abcde"), 1, 2, -2);
-    test(S("abcde"), 5, 1, S("abcde"), 1, 3, -3);
-    test(S("abcde"), 5, 1, S("abcde"), 1, 4, -4);
-    test(S("abcde"), 5, 1, S("abcde"), 1, 5, -4);
-    test(S("abcde"), 5, 1, S("abcde"), 2, 0, 0);
-    test(S("abcde"), 5, 1, S("abcde"), 2, 1, -1);
-    test(S("abcde"), 5, 1, S("abcde"), 2, 2, -2);
-    test(S("abcde"), 5, 1, S("abcde"), 2, 3, -3);
-    test(S("abcde"), 5, 1, S("abcde"), 2, 4, -3);
-    test(S("abcde"), 5, 1, S("abcde"), 4, 0, 0);
-    test(S("abcde"), 5, 1, S("abcde"), 4, 1, -1);
-    test(S("abcde"), 5, 1, S("abcde"), 4, 2, -1);
-    test(S("abcde"), 5, 1, S("abcde"), 5, 0, 0);
+TEST_CONSTEXPR_CXX20 bool test17() {
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 5, 0, S(""), 0, 0, 0);
+  test(S("abcde"), 5, 0, S(""), 0, 1, 0);
+  test(S("abcde"), 5, 0, S(""), 1, 0, 0);
+  test(S("abcde"), 5, 0, S("abcde"), 0, 0, 0);
+  test(S("abcde"), 5, 0, S("abcde"), 0, 1, -1);
+  test(S("abcde"), 5, 0, S("abcde"), 0, 2, -2);
+  test(S("abcde"), 5, 0, S("abcde"), 0, 4, -4);
+  test(S("abcde"), 5, 0, S("abcde"), 0, 5, -5);
+  test(S("abcde"), 5, 0, S("abcde"), 0, 6, -5);
+  test(S("abcde"), 5, 0, S("abcde"), 1, 0, 0);
+  test(S("abcde"), 5, 0, S("abcde"), 1, 1, -1);
+  test(S("abcde"), 5, 0, S("abcde"), 1, 2, -2);
+  test(S("abcde"), 5, 0, S("abcde"), 1, 3, -3);
+  test(S("abcde"), 5, 0, S("abcde"), 1, 4, -4);
+  test(S("abcde"), 5, 0, S("abcde"), 1, 5, -4);
+  test(S("abcde"), 5, 0, S("abcde"), 2, 0, 0);
+  test(S("abcde"), 5, 0, S("abcde"), 2, 1, -1);
+  test(S("abcde"), 5, 0, S("abcde"), 2, 2, -2);
+  test(S("abcde"), 5, 0, S("abcde"), 2, 3, -3);
+  test(S("abcde"), 5, 0, S("abcde"), 2, 4, -3);
+  test(S("abcde"), 5, 0, S("abcde"), 4, 0, 0);
+  test(S("abcde"), 5, 0, S("abcde"), 4, 1, -1);
+  test(S("abcde"), 5, 0, S("abcde"), 4, 2, -1);
+  test(S("abcde"), 5, 0, S("abcde"), 5, 0, 0);
+  test(S("abcde"), 5, 0, S("abcde"), 5, 1, 0);
+  test(S("abcde"), 5, 0, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 5, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 5, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 5, 1, S(""), 0, 0, 0);
+  test(S("abcde"), 5, 1, S(""), 0, 1, 0);
+  test(S("abcde"), 5, 1, S(""), 1, 0, 0);
+  test(S("abcde"), 5, 1, S("abcde"), 0, 0, 0);
+  test(S("abcde"), 5, 1, S("abcde"), 0, 1, -1);
+  test(S("abcde"), 5, 1, S("abcde"), 0, 2, -2);
+  test(S("abcde"), 5, 1, S("abcde"), 0, 4, -4);
+  test(S("abcde"), 5, 1, S("abcde"), 0, 5, -5);
+  test(S("abcde"), 5, 1, S("abcde"), 0, 6, -5);
+  test(S("abcde"), 5, 1, S("abcde"), 1, 0, 0);
+  test(S("abcde"), 5, 1, S("abcde"), 1, 1, -1);
+  test(S("abcde"), 5, 1, S("abcde"), 1, 2, -2);
+  test(S("abcde"), 5, 1, S("abcde"), 1, 3, -3);
+  test(S("abcde"), 5, 1, S("abcde"), 1, 4, -4);
+  test(S("abcde"), 5, 1, S("abcde"), 1, 5, -4);
+  test(S("abcde"), 5, 1, S("abcde"), 2, 0, 0);
+  test(S("abcde"), 5, 1, S("abcde"), 2, 1, -1);
+  test(S("abcde"), 5, 1, S("abcde"), 2, 2, -2);
+  test(S("abcde"), 5, 1, S("abcde"), 2, 3, -3);
+  test(S("abcde"), 5, 1, S("abcde"), 2, 4, -3);
+  test(S("abcde"), 5, 1, S("abcde"), 4, 0, 0);
+  test(S("abcde"), 5, 1, S("abcde"), 4, 1, -1);
+  test(S("abcde"), 5, 1, S("abcde"), 4, 2, -1);
+  test(S("abcde"), 5, 1, S("abcde"), 5, 0, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test18()
-{
-    test(S("abcde"), 5, 1, S("abcde"), 5, 1, 0);
-    test(S("abcde"), 5, 1, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 0, 1, -1);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 0, 5, -5);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 0, 9, -9);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 0, 10, -10);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 0, 11, -10);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 1, 1, -1);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 1, 4, -4);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 1, 8, -8);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 1, 9, -9);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 1, 10, -9);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 5, 1, -1);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 5, 2, -2);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 5, 4, -4);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 5, 5, -5);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 5, 6, -5);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 9, 1, -1);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 9, 2, -1);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 5, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcde"), 6, 0, S(""), 0, 0, 0);
-    test(S("abcde"), 6, 0, S(""), 0, 1, 0);
-    test(S("abcde"), 6, 0, S(""), 1, 0, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 0, 0, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 0, 1, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 0, 2, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 0, 4, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 0, 5, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 0, 6, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 1, 0, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 1, 1, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 1, 2, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 1, 3, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 1, 4, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 1, 5, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 2, 0, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 2, 1, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 2, 2, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 2, 3, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 2, 4, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 4, 0, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 4, 1, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 4, 2, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 5, 0, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 5, 1, 0);
-    test(S("abcde"), 6, 0, S("abcde"), 6, 0, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 0, 1, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 0, 5, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 0, 9, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 0, 10, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 0, 11, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 1, 1, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 1, 4, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 1, 8, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 1, 9, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 1, 10, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 5, 1, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 5, 2, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 5, 4, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 5, 5, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 5, 6, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 9, 1, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 9, 2, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcde"), 6, 0, S("abcdefghij"), 11, 0, 0);
+TEST_CONSTEXPR_CXX20 bool test18() {
+  test(S("abcde"), 5, 1, S("abcde"), 5, 1, 0);
+  test(S("abcde"), 5, 1, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 0, 1, -1);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 0, 5, -5);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 0, 9, -9);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 0, 10, -10);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 0, 11, -10);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 1, 1, -1);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 1, 4, -4);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 1, 8, -8);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 1, 9, -9);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 1, 10, -9);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 5, 1, -1);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 5, 2, -2);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 5, 4, -4);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 5, 5, -5);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 5, 6, -5);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 9, 1, -1);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 9, 2, -1);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 5, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcde"), 6, 0, S(""), 0, 0, 0);
+  test(S("abcde"), 6, 0, S(""), 0, 1, 0);
+  test(S("abcde"), 6, 0, S(""), 1, 0, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 0, 0, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 0, 1, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 0, 2, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 0, 4, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 0, 5, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 0, 6, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 1, 0, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 1, 1, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 1, 2, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 1, 3, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 1, 4, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 1, 5, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 2, 0, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 2, 1, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 2, 2, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 2, 3, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 2, 4, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 4, 0, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 4, 1, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 4, 2, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 5, 0, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 5, 1, 0);
+  test(S("abcde"), 6, 0, S("abcde"), 6, 0, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 0, 1, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 0, 5, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 0, 9, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 0, 10, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 0, 11, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 1, 1, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 1, 4, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 1, 8, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 1, 9, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 1, 10, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 5, 1, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 5, 2, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 5, 4, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 5, 5, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 5, 6, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 9, 1, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 9, 2, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcde"), 6, 0, S("abcdefghij"), 11, 0, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test19()
-{
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 1, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 19, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 20, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 21, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 1, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 18, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 19, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 20, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 1, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 5, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 9, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 10, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 11, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 19, 1, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 19, 2, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 0, 0, S(""), 0, 0, 0);
-    test(S("abcdefghij"), 0, 0, S(""), 0, 1, 0);
-    test(S("abcdefghij"), 0, 0, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 0, 1, -1);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 0, 2, -2);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 0, 4, -4);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 0, 5, -5);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 0, 6, -5);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 1, 2, -2);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 1, 3, -3);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 1, 4, -4);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 1, 5, -4);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 2, 3, -3);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 2, 4, -3);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 4, 1, -1);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 4, 2, -1);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 0, 0, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 0, 1, S(""), 0, 0, 1);
-    test(S("abcdefghij"), 0, 1, S(""), 0, 1, 1);
+TEST_CONSTEXPR_CXX20 bool test19() {
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 1, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 19, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 20, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 21, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 1, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 18, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 19, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 1, 20, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 1, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 5, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 9, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 10, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 10, 11, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 19, 1, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 19, 2, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 0, 0, S(""), 0, 0, 0);
+  test(S("abcdefghij"), 0, 0, S(""), 0, 1, 0);
+  test(S("abcdefghij"), 0, 0, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 0, 1, -1);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 0, 2, -2);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 0, 4, -4);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 0, 5, -5);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 0, 6, -5);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 1, 2, -2);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 1, 3, -3);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 1, 4, -4);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 1, 5, -4);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 2, 3, -3);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 2, 4, -3);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 4, 1, -1);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 4, 2, -1);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 0, 0, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 0, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 0, 1, S(""), 0, 0, 1);
+  test(S("abcdefghij"), 0, 1, S(""), 0, 1, 1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test20()
-{
-    test(S("abcdefghij"), 0, 1, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 0, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 0, 1, 0);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 0, 2, -1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 0, 4, -3);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 0, 5, -4);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 0, 6, -4);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 1, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 1, 2, -1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 1, 3, -1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 1, 5, -1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 2, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 2, 1, -2);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 2, 3, -2);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 2, 4, -2);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 4, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 4, 1, -4);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 4, 2, -4);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 5, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 5, 1, 1);
-    test(S("abcdefghij"), 0, 1, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 1, 0);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 5, -4);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 9, -8);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 10, -9);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 11, -9);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 1, 0);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 10, -9);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 19, -18);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 20, -19);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 21, -19);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 0, 5, S(""), 0, 0, 5);
-    test(S("abcdefghij"), 0, 5, S(""), 0, 1, 5);
-    test(S("abcdefghij"), 0, 5, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 0, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 0, 1, 4);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 0, 2, 3);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 0, 4, 1);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 0, 5, 0);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 0, 6, 0);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 1, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 1, 2, -1);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 1, 3, -1);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 1, 5, -1);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 2, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 2, 1, -2);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 2, 3, -2);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 2, 4, -2);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 4, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 4, 1, -4);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 4, 2, -4);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 5, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 5, 1, 5);
-    test(S("abcdefghij"), 0, 5, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 1, 4);
+TEST_CONSTEXPR_CXX20 bool test20() {
+  test(S("abcdefghij"), 0, 1, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 0, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 0, 1, 0);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 0, 2, -1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 0, 4, -3);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 0, 5, -4);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 0, 6, -4);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 1, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 1, 2, -1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 1, 3, -1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 1, 5, -1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 2, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 2, 1, -2);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 2, 3, -2);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 2, 4, -2);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 4, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 4, 1, -4);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 4, 2, -4);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 5, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 5, 1, 1);
+  test(S("abcdefghij"), 0, 1, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 1, 0);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 5, -4);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 9, -8);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 10, -9);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 0, 11, -9);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 1, 0);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 10, -9);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 19, -18);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 20, -19);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 0, 21, -19);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghij"), 0, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 0, 5, S(""), 0, 0, 5);
+  test(S("abcdefghij"), 0, 5, S(""), 0, 1, 5);
+  test(S("abcdefghij"), 0, 5, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 0, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 0, 1, 4);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 0, 2, 3);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 0, 4, 1);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 0, 5, 0);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 0, 6, 0);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 1, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 1, 2, -1);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 1, 3, -1);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 1, 5, -1);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 2, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 2, 1, -2);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 2, 3, -2);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 2, 4, -2);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 4, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 4, 1, -4);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 4, 2, -4);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 5, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 5, 1, 5);
+  test(S("abcdefghij"), 0, 5, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 1, 4);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test21()
-{
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 5, 0);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 9, -4);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 10, -5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 11, -5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 9, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 10, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 10, 1, 5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 1, 4);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 10, -5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 19, -14);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 20, -15);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 21, -15);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 19, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 20, 0, 5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 20, 1, 5);
-    test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 0, 9, S(""), 0, 0, 9);
-    test(S("abcdefghij"), 0, 9, S(""), 0, 1, 9);
-    test(S("abcdefghij"), 0, 9, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 0, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 0, 1, 8);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 0, 2, 7);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 0, 4, 5);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 0, 5, 4);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 0, 6, 4);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 1, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 1, 2, -1);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 1, 3, -1);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 1, 5, -1);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 2, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 2, 1, -2);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 2, 3, -2);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 2, 4, -2);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 4, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 4, 1, -4);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 4, 2, -4);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 5, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 5, 1, 9);
-    test(S("abcdefghij"), 0, 9, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 1, 8);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 5, 4);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 9, 0);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 10, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 11, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 9, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 10, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 10, 1, 9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 1, 8);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 10, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 19, -10);
+TEST_CONSTEXPR_CXX20 bool test21() {
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 5, 0);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 9, -4);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 10, -5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 11, -5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 9, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 10, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 10, 1, 5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 1, 4);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 10, -5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 19, -14);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 20, -15);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 0, 21, -15);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 19, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 20, 0, 5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 20, 1, 5);
+  test(S("abcdefghij"), 0, 5, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 0, 9, S(""), 0, 0, 9);
+  test(S("abcdefghij"), 0, 9, S(""), 0, 1, 9);
+  test(S("abcdefghij"), 0, 9, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 0, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 0, 1, 8);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 0, 2, 7);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 0, 4, 5);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 0, 5, 4);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 0, 6, 4);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 1, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 1, 2, -1);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 1, 3, -1);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 1, 5, -1);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 2, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 2, 1, -2);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 2, 3, -2);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 2, 4, -2);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 4, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 4, 1, -4);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 4, 2, -4);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 5, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 5, 1, 9);
+  test(S("abcdefghij"), 0, 9, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 1, 8);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 5, 4);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 9, 0);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 10, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 0, 11, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 9, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 10, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 10, 1, 9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 1, 8);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 10, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 19, -10);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test22()
-{
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 20, -11);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 21, -11);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 19, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 20, 0, 9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 20, 1, 9);
-    test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 0, 10, S(""), 0, 0, 10);
-    test(S("abcdefghij"), 0, 10, S(""), 0, 1, 10);
-    test(S("abcdefghij"), 0, 10, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 0, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 0, 1, 9);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 0, 2, 8);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 0, 4, 6);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 1, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 1, 2, -1);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 1, 3, -1);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 1, 5, -1);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 2, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 2, 1, -2);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 2, 3, -2);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 2, 4, -2);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 4, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 4, 1, -4);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 4, 2, -4);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 5, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 5, 1, 10);
-    test(S("abcdefghij"), 0, 10, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 1, 9);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 10, 0);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 11, 0);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 9, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 10, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 10, 1, 10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 1, 9);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 19, -9);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 20, -10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 21, -10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 19, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 20, 0, 10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 20, 1, 10);
-    test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 0, 11, S(""), 0, 0, 10);
-    test(S("abcdefghij"), 0, 11, S(""), 0, 1, 10);
-    test(S("abcdefghij"), 0, 11, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 0, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 0, 1, 9);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 0, 2, 8);
+TEST_CONSTEXPR_CXX20 bool test22() {
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 20, -11);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 21, -11);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 19, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 20, 0, 9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 20, 1, 9);
+  test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 0, 10, S(""), 0, 0, 10);
+  test(S("abcdefghij"), 0, 10, S(""), 0, 1, 10);
+  test(S("abcdefghij"), 0, 10, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 0, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 0, 1, 9);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 0, 2, 8);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 0, 4, 6);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 1, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 1, 2, -1);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 1, 3, -1);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 1, 5, -1);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 2, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 2, 1, -2);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 2, 3, -2);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 2, 4, -2);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 4, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 4, 1, -4);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 4, 2, -4);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 5, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 5, 1, 10);
+  test(S("abcdefghij"), 0, 10, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 1, 9);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 10, 0);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 0, 11, 0);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 9, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 10, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 10, 1, 10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 1, 9);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 19, -9);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 20, -10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 0, 21, -10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 19, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 20, 0, 10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 20, 1, 10);
+  test(S("abcdefghij"), 0, 10, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 0, 11, S(""), 0, 0, 10);
+  test(S("abcdefghij"), 0, 11, S(""), 0, 1, 10);
+  test(S("abcdefghij"), 0, 11, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 0, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 0, 1, 9);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 0, 2, 8);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test23()
-{
-    test(S("abcdefghij"), 0, 11, S("abcde"), 0, 4, 6);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 1, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 1, 2, -1);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 1, 3, -1);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 1, 5, -1);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 2, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 2, 1, -2);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 2, 3, -2);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 2, 4, -2);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 4, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 4, 1, -4);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 4, 2, -4);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 5, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 5, 1, 10);
-    test(S("abcdefghij"), 0, 11, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 1, 9);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 10, 0);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 11, 0);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 9, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 10, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 10, 1, 10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 1, 9);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 19, -9);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 20, -10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 21, -10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 19, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 20, 0, 10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 20, 1, 10);
-    test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 1, 0, S(""), 0, 0, 0);
-    test(S("abcdefghij"), 1, 0, S(""), 0, 1, 0);
-    test(S("abcdefghij"), 1, 0, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 0, 1, -1);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 0, 2, -2);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 0, 4, -4);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 0, 5, -5);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 0, 6, -5);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 1, 2, -2);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 1, 3, -3);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 1, 4, -4);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 1, 5, -4);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 2, 3, -3);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 2, 4, -3);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 4, 1, -1);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 4, 2, -1);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 1, 0, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 11, -10);
+TEST_CONSTEXPR_CXX20 bool test23() {
+  test(S("abcdefghij"), 0, 11, S("abcde"), 0, 4, 6);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 1, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 1, 2, -1);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 1, 3, -1);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 1, 5, -1);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 2, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 2, 1, -2);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 2, 3, -2);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 2, 4, -2);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 4, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 4, 1, -4);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 4, 2, -4);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 5, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 5, 1, 10);
+  test(S("abcdefghij"), 0, 11, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 1, 9);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 10, 0);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 0, 11, 0);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 9, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 10, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 10, 1, 10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 1, 9);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 19, -9);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 20, -10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 0, 21, -10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 19, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 20, 0, 10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 20, 1, 10);
+  test(S("abcdefghij"), 0, 11, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 1, 0, S(""), 0, 0, 0);
+  test(S("abcdefghij"), 1, 0, S(""), 0, 1, 0);
+  test(S("abcdefghij"), 1, 0, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 0, 1, -1);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 0, 2, -2);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 0, 4, -4);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 0, 5, -5);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 0, 6, -5);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 1, 2, -2);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 1, 3, -3);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 1, 4, -4);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 1, 5, -4);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 2, 3, -3);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 2, 4, -3);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 4, 1, -1);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 4, 2, -1);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 1, 0, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 11, -10);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test24()
-{
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 1, 1, S(""), 0, 0, 1);
-    test(S("abcdefghij"), 1, 1, S(""), 0, 1, 1);
-    test(S("abcdefghij"), 1, 1, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 0, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 0, 2, 1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 0, 4, 1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 0, 6, 1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 1, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 1, 1, 0);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 1, 2, -1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 1, 3, -2);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 1, 4, -3);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 1, 5, -3);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 2, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 2, 2, -1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 2, 3, -1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 2, 4, -1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 4, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 4, 1, -3);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 4, 2, -3);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 5, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 5, 1, 1);
-    test(S("abcdefghij"), 1, 1, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 1, 0);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 4, -3);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 8, -7);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 9, -8);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 10, -8);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 1, 0);
+TEST_CONSTEXPR_CXX20 bool test24() {
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 1, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 1, 1, S(""), 0, 0, 1);
+  test(S("abcdefghij"), 1, 1, S(""), 0, 1, 1);
+  test(S("abcdefghij"), 1, 1, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 0, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 0, 2, 1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 0, 4, 1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 0, 6, 1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 1, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 1, 1, 0);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 1, 2, -1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 1, 3, -2);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 1, 4, -3);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 1, 5, -3);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 2, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 2, 2, -1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 2, 3, -1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 2, 4, -1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 4, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 4, 1, -3);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 4, 2, -3);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 5, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 5, 1, 1);
+  test(S("abcdefghij"), 1, 1, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 1, 0);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 4, -3);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 8, -7);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 9, -8);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 1, 10, -8);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 1, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test25()
-{
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 9, -8);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 18, -17);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 19, -18);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 20, -18);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 1, 4, S(""), 0, 0, 4);
-    test(S("abcdefghij"), 1, 4, S(""), 0, 1, 4);
-    test(S("abcdefghij"), 1, 4, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 0, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 0, 2, 1);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 0, 4, 1);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 0, 6, 1);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 1, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 1, 1, 3);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 1, 2, 2);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 1, 3, 1);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 1, 4, 0);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 1, 5, 0);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 2, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 2, 2, -1);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 2, 3, -1);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 2, 4, -1);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 4, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 4, 1, -3);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 4, 2, -3);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 5, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 5, 1, 4);
-    test(S("abcdefghij"), 1, 4, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 1, 3);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 4, 0);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 8, -4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 9, -5);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 10, -5);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 9, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 10, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 10, 1, 4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 1, 3);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 9, -5);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 18, -14);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 19, -15);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 20, -15);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 19, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 20, 0, 4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 20, 1, 4);
-    test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 1, 8, S(""), 0, 0, 8);
-    test(S("abcdefghij"), 1, 8, S(""), 0, 1, 8);
-    test(S("abcdefghij"), 1, 8, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 0, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 0, 2, 1);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 0, 4, 1);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 0, 6, 1);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 1, 0, 8);
+TEST_CONSTEXPR_CXX20 bool test25() {
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 9, -8);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 18, -17);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 19, -18);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 20, -18);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 1, 4, S(""), 0, 0, 4);
+  test(S("abcdefghij"), 1, 4, S(""), 0, 1, 4);
+  test(S("abcdefghij"), 1, 4, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 0, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 0, 2, 1);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 0, 4, 1);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 0, 6, 1);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 1, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 1, 1, 3);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 1, 2, 2);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 1, 3, 1);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 1, 4, 0);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 1, 5, 0);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 2, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 2, 2, -1);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 2, 3, -1);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 2, 4, -1);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 4, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 4, 1, -3);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 4, 2, -3);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 5, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 5, 1, 4);
+  test(S("abcdefghij"), 1, 4, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 1, 3);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 4, 0);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 8, -4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 9, -5);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 1, 10, -5);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 9, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 10, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 10, 1, 4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 1, 3);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 9, -5);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 18, -14);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 19, -15);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 1, 20, -15);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 19, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 20, 0, 4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 20, 1, 4);
+  test(S("abcdefghij"), 1, 4, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 1, 8, S(""), 0, 0, 8);
+  test(S("abcdefghij"), 1, 8, S(""), 0, 1, 8);
+  test(S("abcdefghij"), 1, 8, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 0, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 0, 2, 1);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 0, 4, 1);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 0, 6, 1);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 1, 0, 8);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test26()
-{
-    test(S("abcdefghij"), 1, 8, S("abcde"), 1, 1, 7);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 1, 2, 6);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 1, 3, 5);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 1, 4, 4);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 1, 5, 4);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 2, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 2, 2, -1);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 2, 3, -1);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 2, 4, -1);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 4, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 4, 1, -3);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 4, 2, -3);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 5, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 5, 1, 8);
-    test(S("abcdefghij"), 1, 8, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 1, 7);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 4, 4);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 8, 0);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 9, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 10, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 10, 1, 8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 1, 7);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 18, -10);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 19, -11);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 20, -11);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 19, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 20, 0, 8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 20, 1, 8);
-    test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 1, 9, S(""), 0, 0, 9);
-    test(S("abcdefghij"), 1, 9, S(""), 0, 1, 9);
-    test(S("abcdefghij"), 1, 9, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 0, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 0, 2, 1);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 0, 4, 1);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 0, 6, 1);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 1, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 1, 1, 8);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 1, 2, 7);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 1, 3, 6);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 1, 4, 5);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 1, 5, 5);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 2, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 2, 2, -1);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 2, 3, -1);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 2, 4, -1);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 4, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 4, 1, -3);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 4, 2, -3);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 5, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 5, 1, 9);
-    test(S("abcdefghij"), 1, 9, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 1, 8);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 4, 5);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 8, 1);
+TEST_CONSTEXPR_CXX20 bool test26() {
+  test(S("abcdefghij"), 1, 8, S("abcde"), 1, 1, 7);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 1, 2, 6);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 1, 3, 5);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 1, 4, 4);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 1, 5, 4);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 2, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 2, 2, -1);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 2, 3, -1);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 2, 4, -1);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 4, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 4, 1, -3);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 4, 2, -3);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 5, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 5, 1, 8);
+  test(S("abcdefghij"), 1, 8, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 1, 7);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 4, 4);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 8, 0);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 9, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 10, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 10, 1, 8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 1, 7);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 18, -10);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 19, -11);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 1, 20, -11);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 19, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 20, 0, 8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 20, 1, 8);
+  test(S("abcdefghij"), 1, 8, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 1, 9, S(""), 0, 0, 9);
+  test(S("abcdefghij"), 1, 9, S(""), 0, 1, 9);
+  test(S("abcdefghij"), 1, 9, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 0, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 0, 2, 1);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 0, 4, 1);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 0, 6, 1);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 1, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 1, 1, 8);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 1, 2, 7);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 1, 3, 6);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 1, 4, 5);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 1, 5, 5);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 2, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 2, 2, -1);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 2, 3, -1);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 2, 4, -1);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 4, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 4, 1, -3);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 4, 2, -3);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 5, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 5, 1, 9);
+  test(S("abcdefghij"), 1, 9, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 1, 8);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 4, 5);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 8, 1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test27()
-{
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 9, 0);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 10, 0);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 9, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 10, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 10, 1, 9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 1, 8);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 18, -9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 19, -10);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 20, -10);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 19, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 20, 0, 9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 20, 1, 9);
-    test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 1, 10, S(""), 0, 0, 9);
-    test(S("abcdefghij"), 1, 10, S(""), 0, 1, 9);
-    test(S("abcdefghij"), 1, 10, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 0, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 0, 2, 1);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 0, 4, 1);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 0, 6, 1);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 1, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 1, 1, 8);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 1, 2, 7);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 1, 3, 6);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 1, 4, 5);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 1, 5, 5);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 2, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 2, 2, -1);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 2, 3, -1);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 2, 4, -1);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 4, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 4, 1, -3);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 4, 2, -3);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 5, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 5, 1, 9);
-    test(S("abcdefghij"), 1, 10, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 1, 8);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 4, 5);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 8, 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 9, 0);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 10, 0);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 9, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 10, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 10, 1, 9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 1, 8);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 18, -9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 19, -10);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 20, -10);
+TEST_CONSTEXPR_CXX20 bool test27() {
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 9, 0);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 10, 0);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 9, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 10, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 10, 1, 9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 1, 8);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 18, -9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 19, -10);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 1, 20, -10);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 19, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 20, 0, 9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 20, 1, 9);
+  test(S("abcdefghij"), 1, 9, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 1, 10, S(""), 0, 0, 9);
+  test(S("abcdefghij"), 1, 10, S(""), 0, 1, 9);
+  test(S("abcdefghij"), 1, 10, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 0, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 0, 2, 1);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 0, 4, 1);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 0, 6, 1);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 1, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 1, 1, 8);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 1, 2, 7);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 1, 3, 6);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 1, 4, 5);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 1, 5, 5);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 2, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 2, 2, -1);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 2, 3, -1);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 2, 4, -1);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 4, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 4, 1, -3);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 4, 2, -3);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 5, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 5, 1, 9);
+  test(S("abcdefghij"), 1, 10, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 1, 8);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 4, 5);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 8, 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 9, 0);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 1, 10, 0);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 9, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 10, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 10, 1, 9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 1, 8);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 18, -9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 19, -10);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 20, -10);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test28()
-{
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 19, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 20, 0, 9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 20, 1, 9);
-    test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 5, 0, S(""), 0, 0, 0);
-    test(S("abcdefghij"), 5, 0, S(""), 0, 1, 0);
-    test(S("abcdefghij"), 5, 0, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 0, 1, -1);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 0, 2, -2);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 0, 4, -4);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 0, 5, -5);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 0, 6, -5);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 1, 2, -2);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 1, 3, -3);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 1, 4, -4);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 1, 5, -4);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 2, 3, -3);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 2, 4, -3);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 4, 1, -1);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 4, 2, -1);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 5, 0, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 5, 1, S(""), 0, 0, 1);
-    test(S("abcdefghij"), 5, 1, S(""), 0, 1, 1);
-    test(S("abcdefghij"), 5, 1, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 0, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 0, 2, 5);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 0, 4, 5);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 1, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 1, 2, 4);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 1, 3, 4);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 1, 4, 4);
+TEST_CONSTEXPR_CXX20 bool test28() {
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 19, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 20, 0, 9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 20, 1, 9);
+  test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 5, 0, S(""), 0, 0, 0);
+  test(S("abcdefghij"), 5, 0, S(""), 0, 1, 0);
+  test(S("abcdefghij"), 5, 0, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 0, 1, -1);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 0, 2, -2);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 0, 4, -4);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 0, 5, -5);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 0, 6, -5);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 1, 2, -2);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 1, 3, -3);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 1, 4, -4);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 1, 5, -4);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 2, 3, -3);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 2, 4, -3);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 4, 1, -1);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 4, 2, -1);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 5, 0, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 5, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 5, 1, S(""), 0, 0, 1);
+  test(S("abcdefghij"), 5, 1, S(""), 0, 1, 1);
+  test(S("abcdefghij"), 5, 1, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 0, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 0, 2, 5);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 0, 4, 5);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 1, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 1, 2, 4);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 1, 3, 4);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 1, 4, 4);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test29()
-{
-    test(S("abcdefghij"), 5, 1, S("abcde"), 1, 5, 4);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 2, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 2, 1, 3);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 2, 2, 3);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 2, 3, 3);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 2, 4, 3);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 4, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 4, 1, 1);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 4, 2, 1);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 5, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 5, 1, 1);
-    test(S("abcdefghij"), 5, 1, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 9, 5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 11, 5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 8, 4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 10, 4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 1, 0);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 2, -1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 4, -3);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 9, 1, -4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 9, 2, -4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 19, 5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 20, 5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 21, 5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 18, 4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 19, 4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 20, 4);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 1, -5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 9, -5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 10, -5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 11, -5);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 19, 1, -14);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 19, 2, -14);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 5, 2, S(""), 0, 0, 2);
-    test(S("abcdefghij"), 5, 2, S(""), 0, 1, 2);
-    test(S("abcdefghij"), 5, 2, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 0, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 0, 2, 5);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 0, 4, 5);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 1, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 1, 2, 4);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 1, 3, 4);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 1, 5, 4);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 2, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 2, 1, 3);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 2, 2, 3);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 2, 3, 3);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 2, 4, 3);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 4, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 4, 1, 1);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 4, 2, 1);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 5, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 5, 1, 2);
-    test(S("abcdefghij"), 5, 2, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 9, 5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 11, 5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 8, 4);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 10, 4);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 1, 1);
+TEST_CONSTEXPR_CXX20 bool test29() {
+  test(S("abcdefghij"), 5, 1, S("abcde"), 1, 5, 4);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 2, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 2, 1, 3);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 2, 2, 3);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 2, 3, 3);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 2, 4, 3);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 4, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 4, 1, 1);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 4, 2, 1);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 5, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 5, 1, 1);
+  test(S("abcdefghij"), 5, 1, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 9, 5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 0, 11, 5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 8, 4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 1, 10, 4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 1, 0);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 2, -1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 4, -3);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 9, 1, -4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 9, 2, -4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 19, 5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 20, 5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 0, 21, 5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 18, 4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 19, 4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 1, 20, 4);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 1, -5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 9, -5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 10, -5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 10, 11, -5);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 19, 1, -14);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 19, 2, -14);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghij"), 5, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 5, 2, S(""), 0, 0, 2);
+  test(S("abcdefghij"), 5, 2, S(""), 0, 1, 2);
+  test(S("abcdefghij"), 5, 2, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 0, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 0, 2, 5);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 0, 4, 5);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 1, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 1, 2, 4);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 1, 3, 4);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 1, 5, 4);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 2, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 2, 1, 3);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 2, 2, 3);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 2, 3, 3);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 2, 4, 3);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 4, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 4, 1, 1);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 4, 2, 1);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 5, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 5, 1, 2);
+  test(S("abcdefghij"), 5, 2, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 9, 5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 0, 11, 5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 8, 4);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 1, 10, 4);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 1, 1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test30()
-{
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 2, 0);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 4, -2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 5, -3);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 6, -3);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 9, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 9, 1, -4);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 9, 2, -4);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 10, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 10, 1, 2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 19, 5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 20, 5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 21, 5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 18, 4);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 19, 4);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 20, 4);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 1, -5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 9, -5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 10, -5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 11, -5);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 19, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 19, 1, -14);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 19, 2, -14);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 20, 0, 2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 20, 1, 2);
-    test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 5, 4, S(""), 0, 0, 4);
-    test(S("abcdefghij"), 5, 4, S(""), 0, 1, 4);
-    test(S("abcdefghij"), 5, 4, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 0, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 0, 2, 5);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 0, 4, 5);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 1, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 1, 2, 4);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 1, 3, 4);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 1, 5, 4);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 2, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 2, 1, 3);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 2, 2, 3);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 2, 3, 3);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 2, 4, 3);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 4, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 4, 1, 1);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 4, 2, 1);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 5, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 5, 1, 4);
-    test(S("abcdefghij"), 5, 4, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 9, 5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 11, 5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 8, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 10, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 1, 3);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 2, 2);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 4, 0);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 5, -1);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 6, -1);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 9, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 9, 1, -4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 9, 2, -4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 10, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 10, 1, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 19, 5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 20, 5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 21, 5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 18, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 19, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 20, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 1, -5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 9, -5);
+TEST_CONSTEXPR_CXX20 bool test30() {
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 2, 0);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 4, -2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 5, -3);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 6, -3);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 9, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 9, 1, -4);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 9, 2, -4);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 10, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 10, 1, 2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 19, 5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 20, 5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 0, 21, 5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 18, 4);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 19, 4);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 1, 20, 4);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 1, -5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 9, -5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 10, -5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 10, 11, -5);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 19, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 19, 1, -14);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 19, 2, -14);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 20, 0, 2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 20, 1, 2);
+  test(S("abcdefghij"), 5, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 5, 4, S(""), 0, 0, 4);
+  test(S("abcdefghij"), 5, 4, S(""), 0, 1, 4);
+  test(S("abcdefghij"), 5, 4, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 0, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 0, 2, 5);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 0, 4, 5);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 1, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 1, 2, 4);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 1, 3, 4);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 1, 5, 4);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 2, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 2, 1, 3);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 2, 2, 3);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 2, 3, 3);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 2, 4, 3);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 4, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 4, 1, 1);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 4, 2, 1);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 5, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 5, 1, 4);
+  test(S("abcdefghij"), 5, 4, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 9, 5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 0, 11, 5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 8, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 1, 10, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 1, 3);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 2, 2);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 4, 0);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 5, -1);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 5, 6, -1);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 9, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 9, 1, -4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 9, 2, -4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 10, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 10, 1, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 19, 5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 20, 5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 0, 21, 5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 18, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 19, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 1, 20, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 1, -5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 9, -5);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test31()
-{
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 10, -5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 11, -5);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 19, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 19, 1, -14);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 19, 2, -14);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 20, 0, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 20, 1, 4);
-    test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 5, 5, S(""), 0, 0, 5);
-    test(S("abcdefghij"), 5, 5, S(""), 0, 1, 5);
-    test(S("abcdefghij"), 5, 5, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 0, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 0, 2, 5);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 0, 4, 5);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 1, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 1, 2, 4);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 1, 3, 4);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 1, 5, 4);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 2, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 2, 1, 3);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 2, 2, 3);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 2, 3, 3);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 2, 4, 3);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 4, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 4, 1, 1);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 4, 2, 1);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 5, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 5, 1, 5);
-    test(S("abcdefghij"), 5, 5, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 9, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 11, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 8, 4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 10, 4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 1, 4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 2, 3);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 4, 1);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 5, 0);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 6, 0);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 9, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 9, 1, -4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 9, 2, -4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 10, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 10, 1, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 19, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 20, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 21, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 18, 4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 19, 4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 20, 4);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 1, -5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 9, -5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 10, -5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 11, -5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 19, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 19, 1, -14);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 19, 2, -14);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 20, 0, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 20, 1, 5);
-    test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 5, 6, S(""), 0, 0, 5);
-    test(S("abcdefghij"), 5, 6, S(""), 0, 1, 5);
-    test(S("abcdefghij"), 5, 6, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 0, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 0, 2, 5);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 0, 4, 5);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 0, 6, 5);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 1, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 1, 2, 4);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 1, 3, 4);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 1, 5, 4);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 2, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 2, 1, 3);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 2, 2, 3);
+TEST_CONSTEXPR_CXX20 bool test31() {
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 10, -5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 11, -5);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 19, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 19, 1, -14);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 19, 2, -14);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 20, 0, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 20, 1, 4);
+  test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 5, 5, S(""), 0, 0, 5);
+  test(S("abcdefghij"), 5, 5, S(""), 0, 1, 5);
+  test(S("abcdefghij"), 5, 5, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 0, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 0, 2, 5);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 0, 4, 5);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 1, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 1, 2, 4);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 1, 3, 4);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 1, 5, 4);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 2, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 2, 1, 3);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 2, 2, 3);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 2, 3, 3);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 2, 4, 3);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 4, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 4, 1, 1);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 4, 2, 1);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 5, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 5, 1, 5);
+  test(S("abcdefghij"), 5, 5, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 9, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 0, 11, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 8, 4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 1, 10, 4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 1, 4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 2, 3);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 4, 1);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 5, 0);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 5, 6, 0);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 9, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 9, 1, -4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 9, 2, -4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 10, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 10, 1, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 19, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 20, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 0, 21, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 18, 4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 19, 4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 1, 20, 4);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 1, -5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 9, -5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 10, -5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 10, 11, -5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 19, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 19, 1, -14);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 19, 2, -14);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 20, 0, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 20, 1, 5);
+  test(S("abcdefghij"), 5, 5, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 5, 6, S(""), 0, 0, 5);
+  test(S("abcdefghij"), 5, 6, S(""), 0, 1, 5);
+  test(S("abcdefghij"), 5, 6, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 0, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 0, 2, 5);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 0, 4, 5);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 0, 6, 5);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 1, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 1, 2, 4);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 1, 3, 4);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 1, 5, 4);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 2, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 2, 1, 3);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 2, 2, 3);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test32()
-{
-    test(S("abcdefghij"), 5, 6, S("abcde"), 2, 3, 3);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 2, 4, 3);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 4, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 4, 1, 1);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 4, 2, 1);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 5, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 5, 1, 5);
-    test(S("abcdefghij"), 5, 6, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 9, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 11, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 4, 4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 8, 4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 10, 4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 1, 4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 2, 3);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 4, 1);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 5, 0);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 6, 0);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 9, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 9, 1, -4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 9, 2, -4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 10, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 10, 1, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 1, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 10, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 19, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 20, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 21, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 1, 4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 9, 4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 18, 4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 19, 4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 20, 4);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 1, -5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 9, -5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 10, -5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 11, -5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 19, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 19, 1, -14);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 19, 2, -14);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 20, 0, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 20, 1, 5);
-    test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 9, 0, S(""), 0, 0, 0);
-    test(S("abcdefghij"), 9, 0, S(""), 0, 1, 0);
-    test(S("abcdefghij"), 9, 0, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 0, 1, -1);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 0, 2, -2);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 0, 4, -4);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 0, 5, -5);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 0, 6, -5);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 1, 2, -2);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 1, 3, -3);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 1, 4, -4);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 1, 5, -4);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 2, 3, -3);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 2, 4, -3);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 4, 1, -1);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 4, 2, -1);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 9, 0, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 6, -5);
+TEST_CONSTEXPR_CXX20 bool test32() {
+  test(S("abcdefghij"), 5, 6, S("abcde"), 2, 3, 3);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 2, 4, 3);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 4, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 4, 1, 1);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 4, 2, 1);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 5, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 5, 1, 5);
+  test(S("abcdefghij"), 5, 6, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 9, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 0, 11, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 4, 4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 8, 4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 1, 10, 4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 1, 4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 2, 3);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 4, 1);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 5, 0);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 5, 6, 0);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 9, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 9, 1, -4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 9, 2, -4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 10, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 10, 1, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 1, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 10, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 19, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 20, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 0, 21, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 1, 4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 9, 4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 18, 4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 19, 4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 1, 20, 4);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 1, -5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 9, -5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 10, -5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 10, 11, -5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 19, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 19, 1, -14);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 19, 2, -14);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 20, 0, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 20, 1, 5);
+  test(S("abcdefghij"), 5, 6, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 9, 0, S(""), 0, 0, 0);
+  test(S("abcdefghij"), 9, 0, S(""), 0, 1, 0);
+  test(S("abcdefghij"), 9, 0, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 0, 1, -1);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 0, 2, -2);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 0, 4, -4);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 0, 5, -5);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 0, 6, -5);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 1, 2, -2);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 1, 3, -3);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 1, 4, -4);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 1, 5, -4);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 2, 3, -3);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 2, 4, -3);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 4, 1, -1);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 4, 2, -1);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 9, 0, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 6, -5);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test33()
-{
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 9, 1, S(""), 0, 0, 1);
-    test(S("abcdefghij"), 9, 1, S(""), 0, 1, 1);
-    test(S("abcdefghij"), 9, 1, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 0, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 0, 1, 9);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 0, 2, 9);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 0, 4, 9);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 0, 5, 9);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 0, 6, 9);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 1, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 1, 1, 8);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 1, 2, 8);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 1, 3, 8);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 1, 4, 8);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 1, 5, 8);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 2, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 2, 1, 7);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 2, 2, 7);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 2, 3, 7);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 2, 4, 7);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 4, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 4, 1, 5);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 4, 2, 5);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 5, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 5, 1, 1);
-    test(S("abcdefghij"), 9, 1, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 1, 9);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 5, 9);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 9, 9);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 10, 9);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 11, 9);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 1, 8);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 4, 8);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 8, 8);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 9, 8);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 10, 8);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 1, 4);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 2, 4);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 4, 4);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 5, 4);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 6, 4);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 9, 1, 0);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 9, 2, 0);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 1, 9);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 10, 9);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 19, 9);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 20, 9);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 21, 9);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 1, 8);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 9, 8);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 18, 8);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 19, 8);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 20, 8);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 5, -1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 9, -1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 10, -1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 11, -1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 19, 1, -10);
+TEST_CONSTEXPR_CXX20 bool test33() {
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 9, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 9, 1, S(""), 0, 0, 1);
+  test(S("abcdefghij"), 9, 1, S(""), 0, 1, 1);
+  test(S("abcdefghij"), 9, 1, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 0, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 0, 1, 9);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 0, 2, 9);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 0, 4, 9);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 0, 5, 9);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 0, 6, 9);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 1, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 1, 1, 8);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 1, 2, 8);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 1, 3, 8);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 1, 4, 8);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 1, 5, 8);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 2, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 2, 1, 7);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 2, 2, 7);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 2, 3, 7);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 2, 4, 7);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 4, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 4, 1, 5);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 4, 2, 5);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 5, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 5, 1, 1);
+  test(S("abcdefghij"), 9, 1, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 1, 9);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 5, 9);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 9, 9);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 10, 9);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 0, 11, 9);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 1, 8);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 4, 8);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 8, 8);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 9, 8);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 1, 10, 8);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 1, 4);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 2, 4);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 4, 4);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 5, 4);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 5, 6, 4);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 9, 1, 0);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 9, 2, 0);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 1, 9);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 10, 9);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 19, 9);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 20, 9);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 0, 21, 9);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 1, 8);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 9, 8);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 18, 8);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 19, 8);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 1, 20, 8);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 5, -1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 9, -1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 10, -1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 10, 11, -1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 19, 1, -10);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test34()
-{
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 19, 2, -10);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 9, 2, S(""), 0, 0, 1);
-    test(S("abcdefghij"), 9, 2, S(""), 0, 1, 1);
-    test(S("abcdefghij"), 9, 2, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 0, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 0, 1, 9);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 0, 2, 9);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 0, 4, 9);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 0, 5, 9);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 0, 6, 9);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 1, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 1, 1, 8);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 1, 2, 8);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 1, 3, 8);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 1, 4, 8);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 1, 5, 8);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 2, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 2, 1, 7);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 2, 2, 7);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 2, 3, 7);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 2, 4, 7);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 4, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 4, 1, 5);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 4, 2, 5);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 5, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 5, 1, 1);
-    test(S("abcdefghij"), 9, 2, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 1, 9);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 5, 9);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 9, 9);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 10, 9);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 11, 9);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 1, 8);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 4, 8);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 8, 8);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 9, 8);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 10, 8);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 1, 4);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 2, 4);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 4, 4);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 5, 4);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 6, 4);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 9, 1, 0);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 9, 2, 0);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 1, 9);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 10, 9);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 19, 9);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 20, 9);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 21, 9);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 1, 8);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 9, 8);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 18, 8);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 19, 8);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 20, 8);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 5, -1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 9, -1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 10, -1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 11, -1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 19, 1, -10);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 19, 2, -10);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 10, 0, S(""), 0, 0, 0);
-    test(S("abcdefghij"), 10, 0, S(""), 0, 1, 0);
-    test(S("abcdefghij"), 10, 0, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 0, 1, -1);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 0, 2, -2);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 0, 4, -4);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 0, 5, -5);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 0, 6, -5);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 1, 2, -2);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 1, 3, -3);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 1, 4, -4);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 1, 5, -4);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 2, 3, -3);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 2, 4, -3);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 4, 1, -1);
+TEST_CONSTEXPR_CXX20 bool test34() {
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 19, 2, -10);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 9, 2, S(""), 0, 0, 1);
+  test(S("abcdefghij"), 9, 2, S(""), 0, 1, 1);
+  test(S("abcdefghij"), 9, 2, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 0, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 0, 1, 9);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 0, 2, 9);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 0, 4, 9);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 0, 5, 9);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 0, 6, 9);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 1, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 1, 1, 8);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 1, 2, 8);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 1, 3, 8);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 1, 4, 8);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 1, 5, 8);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 2, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 2, 1, 7);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 2, 2, 7);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 2, 3, 7);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 2, 4, 7);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 4, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 4, 1, 5);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 4, 2, 5);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 5, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 5, 1, 1);
+  test(S("abcdefghij"), 9, 2, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 1, 9);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 5, 9);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 9, 9);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 10, 9);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 0, 11, 9);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 1, 8);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 4, 8);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 8, 8);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 9, 8);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 1, 10, 8);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 1, 4);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 2, 4);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 4, 4);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 5, 4);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 5, 6, 4);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 9, 1, 0);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 9, 2, 0);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 1, 9);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 10, 9);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 19, 9);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 20, 9);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 0, 21, 9);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 1, 8);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 9, 8);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 18, 8);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 19, 8);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 1, 20, 8);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 5, -1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 9, -1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 10, -1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 10, 11, -1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 19, 1, -10);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 19, 2, -10);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghij"), 9, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 10, 0, S(""), 0, 0, 0);
+  test(S("abcdefghij"), 10, 0, S(""), 0, 1, 0);
+  test(S("abcdefghij"), 10, 0, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 0, 1, -1);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 0, 2, -2);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 0, 4, -4);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 0, 5, -5);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 0, 6, -5);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 1, 2, -2);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 1, 3, -3);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 1, 4, -4);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 1, 5, -4);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 2, 3, -3);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 2, 4, -3);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 4, 1, -1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test35()
-{
-    test(S("abcdefghij"), 10, 0, S("abcde"), 4, 2, -1);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 10, 0, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 10, 1, S(""), 0, 0, 0);
-    test(S("abcdefghij"), 10, 1, S(""), 0, 1, 0);
-    test(S("abcdefghij"), 10, 1, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 0, 1, -1);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 0, 2, -2);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 0, 4, -4);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 0, 5, -5);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 0, 6, -5);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 1, 1, -1);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 1, 2, -2);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 1, 3, -3);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 1, 4, -4);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 1, 5, -4);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 2, 1, -1);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 2, 2, -2);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 2, 3, -3);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 2, 4, -3);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 4, 1, -1);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 4, 2, -1);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 10, 1, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 10, 0, 0);
+TEST_CONSTEXPR_CXX20 bool test35() {
+  test(S("abcdefghij"), 10, 0, S("abcde"), 4, 2, -1);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 10, 0, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 10, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 10, 1, S(""), 0, 0, 0);
+  test(S("abcdefghij"), 10, 1, S(""), 0, 1, 0);
+  test(S("abcdefghij"), 10, 1, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 0, 1, -1);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 0, 2, -2);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 0, 4, -4);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 0, 5, -5);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 0, 6, -5);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 1, 1, -1);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 1, 2, -2);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 1, 3, -3);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 1, 4, -4);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 1, 5, -4);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 2, 1, -1);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 2, 2, -2);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 2, 3, -3);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 2, 4, -3);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 4, 1, -1);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 4, 2, -1);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 10, 1, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 10, 0, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test36()
-{
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghij"), 11, 0, S(""), 0, 0, 0);
-    test(S("abcdefghij"), 11, 0, S(""), 0, 1, 0);
-    test(S("abcdefghij"), 11, 0, S(""), 1, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 0, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 0, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 0, 2, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 0, 4, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 0, 5, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 0, 6, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 1, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 1, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 1, 2, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 1, 3, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 1, 4, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 1, 5, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 2, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 2, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 2, 2, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 2, 3, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 2, 4, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 4, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 4, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 4, 2, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 5, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 5, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcde"), 6, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 5, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 9, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 10, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 11, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 4, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 8, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 9, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 10, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 2, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 4, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 5, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 6, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 9, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 9, 2, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 19, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 20, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 21, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 18, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 19, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 20, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 5, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 9, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 10, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 11, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 19, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 19, 2, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+TEST_CONSTEXPR_CXX20 bool test36() {
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 10, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghij"), 11, 0, S(""), 0, 0, 0);
+  test(S("abcdefghij"), 11, 0, S(""), 0, 1, 0);
+  test(S("abcdefghij"), 11, 0, S(""), 1, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 0, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 0, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 0, 2, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 0, 4, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 0, 5, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 0, 6, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 1, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 1, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 1, 2, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 1, 3, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 1, 4, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 1, 5, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 2, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 2, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 2, 2, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 2, 3, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 2, 4, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 4, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 4, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 4, 2, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 5, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 5, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcde"), 6, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 5, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 9, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 10, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 0, 11, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 4, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 8, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 9, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 1, 10, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 2, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 4, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 5, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 5, 6, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 9, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 9, 2, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 19, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 20, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0, 21, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 18, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 19, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 1, 20, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 5, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 9, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 10, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 10, 11, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 19, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 19, 2, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test37()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 4, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 4, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 6, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 5, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 1, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 3, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 4, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 4, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 4, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 4, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 5, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 6, 0, 0);
+TEST_CONSTEXPR_CXX20 bool test37() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 0, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 1, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 2, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 4, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 4, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 0, 6, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 1, 5, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 1, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 3, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 2, 4, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 4, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 4, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 4, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 5, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 6, 0, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test38()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 9, -8);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 19, -18);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 21, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 2, 8);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 4, 6);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 6, 5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 5, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 1, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 3, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 4, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 4, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 4, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 4, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 5, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 5, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 11, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 9, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 10, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 10, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 1, 9);
+TEST_CONSTEXPR_CXX20 bool test38() {
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 9, -8);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 19, -18);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 0, 21, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 2, 8);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 4, 6);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 0, 6, 5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 1, 5, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 1, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 3, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 2, 4, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 4, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 4, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 4, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 5, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 5, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 0, 11, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 9, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 10, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 10, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 1, 9);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test39()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 19, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 20, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 21, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 19, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 20, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 20, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 2, 17);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 4, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 5, 14);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 6, 14);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 5, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 1, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 3, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 4, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 4, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 4, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 4, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 5, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 5, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 5, 14);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 11, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 9, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 10, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 10, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 19, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 21, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 19, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 20, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 20, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 0, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 0, 20);
+TEST_CONSTEXPR_CXX20 bool test39() {
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 19, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 20, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 21, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 19, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 20, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 20, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 2, 17);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 4, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 5, 14);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 0, 6, 14);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 1, 5, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 1, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 3, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 2, 4, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 4, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 4, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 4, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 5, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 5, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 5, 14);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 0, 11, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 9, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 10, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 10, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 19, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 0, 21, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 19, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 20, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 20, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 0, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 0, 20);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test40()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 2, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 4, 16);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 5, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 6, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 5, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 1, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 3, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 4, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 4, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 4, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 4, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 5, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 5, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 5, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 9, 11);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 9, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 10, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 10, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 20, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 21, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 19, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 20, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 20, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 0, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 2, 18);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 4, 16);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 5, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 6, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 5, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 1, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 3, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 4, -2);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 4, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 4, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 4, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 5, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 5, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 5, 15);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 9, 11);
+TEST_CONSTEXPR_CXX20 bool test40() {
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 2, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 4, 16);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 5, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 6, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 1, 5, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 1, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 3, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 2, 4, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 4, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 4, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 4, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 5, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 5, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 5, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 9, 11);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 9, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 10, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 10, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 20, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 0, 21, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 19, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 20, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 20, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 0, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 2, 18);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 4, 16);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 5, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 0, 6, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 1, 5, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 1, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 3, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 2, 4, -2);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 4, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 4, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 4, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 5, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 5, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 5, 15);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 9, 11);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test41()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 8, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 10, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 1, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 2, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 4, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 9, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 9, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 9, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 10, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 10, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 20, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 21, 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 9, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 18, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 1, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 5, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 9, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 19, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 19, 1, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 19, 2, -19);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 20, 0, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 20, 1, 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 4, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 4, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+TEST_CONSTEXPR_CXX20 bool test41() {
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 8, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 1, 10, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 1, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 2, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 4, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 9, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 9, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 9, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 10, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 10, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 20, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 0, 21, 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 9, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 18, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 1, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 5, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 9, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 19, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 19, 1, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 19, 2, -19);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 20, 0, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 20, 1, 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 0, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 1, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 2, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 4, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 4, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test42()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 6, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 3, -2);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 5, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 4, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 4, 1, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 4, 2, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 5, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 8, -7);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 9, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 10, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 9, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 18, -17);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 19, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 20, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 0, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 5, 1);
+TEST_CONSTEXPR_CXX20 bool test42() {
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 0, 6, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 3, -2);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 1, 5, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 2, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 4, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 4, 1, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 4, 2, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 5, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 8, -7);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 9, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 1, 10, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 9, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 18, -17);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 19, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 1, 20, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 0, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 5, 1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test43()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 6, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 2, 7);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 3, 6);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 4, 5);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 4, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 4, 1, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 4, 2, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 5, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 5, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 4, 5);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 8, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 9, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 10, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 10, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 18, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 19, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 20, -10);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 19, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 20, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 20, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 0, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 0, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 6, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 1, 17);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 2, 16);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 3, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 4, 14);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 5, 14);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 4, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 4, 1, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 4, 2, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 5, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 5, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 1, 17);
+TEST_CONSTEXPR_CXX20 bool test43() {
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 6, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 2, 7);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 3, 6);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 4, 5);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 1, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 2, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 4, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 4, 1, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 4, 2, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 5, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 5, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 4, 5);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 8, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 1, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 9, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 10, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 10, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 18, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 19, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 1, 20, -10);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 19, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 20, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 20, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 0, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 0, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 0, 6, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 1, 17);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 2, 16);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 3, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 4, 14);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 1, 5, 14);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 2, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 4, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 4, 1, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 4, 2, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 5, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 5, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 1, 17);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test44()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 4, 14);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 8, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 9, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 10, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 10, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 1, 17);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 18, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 19, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 20, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 19, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 20, 0, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 20, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 6, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 2, 17);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 3, 16);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 4, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 5, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 4, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 4, 1, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 4, 2, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 5, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 5, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 4, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 8, 11);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 9, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 10, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 10, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 18, 1);
+TEST_CONSTEXPR_CXX20 bool test44() {
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 4, 14);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 8, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 9, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 10, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 10, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 1, 17);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 18, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 19, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 1, 20, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 19, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 20, 0, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 20, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 0, 6, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 2, 17);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 3, 16);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 4, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 1, 5, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 2, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 4, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 4, 1, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 4, 2, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 5, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 5, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 4, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 8, 11);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 1, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 9, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 10, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 10, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 18, 1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test45()
-{
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 19, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 20, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 19, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 20, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 20, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 4, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 6, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 2, 17);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 3, 16);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 4, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 5, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 3, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 4, -1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 4, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 4, 1, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 4, 2, -3);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 5, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 5, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 5, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 11, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 4, 15);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 8, 11);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 1, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 2, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 6, -4);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 9, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 9, 1, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 9, 2, -8);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 10, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 10, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 10, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 19, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 20, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 21, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 18, 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 19, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 20, 0);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 5, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 19, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 19, 1, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 19, 2, -18);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 20, 0, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 20, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 2, -2);
+TEST_CONSTEXPR_CXX20 bool test45() {
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 19, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 20, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 19, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 20, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 20, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 4, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 0, 6, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 2, 17);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 3, 16);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 4, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 1, 5, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 3, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 2, 4, -1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 4, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 4, 1, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 4, 2, -3);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 5, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 5, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 5, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 0, 11, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 4, 15);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 8, 11);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 1, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 1, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 2, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 5, 6, -4);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 9, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 9, 1, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 9, 2, -8);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 10, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 10, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 10, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 19, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 20, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 0, 21, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 18, 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 19, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 1, 20, 0);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 5, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 19, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 19, 1, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 19, 2, -18);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 20, 0, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 20, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 0, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 2, -2);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test46()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 4, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 4, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 6, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 2, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 3, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 2, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 3, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 4, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 4, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 4, 1, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 4, 2, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 5, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 8, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 10, 9);
+TEST_CONSTEXPR_CXX20 bool test46() {
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 2, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 4, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 4, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 0, 6, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 2, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 3, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 1, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 2, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 3, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 2, 4, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 4, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 4, 1, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 4, 2, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 5, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 8, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 10, 9);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test47()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 2, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 4, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 6, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 9, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 9, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 21, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 18, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 19, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 20, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 9, -8);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 11, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 19, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 19, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 0, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 0, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 6, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 2, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 3, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 2, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 3, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 4, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 4, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 4, 1, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 4, 2, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 5, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 5, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 8, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 2, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 4, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 6, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 9, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 9, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 9, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 10, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 10, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 21, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 18, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 19, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 20, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 1, 4);
+TEST_CONSTEXPR_CXX20 bool test47() {
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 2, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 4, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 6, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 9, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 9, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 0, 21, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 18, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 19, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 1, 20, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 9, -8);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 10, 11, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 19, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 19, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 0, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 0, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 0, 6, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 2, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 3, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 1, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 2, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 3, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 2, 4, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 4, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 4, 1, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 4, 2, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 5, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 5, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 8, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 1, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 2, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 4, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 5, 6, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 9, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 9, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 9, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 10, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 10, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 0, 21, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 18, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 19, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 1, 20, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 1, 4);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test48()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 5, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 9, -4);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 10, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 11, -5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 19, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 19, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 19, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 20, 0, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 20, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 0, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 6, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 2, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 3, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 2, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 3, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 4, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 4, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 4, 1, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 4, 2, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 5, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 5, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 8, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 2, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 4, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 6, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 9, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 9, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 9, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 10, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 10, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 21, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 18, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 19, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 20, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 5, 4);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 10, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 11, -1);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 19, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 19, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 19, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 20, 0, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 20, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 6, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 2, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 3, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 0, 10);
+TEST_CONSTEXPR_CXX20 bool test48() {
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 5, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 9, -4);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 10, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 11, -5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 19, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 19, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 19, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 20, 0, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 20, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 0, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 0, 6, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 2, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 3, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 1, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 2, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 3, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 2, 4, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 4, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 4, 1, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 4, 2, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 5, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 5, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 8, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 1, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 2, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 4, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 5, 6, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 9, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 9, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 9, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 10, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 10, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 0, 21, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 18, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 19, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 1, 20, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 5, 4);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 10, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 10, 11, -1);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 19, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 19, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 19, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 20, 0, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 20, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 0, 6, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 2, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 3, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 1, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 0, 10);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test49()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 2, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 3, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 4, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 4, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 4, 1, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 4, 2, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 5, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 5, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 8, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 2, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 4, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 6, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 9, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 9, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 9, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 10, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 10, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 21, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 18, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 19, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 20, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 11, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 19, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 19, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 19, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 20, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 20, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 4, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 6, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 2, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 3, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 1, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 2, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 3, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 4, 8);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 4, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 4, 1, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 4, 2, 6);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 5, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 5, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 5, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 9, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 11, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 4, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 8, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 1, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 2, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 4, 5);
+TEST_CONSTEXPR_CXX20 bool test49() {
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 2, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 3, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 4, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 4, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 4, 1, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 4, 2, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 5, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 5, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 8, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 1, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 2, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 4, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 5, 6, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 9, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 9, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 9, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 10, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 10, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 0, 21, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 18, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 19, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 1, 20, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 10, 11, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 19, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 19, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 19, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 20, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 20, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 4, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 0, 6, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 2, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 3, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 1, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 1, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 2, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 3, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 2, 4, 8);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 4, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 4, 1, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 4, 2, 6);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 5, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 5, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 5, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 9, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 0, 11, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 4, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 8, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 1, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 1, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 2, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 4, 5);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test50()
-{
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 6, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 9, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 9, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 9, 2, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 10, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 10, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 10, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 19, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 20, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 21, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 18, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 19, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 20, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 5, 5);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 9, 1);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 11, 0);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 19, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 19, 1, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 19, 2, -9);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 20, 0, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 20, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 4, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 4, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+TEST_CONSTEXPR_CXX20 bool test50() {
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 6, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 9, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 9, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 9, 2, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 10, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 10, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 10, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 19, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 20, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 0, 21, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 18, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 19, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 1, 20, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 5, 5);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 9, 1);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 10, 11, 0);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 19, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 19, 1, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 19, 2, -9);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 20, 0, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 20, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 0, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 1, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 2, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 4, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 4, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test51()
-{
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 2, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 4, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 5, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 6, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 2, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 3, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 4, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 5, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 1, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 2, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 3, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 4, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 4, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 4, 1, 15);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 4, 2, 15);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 5, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 5, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 9, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 10, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 11, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 4, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 8, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 9, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 10, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 1, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 2, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 4, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 5, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 6, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 9, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 9, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 10, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 19, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 20, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 21, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 9, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 18, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 19, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 20, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 11, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 19, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 19, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 0, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 2, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 4, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 5, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 6, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 2, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 3, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 4, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 5, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 1, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 2, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 3, 17);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 4, 17);
+TEST_CONSTEXPR_CXX20 bool test51() {
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 2, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 4, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 5, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 0, 6, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 2, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 3, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 4, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 1, 5, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 1, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 2, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 3, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 2, 4, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 4, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 4, 1, 15);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 4, 2, 15);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 5, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 5, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 9, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 10, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 0, 11, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 4, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 8, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 9, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 1, 10, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 1, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 2, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 4, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 5, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 5, 6, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 9, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 9, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 10, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 19, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 20, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 0, 21, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 9, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 18, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 19, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 1, 20, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 10, 11, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 19, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 19, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 0, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 2, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 4, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 5, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 0, 6, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 2, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 3, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 4, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 1, 5, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 1, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 2, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 3, 17);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 4, 17);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test52()
-{
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 4, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 4, 1, 15);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 4, 2, 15);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 5, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 5, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 9, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 10, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 11, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 4, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 8, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 9, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 10, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 1, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 2, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 4, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 5, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 6, 14);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 9, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 9, 1, 10);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 9, 2, 10);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 10, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 1, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 10, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 19, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 20, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 21, 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 1, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 9, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 18, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 19, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 20, 18);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 1, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 5, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 9, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 10, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 11, 9);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 19, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 19, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 19, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 20, 0, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 20, 1, 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 4, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 4, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 9, 1, -1);
+TEST_CONSTEXPR_CXX20 bool test52() {
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 4, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 4, 1, 15);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 4, 2, 15);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 5, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 5, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 9, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 10, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 0, 11, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 4, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 8, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 9, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 1, 10, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 1, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 2, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 4, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 5, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 5, 6, 14);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 9, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 9, 1, 10);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 9, 2, 10);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 10, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 1, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 10, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 19, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 20, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 0, 21, 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 1, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 9, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 18, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 19, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 1, 20, 18);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 1, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 5, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 9, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 10, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 10, 11, 9);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 19, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 19, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 19, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 20, 0, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 20, 1, 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 0, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 1, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 2, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 4, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 4, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 9, 1, -1);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test53()
-{
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 5, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 3, -3);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 4, -3);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 4, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 4, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 8, -8);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 10, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 2, -2);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 4, -4);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 6, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 9, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 9, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 20, -20);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 21, -20);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 18, -18);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 19, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 20, -19);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 5, -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 19, 1, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 19, 2, -1);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 20, 0, 0);
+TEST_CONSTEXPR_CXX20 bool test53() {
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 0, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 1, 5, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 3, -3);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 2, 4, -3);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 4, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 4, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 0, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 8, -8);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 1, 10, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 2, -2);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 4, -4);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 5, 6, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 9, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 9, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 20, -20);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 0, 21, -20);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 18, -18);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 19, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 1, 20, -19);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 5, -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 9, -9);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 10, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 10, 11, -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 19, 1, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 19, 2, -1);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 20, 0, 0);
 
-    return true;
+  return true;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 bool test54()
-{
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 4, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 5, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 6, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 3, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 4, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 5, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 3, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 4, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 4, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 4, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 4, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 6, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 5, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 11, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 4, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 8, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 4, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 5, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 6, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 9, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 9, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 9, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 11, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 19, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 20, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 21, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 18, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 19, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 20, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 5, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 9, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 10, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 11, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 19, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 19, 2, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
+TEST_CONSTEXPR_CXX20 bool test54() {
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 21, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S(""), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 4, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 5, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 0, 6, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 3, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 4, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 1, 5, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 3, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 2, 4, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 4, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 4, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 4, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcde"), 6, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 5, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 0, 11, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 4, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 8, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 1, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 4, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 5, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 5, 6, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 9, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 9, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 9, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghij"), 11, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 19, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 20, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 0, 21, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 18, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 19, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 1, 20, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 5, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 9, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 10, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 10, 11, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 19, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 19, 2, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 20, 0, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 20, 1, 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
 
-    return true;
+  return true;
 }
 
-template<class S>
-TEST_CONSTEXPR_CXX20 bool test55()
-{
-    test_npos(S(""), 0, 0, S(""), 0, 0);
-    test_npos(S(""), 0, 0, S("abcde"), 0, -5);
-    test_npos(S("abcde"), 0, 0, S("abcdefghij"), 0, -10);
-    test_npos(S("abcde"), 0, 0, S("abcdefghij"), 1, -9);
-    test_npos(S("abcde"), 0, 0, S("abcdefghij"), 5, -5);
+template <class S>
+TEST_CONSTEXPR_CXX20 bool test55() {
+  test_npos(S(""), 0, 0, S(""), 0, 0);
+  test_npos(S(""), 0, 0, S("abcde"), 0, -5);
+  test_npos(S("abcde"), 0, 0, S("abcdefghij"), 0, -10);
+  test_npos(S("abcde"), 0, 0, S("abcdefghij"), 1, -9);
+  test_npos(S("abcde"), 0, 0, S("abcdefghij"), 5, -5);
 
-    return true;
+  return true;
 }
 
 template <class S>
@@ -6069,8 +6006,7 @@ void test() {
 #endif
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test<std::string>();
 #if TEST_STD_VER >= 11
   test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_view.pass.cpp
index 313b055c7ae7f27..80469814a15a052 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/size_size_string_view.pass.cpp
@@ -18,347 +18,336 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 int sign(int x)
-{
-    if (x == 0)
-        return 0;
-    if (x < 0)
-        return -1;
-    return 1;
+TEST_CONSTEXPR_CXX20 int sign(int x) {
+  if (x == 0)
+    return 0;
+  if (x < 0)
+    return -1;
+  return 1;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::size_type pos1, typename S::size_type n1,
-     SV sv, int x)
-{
-    if (pos1 <= s.size())
-        assert(sign(s.compare(pos1, n1, sv)) == sign(x));
+TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::size_type pos1, typename S::size_type n1, SV sv, int x) {
+  if (pos1 <= s.size())
+    assert(sign(s.compare(pos1, n1, sv)) == sign(x));
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            TEST_IGNORE_NODISCARD s.compare(pos1, n1, sv);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos1 > s.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      TEST_IGNORE_NODISCARD s.compare(pos1, n1, sv);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos1 > s.size());
     }
+  }
 #endif
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), 0, 0, SV(""), 0);
-    test(S(""), 0, 0, SV("abcde"), -5);
-    test(S(""), 0, 0, SV("abcdefghij"), -10);
-    test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S(""), 0, 1, SV(""), 0);
-    test(S(""), 0, 1, SV("abcde"), -5);
-    test(S(""), 0, 1, SV("abcdefghij"), -10);
-    test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), -20);
-    test(S(""), 1, 0, SV(""), 0);
-    test(S(""), 1, 0, SV("abcde"), 0);
-    test(S(""), 1, 0, SV("abcdefghij"), 0);
-    test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0);
-    test(S("abcde"), 0, 0, SV(""), 0);
-    test(S("abcde"), 0, 0, SV("abcde"), -5);
-    test(S("abcde"), 0, 0, SV("abcdefghij"), -10);
-    test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcde"), 0, 1, SV(""), 1);
-    test(S("abcde"), 0, 1, SV("abcde"), -4);
-    test(S("abcde"), 0, 1, SV("abcdefghij"), -9);
-    test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), -19);
-    test(S("abcde"), 0, 2, SV(""), 2);
-    test(S("abcde"), 0, 2, SV("abcde"), -3);
-    test(S("abcde"), 0, 2, SV("abcdefghij"), -8);
-    test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), -18);
-    test(S("abcde"), 0, 4, SV(""), 4);
-    test(S("abcde"), 0, 4, SV("abcde"), -1);
-    test(S("abcde"), 0, 4, SV("abcdefghij"), -6);
-    test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), -16);
-    test(S("abcde"), 0, 5, SV(""), 5);
-    test(S("abcde"), 0, 5, SV("abcde"), 0);
-    test(S("abcde"), 0, 5, SV("abcdefghij"), -5);
-    test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), -15);
-    test(S("abcde"), 0, 6, SV(""), 5);
-    test(S("abcde"), 0, 6, SV("abcde"), 0);
-    test(S("abcde"), 0, 6, SV("abcdefghij"), -5);
-    test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), -15);
-    test(S("abcde"), 1, 0, SV(""), 0);
-    test(S("abcde"), 1, 0, SV("abcde"), -5);
-    test(S("abcde"), 1, 0, SV("abcdefghij"), -10);
-    test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcde"), 1, 1, SV(""), 1);
-    test(S("abcde"), 1, 1, SV("abcde"), 1);
-    test(S("abcde"), 1, 1, SV("abcdefghij"), 1);
-    test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcde"), 1, 2, SV(""), 2);
-    test(S("abcde"), 1, 2, SV("abcde"), 1);
-    test(S("abcde"), 1, 2, SV("abcdefghij"), 1);
-    test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcde"), 1, 3, SV(""), 3);
-    test(S("abcde"), 1, 3, SV("abcde"), 1);
-    test(S("abcde"), 1, 3, SV("abcdefghij"), 1);
-    test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcde"), 1, 4, SV(""), 4);
-    test(S("abcde"), 1, 4, SV("abcde"), 1);
-    test(S("abcde"), 1, 4, SV("abcdefghij"), 1);
-    test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcde"), 1, 5, SV(""), 4);
-    test(S("abcde"), 1, 5, SV("abcde"), 1);
-    test(S("abcde"), 1, 5, SV("abcdefghij"), 1);
-    test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcde"), 2, 0, SV(""), 0);
-    test(S("abcde"), 2, 0, SV("abcde"), -5);
-    test(S("abcde"), 2, 0, SV("abcdefghij"), -10);
-    test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcde"), 2, 1, SV(""), 1);
-    test(S("abcde"), 2, 1, SV("abcde"), 2);
-    test(S("abcde"), 2, 1, SV("abcdefghij"), 2);
-    test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 2);
-    test(S("abcde"), 2, 2, SV(""), 2);
-    test(S("abcde"), 2, 2, SV("abcde"), 2);
-    test(S("abcde"), 2, 2, SV("abcdefghij"), 2);
-    test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 2);
-    test(S("abcde"), 2, 3, SV(""), 3);
-    test(S("abcde"), 2, 3, SV("abcde"), 2);
-    test(S("abcde"), 2, 3, SV("abcdefghij"), 2);
-    test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 2);
-    test(S("abcde"), 2, 4, SV(""), 3);
-    test(S("abcde"), 2, 4, SV("abcde"), 2);
-    test(S("abcde"), 2, 4, SV("abcdefghij"), 2);
-    test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 2);
-    test(S("abcde"), 4, 0, SV(""), 0);
-    test(S("abcde"), 4, 0, SV("abcde"), -5);
-    test(S("abcde"), 4, 0, SV("abcdefghij"), -10);
-    test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcde"), 4, 1, SV(""), 1);
-    test(S("abcde"), 4, 1, SV("abcde"), 4);
-    test(S("abcde"), 4, 1, SV("abcdefghij"), 4);
-    test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 4);
-    test(S("abcde"), 4, 2, SV(""), 1);
-    test(S("abcde"), 4, 2, SV("abcde"), 4);
-    test(S("abcde"), 4, 2, SV("abcdefghij"), 4);
-    test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 4);
-    test(S("abcde"), 5, 0, SV(""), 0);
-    test(S("abcde"), 5, 0, SV("abcde"), -5);
-    test(S("abcde"), 5, 0, SV("abcdefghij"), -10);
-    test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcde"), 5, 1, SV(""), 0);
-    test(S("abcde"), 5, 1, SV("abcde"), -5);
-    test(S("abcde"), 5, 1, SV("abcdefghij"), -10);
-    test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), -20);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), 0, 0, SV(""), 0);
+  test(S(""), 0, 0, SV("abcde"), -5);
+  test(S(""), 0, 0, SV("abcdefghij"), -10);
+  test(S(""), 0, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S(""), 0, 1, SV(""), 0);
+  test(S(""), 0, 1, SV("abcde"), -5);
+  test(S(""), 0, 1, SV("abcdefghij"), -10);
+  test(S(""), 0, 1, SV("abcdefghijklmnopqrst"), -20);
+  test(S(""), 1, 0, SV(""), 0);
+  test(S(""), 1, 0, SV("abcde"), 0);
+  test(S(""), 1, 0, SV("abcdefghij"), 0);
+  test(S(""), 1, 0, SV("abcdefghijklmnopqrst"), 0);
+  test(S("abcde"), 0, 0, SV(""), 0);
+  test(S("abcde"), 0, 0, SV("abcde"), -5);
+  test(S("abcde"), 0, 0, SV("abcdefghij"), -10);
+  test(S("abcde"), 0, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcde"), 0, 1, SV(""), 1);
+  test(S("abcde"), 0, 1, SV("abcde"), -4);
+  test(S("abcde"), 0, 1, SV("abcdefghij"), -9);
+  test(S("abcde"), 0, 1, SV("abcdefghijklmnopqrst"), -19);
+  test(S("abcde"), 0, 2, SV(""), 2);
+  test(S("abcde"), 0, 2, SV("abcde"), -3);
+  test(S("abcde"), 0, 2, SV("abcdefghij"), -8);
+  test(S("abcde"), 0, 2, SV("abcdefghijklmnopqrst"), -18);
+  test(S("abcde"), 0, 4, SV(""), 4);
+  test(S("abcde"), 0, 4, SV("abcde"), -1);
+  test(S("abcde"), 0, 4, SV("abcdefghij"), -6);
+  test(S("abcde"), 0, 4, SV("abcdefghijklmnopqrst"), -16);
+  test(S("abcde"), 0, 5, SV(""), 5);
+  test(S("abcde"), 0, 5, SV("abcde"), 0);
+  test(S("abcde"), 0, 5, SV("abcdefghij"), -5);
+  test(S("abcde"), 0, 5, SV("abcdefghijklmnopqrst"), -15);
+  test(S("abcde"), 0, 6, SV(""), 5);
+  test(S("abcde"), 0, 6, SV("abcde"), 0);
+  test(S("abcde"), 0, 6, SV("abcdefghij"), -5);
+  test(S("abcde"), 0, 6, SV("abcdefghijklmnopqrst"), -15);
+  test(S("abcde"), 1, 0, SV(""), 0);
+  test(S("abcde"), 1, 0, SV("abcde"), -5);
+  test(S("abcde"), 1, 0, SV("abcdefghij"), -10);
+  test(S("abcde"), 1, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcde"), 1, 1, SV(""), 1);
+  test(S("abcde"), 1, 1, SV("abcde"), 1);
+  test(S("abcde"), 1, 1, SV("abcdefghij"), 1);
+  test(S("abcde"), 1, 1, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcde"), 1, 2, SV(""), 2);
+  test(S("abcde"), 1, 2, SV("abcde"), 1);
+  test(S("abcde"), 1, 2, SV("abcdefghij"), 1);
+  test(S("abcde"), 1, 2, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcde"), 1, 3, SV(""), 3);
+  test(S("abcde"), 1, 3, SV("abcde"), 1);
+  test(S("abcde"), 1, 3, SV("abcdefghij"), 1);
+  test(S("abcde"), 1, 3, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcde"), 1, 4, SV(""), 4);
+  test(S("abcde"), 1, 4, SV("abcde"), 1);
+  test(S("abcde"), 1, 4, SV("abcdefghij"), 1);
+  test(S("abcde"), 1, 4, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcde"), 1, 5, SV(""), 4);
+  test(S("abcde"), 1, 5, SV("abcde"), 1);
+  test(S("abcde"), 1, 5, SV("abcdefghij"), 1);
+  test(S("abcde"), 1, 5, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcde"), 2, 0, SV(""), 0);
+  test(S("abcde"), 2, 0, SV("abcde"), -5);
+  test(S("abcde"), 2, 0, SV("abcdefghij"), -10);
+  test(S("abcde"), 2, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcde"), 2, 1, SV(""), 1);
+  test(S("abcde"), 2, 1, SV("abcde"), 2);
+  test(S("abcde"), 2, 1, SV("abcdefghij"), 2);
+  test(S("abcde"), 2, 1, SV("abcdefghijklmnopqrst"), 2);
+  test(S("abcde"), 2, 2, SV(""), 2);
+  test(S("abcde"), 2, 2, SV("abcde"), 2);
+  test(S("abcde"), 2, 2, SV("abcdefghij"), 2);
+  test(S("abcde"), 2, 2, SV("abcdefghijklmnopqrst"), 2);
+  test(S("abcde"), 2, 3, SV(""), 3);
+  test(S("abcde"), 2, 3, SV("abcde"), 2);
+  test(S("abcde"), 2, 3, SV("abcdefghij"), 2);
+  test(S("abcde"), 2, 3, SV("abcdefghijklmnopqrst"), 2);
+  test(S("abcde"), 2, 4, SV(""), 3);
+  test(S("abcde"), 2, 4, SV("abcde"), 2);
+  test(S("abcde"), 2, 4, SV("abcdefghij"), 2);
+  test(S("abcde"), 2, 4, SV("abcdefghijklmnopqrst"), 2);
+  test(S("abcde"), 4, 0, SV(""), 0);
+  test(S("abcde"), 4, 0, SV("abcde"), -5);
+  test(S("abcde"), 4, 0, SV("abcdefghij"), -10);
+  test(S("abcde"), 4, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcde"), 4, 1, SV(""), 1);
+  test(S("abcde"), 4, 1, SV("abcde"), 4);
+  test(S("abcde"), 4, 1, SV("abcdefghij"), 4);
+  test(S("abcde"), 4, 1, SV("abcdefghijklmnopqrst"), 4);
+  test(S("abcde"), 4, 2, SV(""), 1);
+  test(S("abcde"), 4, 2, SV("abcde"), 4);
+  test(S("abcde"), 4, 2, SV("abcdefghij"), 4);
+  test(S("abcde"), 4, 2, SV("abcdefghijklmnopqrst"), 4);
+  test(S("abcde"), 5, 0, SV(""), 0);
+  test(S("abcde"), 5, 0, SV("abcde"), -5);
+  test(S("abcde"), 5, 0, SV("abcdefghij"), -10);
+  test(S("abcde"), 5, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcde"), 5, 1, SV(""), 0);
+  test(S("abcde"), 5, 1, SV("abcde"), -5);
+  test(S("abcde"), 5, 1, SV("abcdefghij"), -10);
+  test(S("abcde"), 5, 1, SV("abcdefghijklmnopqrst"), -20);
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S("abcde"), 6, 0, SV(""), 0);
-    test(S("abcde"), 6, 0, SV("abcde"), 0);
-    test(S("abcde"), 6, 0, SV("abcdefghij"), 0);
-    test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0);
-    test(S("abcdefghij"), 0, 0, SV(""), 0);
-    test(S("abcdefghij"), 0, 0, SV("abcde"), -5);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghij"), -10);
-    test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghij"), 0, 1, SV(""), 1);
-    test(S("abcdefghij"), 0, 1, SV("abcde"), -4);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghij"), -9);
-    test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), -19);
-    test(S("abcdefghij"), 0, 5, SV(""), 5);
-    test(S("abcdefghij"), 0, 5, SV("abcde"), 0);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghij"), -5);
-    test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), -15);
-    test(S("abcdefghij"), 0, 9, SV(""), 9);
-    test(S("abcdefghij"), 0, 9, SV("abcde"), 4);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghij"), -1);
-    test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), -11);
-    test(S("abcdefghij"), 0, 10, SV(""), 10);
-    test(S("abcdefghij"), 0, 10, SV("abcde"), 5);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0);
-    test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), -10);
-    test(S("abcdefghij"), 0, 11, SV(""), 10);
-    test(S("abcdefghij"), 0, 11, SV("abcde"), 5);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0);
-    test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), -10);
-    test(S("abcdefghij"), 1, 0, SV(""), 0);
-    test(S("abcdefghij"), 1, 0, SV("abcde"), -5);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghij"), -10);
-    test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghij"), 1, 1, SV(""), 1);
-    test(S("abcdefghij"), 1, 1, SV("abcde"), 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1);
-    test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghij"), 1, 4, SV(""), 4);
-    test(S("abcdefghij"), 1, 4, SV("abcde"), 1);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1);
-    test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghij"), 1, 8, SV(""), 8);
-    test(S("abcdefghij"), 1, 8, SV("abcde"), 1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1);
-    test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghij"), 1, 9, SV(""), 9);
-    test(S("abcdefghij"), 1, 9, SV("abcde"), 1);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1);
-    test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghij"), 1, 10, SV(""), 9);
-    test(S("abcdefghij"), 1, 10, SV("abcde"), 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1);
-    test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghij"), 5, 0, SV(""), 0);
-    test(S("abcdefghij"), 5, 0, SV("abcde"), -5);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghij"), -10);
-    test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghij"), 5, 1, SV(""), 1);
-    test(S("abcdefghij"), 5, 1, SV("abcde"), 5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5);
-    test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 5);
-    test(S("abcdefghij"), 5, 2, SV(""), 2);
-    test(S("abcdefghij"), 5, 2, SV("abcde"), 5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5);
-    test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 5);
-    test(S("abcdefghij"), 5, 4, SV(""), 4);
-    test(S("abcdefghij"), 5, 4, SV("abcde"), 5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5);
-    test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 5);
-    test(S("abcdefghij"), 5, 5, SV(""), 5);
-    test(S("abcdefghij"), 5, 5, SV("abcde"), 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5);
-    test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 5);
-    test(S("abcdefghij"), 5, 6, SV(""), 5);
-    test(S("abcdefghij"), 5, 6, SV("abcde"), 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5);
-    test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 5);
-    test(S("abcdefghij"), 9, 0, SV(""), 0);
-    test(S("abcdefghij"), 9, 0, SV("abcde"), -5);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghij"), -10);
-    test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghij"), 9, 1, SV(""), 1);
-    test(S("abcdefghij"), 9, 1, SV("abcde"), 9);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 9);
-    test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 9);
-    test(S("abcdefghij"), 9, 2, SV(""), 1);
-    test(S("abcdefghij"), 9, 2, SV("abcde"), 9);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 9);
-    test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 9);
-    test(S("abcdefghij"), 10, 0, SV(""), 0);
-    test(S("abcdefghij"), 10, 0, SV("abcde"), -5);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghij"), -10);
-    test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghij"), 10, 1, SV(""), 0);
-    test(S("abcdefghij"), 10, 1, SV("abcde"), -5);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghij"), -10);
-    test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghij"), 11, 0, SV(""), 0);
-    test(S("abcdefghij"), 11, 0, SV("abcde"), 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0);
-    test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S("abcde"), 6, 0, SV(""), 0);
+  test(S("abcde"), 6, 0, SV("abcde"), 0);
+  test(S("abcde"), 6, 0, SV("abcdefghij"), 0);
+  test(S("abcde"), 6, 0, SV("abcdefghijklmnopqrst"), 0);
+  test(S("abcdefghij"), 0, 0, SV(""), 0);
+  test(S("abcdefghij"), 0, 0, SV("abcde"), -5);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghij"), -10);
+  test(S("abcdefghij"), 0, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghij"), 0, 1, SV(""), 1);
+  test(S("abcdefghij"), 0, 1, SV("abcde"), -4);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghij"), -9);
+  test(S("abcdefghij"), 0, 1, SV("abcdefghijklmnopqrst"), -19);
+  test(S("abcdefghij"), 0, 5, SV(""), 5);
+  test(S("abcdefghij"), 0, 5, SV("abcde"), 0);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghij"), -5);
+  test(S("abcdefghij"), 0, 5, SV("abcdefghijklmnopqrst"), -15);
+  test(S("abcdefghij"), 0, 9, SV(""), 9);
+  test(S("abcdefghij"), 0, 9, SV("abcde"), 4);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghij"), -1);
+  test(S("abcdefghij"), 0, 9, SV("abcdefghijklmnopqrst"), -11);
+  test(S("abcdefghij"), 0, 10, SV(""), 10);
+  test(S("abcdefghij"), 0, 10, SV("abcde"), 5);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghij"), 0);
+  test(S("abcdefghij"), 0, 10, SV("abcdefghijklmnopqrst"), -10);
+  test(S("abcdefghij"), 0, 11, SV(""), 10);
+  test(S("abcdefghij"), 0, 11, SV("abcde"), 5);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghij"), 0);
+  test(S("abcdefghij"), 0, 11, SV("abcdefghijklmnopqrst"), -10);
+  test(S("abcdefghij"), 1, 0, SV(""), 0);
+  test(S("abcdefghij"), 1, 0, SV("abcde"), -5);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghij"), -10);
+  test(S("abcdefghij"), 1, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghij"), 1, 1, SV(""), 1);
+  test(S("abcdefghij"), 1, 1, SV("abcde"), 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghij"), 1);
+  test(S("abcdefghij"), 1, 1, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghij"), 1, 4, SV(""), 4);
+  test(S("abcdefghij"), 1, 4, SV("abcde"), 1);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghij"), 1);
+  test(S("abcdefghij"), 1, 4, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghij"), 1, 8, SV(""), 8);
+  test(S("abcdefghij"), 1, 8, SV("abcde"), 1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghij"), 1);
+  test(S("abcdefghij"), 1, 8, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghij"), 1, 9, SV(""), 9);
+  test(S("abcdefghij"), 1, 9, SV("abcde"), 1);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghij"), 1);
+  test(S("abcdefghij"), 1, 9, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghij"), 1, 10, SV(""), 9);
+  test(S("abcdefghij"), 1, 10, SV("abcde"), 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghij"), 1);
+  test(S("abcdefghij"), 1, 10, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghij"), 5, 0, SV(""), 0);
+  test(S("abcdefghij"), 5, 0, SV("abcde"), -5);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghij"), -10);
+  test(S("abcdefghij"), 5, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghij"), 5, 1, SV(""), 1);
+  test(S("abcdefghij"), 5, 1, SV("abcde"), 5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghij"), 5);
+  test(S("abcdefghij"), 5, 1, SV("abcdefghijklmnopqrst"), 5);
+  test(S("abcdefghij"), 5, 2, SV(""), 2);
+  test(S("abcdefghij"), 5, 2, SV("abcde"), 5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghij"), 5);
+  test(S("abcdefghij"), 5, 2, SV("abcdefghijklmnopqrst"), 5);
+  test(S("abcdefghij"), 5, 4, SV(""), 4);
+  test(S("abcdefghij"), 5, 4, SV("abcde"), 5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghij"), 5);
+  test(S("abcdefghij"), 5, 4, SV("abcdefghijklmnopqrst"), 5);
+  test(S("abcdefghij"), 5, 5, SV(""), 5);
+  test(S("abcdefghij"), 5, 5, SV("abcde"), 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghij"), 5);
+  test(S("abcdefghij"), 5, 5, SV("abcdefghijklmnopqrst"), 5);
+  test(S("abcdefghij"), 5, 6, SV(""), 5);
+  test(S("abcdefghij"), 5, 6, SV("abcde"), 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghij"), 5);
+  test(S("abcdefghij"), 5, 6, SV("abcdefghijklmnopqrst"), 5);
+  test(S("abcdefghij"), 9, 0, SV(""), 0);
+  test(S("abcdefghij"), 9, 0, SV("abcde"), -5);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghij"), -10);
+  test(S("abcdefghij"), 9, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghij"), 9, 1, SV(""), 1);
+  test(S("abcdefghij"), 9, 1, SV("abcde"), 9);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghij"), 9);
+  test(S("abcdefghij"), 9, 1, SV("abcdefghijklmnopqrst"), 9);
+  test(S("abcdefghij"), 9, 2, SV(""), 1);
+  test(S("abcdefghij"), 9, 2, SV("abcde"), 9);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghij"), 9);
+  test(S("abcdefghij"), 9, 2, SV("abcdefghijklmnopqrst"), 9);
+  test(S("abcdefghij"), 10, 0, SV(""), 0);
+  test(S("abcdefghij"), 10, 0, SV("abcde"), -5);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghij"), -10);
+  test(S("abcdefghij"), 10, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghij"), 10, 1, SV(""), 0);
+  test(S("abcdefghij"), 10, 1, SV("abcde"), -5);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghij"), -10);
+  test(S("abcdefghij"), 10, 1, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghij"), 11, 0, SV(""), 0);
+  test(S("abcdefghij"), 11, 0, SV("abcde"), 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghij"), 0);
+  test(S("abcdefghij"), 11, 0, SV("abcdefghijklmnopqrst"), 0);
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test2()
-{
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 0);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), -5);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), -10);
-    test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 1);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), -4);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), -9);
-    test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), -19);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 10);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 5);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0);
-    test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), -10);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 19);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 14);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 9);
-    test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), -1);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 20);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 15);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 20);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 15);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 0);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), -5);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), -10);
-    test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 9);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 18);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 19);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 19);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1);
-    test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 0);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), -5);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), -10);
-    test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 1);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 5);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 9);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 10);
-    test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 0);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), -5);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), -10);
-    test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 1);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 19);
-    test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 1);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 19);
-    test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 19);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 0);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), -5);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), -10);
-    test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 0);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), -5);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), -10);
-    test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), -20);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0);
-    test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0);
+TEST_CONSTEXPR_CXX20 void test2() {
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV(""), 0);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcde"), -5);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghij"), -10);
+  test(S("abcdefghijklmnopqrst"), 0, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV(""), 1);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcde"), -4);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghij"), -9);
+  test(S("abcdefghijklmnopqrst"), 0, 1, SV("abcdefghijklmnopqrst"), -19);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV(""), 10);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcde"), 5);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghij"), 0);
+  test(S("abcdefghijklmnopqrst"), 0, 10, SV("abcdefghijklmnopqrst"), -10);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV(""), 19);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcde"), 14);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghij"), 9);
+  test(S("abcdefghijklmnopqrst"), 0, 19, SV("abcdefghijklmnopqrst"), -1);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV(""), 20);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcde"), 15);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 0, 20, SV("abcdefghijklmnopqrst"), 0);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV(""), 20);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcde"), 15);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 0, 21, SV("abcdefghijklmnopqrst"), 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV(""), 0);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcde"), -5);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghij"), -10);
+  test(S("abcdefghijklmnopqrst"), 1, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV(""), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcde"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghij"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 1, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV(""), 9);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcde"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghij"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 9, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV(""), 18);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcde"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghij"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 18, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV(""), 19);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcde"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghij"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 19, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV(""), 19);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcde"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghij"), 1);
+  test(S("abcdefghijklmnopqrst"), 1, 20, SV("abcdefghijklmnopqrst"), 1);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV(""), 0);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcde"), -5);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghij"), -10);
+  test(S("abcdefghijklmnopqrst"), 10, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV(""), 1);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcde"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 1, SV("abcdefghijklmnopqrst"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV(""), 5);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcde"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 5, SV("abcdefghijklmnopqrst"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV(""), 9);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcde"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 9, SV("abcdefghijklmnopqrst"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV(""), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcde"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 10, SV("abcdefghijklmnopqrst"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV(""), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcde"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghij"), 10);
+  test(S("abcdefghijklmnopqrst"), 10, 11, SV("abcdefghijklmnopqrst"), 10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV(""), 0);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcde"), -5);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghij"), -10);
+  test(S("abcdefghijklmnopqrst"), 19, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV(""), 1);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcde"), 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghij"), 19);
+  test(S("abcdefghijklmnopqrst"), 19, 1, SV("abcdefghijklmnopqrst"), 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV(""), 1);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcde"), 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghij"), 19);
+  test(S("abcdefghijklmnopqrst"), 19, 2, SV("abcdefghijklmnopqrst"), 19);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV(""), 0);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcde"), -5);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghij"), -10);
+  test(S("abcdefghijklmnopqrst"), 20, 0, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV(""), 0);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcde"), -5);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghij"), -10);
+  test(S("abcdefghijklmnopqrst"), 20, 1, SV("abcdefghijklmnopqrst"), -20);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV(""), 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcde"), 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghij"), 0);
+  test(S("abcdefghijklmnopqrst"), 21, 0, SV("abcdefghijklmnopqrst"), 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -382,8 +371,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/string.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/string.pass.cpp
index e81946e215bee95..f63cd5066585867 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/string.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/string.pass.cpp
@@ -16,21 +16,18 @@
 #include "test_macros.h"
 #include "min_allocator.h"
 
-TEST_CONSTEXPR_CXX20 int sign(int x)
-{
-    if (x == 0)
-        return 0;
-    if (x < 0)
-        return -1;
-    return 1;
+TEST_CONSTEXPR_CXX20 int sign(int x) {
+  if (x == 0)
+    return 0;
+  if (x < 0)
+    return -1;
+  return 1;
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, int x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.compare(str));
-    assert(sign(s.compare(str)) == sign(x));
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, int x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.compare(str));
+  assert(sign(s.compare(str)) == sign(x));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -85,8 +82,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_compare/string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_compare/string_view.pass.cpp
index 72c0203a3ca2d21..2f97d4819772a49 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_compare/string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_compare/string_view.pass.cpp
@@ -16,21 +16,18 @@
 #include "test_macros.h"
 #include "min_allocator.h"
 
-TEST_CONSTEXPR_CXX20 int sign(int x)
-{
-    if (x == 0)
-        return 0;
-    if (x < 0)
-        return -1;
-    return 1;
+TEST_CONSTEXPR_CXX20 int sign(int x) {
+  if (x == 0)
+    return 0;
+  if (x < 0)
+    return -1;
+  return 1;
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, int x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.compare(sv));
-    assert(sign(s.compare(sv)) == sign(x));
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, int x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.compare(sv));
+  assert(sign(s.compare(sv)) == sign(x));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -80,8 +77,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/char_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/char_size.pass.cpp
index a2c42930175c87e..6fddd3629c6f73c 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/char_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/char_size.pass.cpp
@@ -18,23 +18,19 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::value_type c, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(c, pos));
-    assert(s.find_first_not_of(c, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+test(const S& s, typename S::value_type c, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(c, pos));
+  assert(s.find_first_not_of(c, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::value_type c, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(c));
-    assert(s.find_first_not_of(c) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::value_type c, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(c));
+  assert(s.find_first_not_of(c) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -104,8 +100,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size.pass.cpp
index 3fa13ef09e5e3ff..bc4f976d5adf5dd 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size.pass.cpp
@@ -18,128 +18,122 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str, pos));
-    assert(s.find_first_not_of(str, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+test(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str, pos));
+  assert(s.find_first_not_of(str, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type x)
-{
-    assert(s.find_first_not_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const typename S::value_type* str, typename S::size_type x) {
+  assert(s.find_first_not_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), "", 0, S::npos);
-    test(S(""), "laenf", 0, S::npos);
-    test(S(""), "pqlnkmbdjo", 0, S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
-    test(S(""), "", 1, S::npos);
-    test(S(""), "bjaht", 1, S::npos);
-    test(S(""), "hjlcmgpket", 1, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
-    test(S("fodgq"), "", 0, 0);
-    test(S("qanej"), "dfkap", 0, 0);
-    test(S("clbao"), "ihqrfebgad", 0, 0);
-    test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, S::npos);
-    test(S("srdfq"), "", 1, 1);
-    test(S("oemth"), "ikcrq", 1, 1);
-    test(S("cdaih"), "dmajblfhsg", 1, 3);
-    test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, S::npos);
-    test(S("cshmd"), "", 2, 2);
-    test(S("lhcdo"), "oebqi", 2, 2);
-    test(S("qnsoh"), "kojhpmbsfe", 2, S::npos);
-    test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, S::npos);
-    test(S("fmtsp"), "", 4, 4);
-    test(S("khbpm"), "aobjd", 4, 4);
-    test(S("pbsji"), "pcbahntsje", 4, 4);
-    test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, S::npos);
-    test(S("eqmpa"), "", 5, S::npos);
-    test(S("omigs"), "kocgb", 5, S::npos);
-    test(S("onmje"), "fbslrjiqkm", 5, S::npos);
-    test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, S::npos);
-    test(S("schfa"), "", 6, S::npos);
-    test(S("igdsc"), "qngpd", 6, S::npos);
-    test(S("brqgo"), "rodhqklgmb", 6, S::npos);
-    test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, S::npos);
-    test(S("hcjitbfapl"), "", 0, 0);
-    test(S("daiprenocl"), "ashjd", 0, 2);
-    test(S("litpcfdghe"), "mgojkldsqh", 0, 1);
-    test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, S::npos);
-    test(S("qpghtfbaji"), "", 1, 1);
-    test(S("gfshlcmdjr"), "nadkh", 1, 1);
-    test(S("nkodajteqp"), "ofdrqmkebl", 1, 4);
-    test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, S::npos);
-    test(S("crnklpmegd"), "", 5, 5);
-    test(S("jsbtafedoc"), "prqgn", 5, 5);
-    test(S("qnmodrtkeb"), "pejafmnokr", 5, 6);
-    test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, S::npos);
-    test(S("lmofqdhpki"), "", 9, 9);
-    test(S("hnefkqimca"), "rtjpa", 9, S::npos);
-    test(S("drtasbgmfp"), "ktsrmnqagd", 9, 9);
-    test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, S::npos);
-    test(S("elgofjmbrq"), "", 10, S::npos);
-    test(S("mjqdgalkpc"), "dplqa", 10, S::npos);
-    test(S("kthqnfcerm"), "dkacjoptns", 10, S::npos);
-    test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, S::npos);
-    test(S("eqsgalomhb"), "", 11, S::npos);
-    test(S("akiteljmoh"), "lofbc", 11, S::npos);
-    test(S("hlbdfreqjo"), "astoegbfpn", 11, S::npos);
-    test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), "", 0, 0);
-    test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, 0);
-    test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, 1);
-    test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, S::npos);
-    test(S("jlnkraeodhcspfgbqitm"), "", 1, 1);
-    test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, 1);
-    test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 3);
-    test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, S::npos);
-    test(S("hdpkobnsalmcfijregtq"), "", 10, 10);
-    test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 11);
-    test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 13);
-    test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, S::npos);
-    test(S("niptglfbosehkamrdqcj"), "", 19, 19);
-    test(S("copqdhstbingamjfkler"), "djkqc", 19, 19);
-    test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, S::npos);
-    test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, S::npos);
-    test(S("eaintpchlqsbdgrkjofm"), "", 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, S::npos);
-    test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, S::npos);
-    test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), "", 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, S::npos);
-    test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, S::npos);
-    test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), "", 0, S::npos);
+  test(S(""), "laenf", 0, S::npos);
+  test(S(""), "pqlnkmbdjo", 0, S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
+  test(S(""), "", 1, S::npos);
+  test(S(""), "bjaht", 1, S::npos);
+  test(S(""), "hjlcmgpket", 1, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
+  test(S("fodgq"), "", 0, 0);
+  test(S("qanej"), "dfkap", 0, 0);
+  test(S("clbao"), "ihqrfebgad", 0, 0);
+  test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, S::npos);
+  test(S("srdfq"), "", 1, 1);
+  test(S("oemth"), "ikcrq", 1, 1);
+  test(S("cdaih"), "dmajblfhsg", 1, 3);
+  test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, S::npos);
+  test(S("cshmd"), "", 2, 2);
+  test(S("lhcdo"), "oebqi", 2, 2);
+  test(S("qnsoh"), "kojhpmbsfe", 2, S::npos);
+  test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, S::npos);
+  test(S("fmtsp"), "", 4, 4);
+  test(S("khbpm"), "aobjd", 4, 4);
+  test(S("pbsji"), "pcbahntsje", 4, 4);
+  test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, S::npos);
+  test(S("eqmpa"), "", 5, S::npos);
+  test(S("omigs"), "kocgb", 5, S::npos);
+  test(S("onmje"), "fbslrjiqkm", 5, S::npos);
+  test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, S::npos);
+  test(S("schfa"), "", 6, S::npos);
+  test(S("igdsc"), "qngpd", 6, S::npos);
+  test(S("brqgo"), "rodhqklgmb", 6, S::npos);
+  test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, S::npos);
+  test(S("hcjitbfapl"), "", 0, 0);
+  test(S("daiprenocl"), "ashjd", 0, 2);
+  test(S("litpcfdghe"), "mgojkldsqh", 0, 1);
+  test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, S::npos);
+  test(S("qpghtfbaji"), "", 1, 1);
+  test(S("gfshlcmdjr"), "nadkh", 1, 1);
+  test(S("nkodajteqp"), "ofdrqmkebl", 1, 4);
+  test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, S::npos);
+  test(S("crnklpmegd"), "", 5, 5);
+  test(S("jsbtafedoc"), "prqgn", 5, 5);
+  test(S("qnmodrtkeb"), "pejafmnokr", 5, 6);
+  test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, S::npos);
+  test(S("lmofqdhpki"), "", 9, 9);
+  test(S("hnefkqimca"), "rtjpa", 9, S::npos);
+  test(S("drtasbgmfp"), "ktsrmnqagd", 9, 9);
+  test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, S::npos);
+  test(S("elgofjmbrq"), "", 10, S::npos);
+  test(S("mjqdgalkpc"), "dplqa", 10, S::npos);
+  test(S("kthqnfcerm"), "dkacjoptns", 10, S::npos);
+  test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, S::npos);
+  test(S("eqsgalomhb"), "", 11, S::npos);
+  test(S("akiteljmoh"), "lofbc", 11, S::npos);
+  test(S("hlbdfreqjo"), "astoegbfpn", 11, S::npos);
+  test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), "", 0, 0);
+  test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, 0);
+  test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, 1);
+  test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, S::npos);
+  test(S("jlnkraeodhcspfgbqitm"), "", 1, 1);
+  test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, 1);
+  test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 3);
+  test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, S::npos);
+  test(S("hdpkobnsalmcfijregtq"), "", 10, 10);
+  test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 11);
+  test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 13);
+  test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, S::npos);
+  test(S("niptglfbosehkamrdqcj"), "", 19, 19);
+  test(S("copqdhstbingamjfkler"), "djkqc", 19, 19);
+  test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, S::npos);
+  test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, S::npos);
+  test(S("eaintpchlqsbdgrkjofm"), "", 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, S::npos);
+  test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, S::npos);
+  test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), "", 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, S::npos);
+  test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, S::npos);
+  test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), "", S::npos);
-    test(S(""), "laenf", S::npos);
-    test(S(""), "pqlnkmbdjo", S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", S::npos);
-    test(S("nhmko"), "", 0);
-    test(S("lahfb"), "irkhs", 0);
-    test(S("gmfhd"), "kantesmpgj", 2);
-    test(S("odaft"), "oknlrstdpiqmjbaghcfe", S::npos);
-    test(S("eolhfgpjqk"), "", 0);
-    test(S("nbatdlmekr"), "bnrpe", 2);
-    test(S("jdmciepkaq"), "jtdaefblso", 2);
-    test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", S::npos);
-    test(S("gprdcokbnjhlsfmtieqa"), "", 0);
-    test(S("qjghlnftcaismkropdeb"), "bjaht", 0);
-    test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 1);
-    test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", S::npos);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), "", S::npos);
+  test(S(""), "laenf", S::npos);
+  test(S(""), "pqlnkmbdjo", S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", S::npos);
+  test(S("nhmko"), "", 0);
+  test(S("lahfb"), "irkhs", 0);
+  test(S("gmfhd"), "kantesmpgj", 2);
+  test(S("odaft"), "oknlrstdpiqmjbaghcfe", S::npos);
+  test(S("eolhfgpjqk"), "", 0);
+  test(S("nbatdlmekr"), "bnrpe", 2);
+  test(S("jdmciepkaq"), "jtdaefblso", 2);
+  test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", S::npos);
+  test(S("gprdcokbnjhlsfmtieqa"), "", 0);
+  test(S("qjghlnftcaismkropdeb"), "bjaht", 0);
+  test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 1);
+  test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", S::npos);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -159,8 +153,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size_size.pass.cpp
index cdd22c95c3ea513..e567546596de865 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/pointer_size_size.pass.cpp
@@ -18,353 +18,351 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type n, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str, pos, n));
-    assert(s.find_first_not_of(str, pos, n) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+test(const S& s,
+     const typename S::value_type* str,
+     typename S::size_type pos,
+     typename S::size_type n,
+     typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str, pos, n));
+  assert(s.find_first_not_of(str, pos, n) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), "", 0, 0, S::npos);
-    test(S(""), "irkhs", 0, 0, S::npos);
-    test(S(""), "kante", 0, 1, S::npos);
-    test(S(""), "oknlr", 0, 2, S::npos);
-    test(S(""), "pcdro", 0, 4, S::npos);
-    test(S(""), "bnrpe", 0, 5, S::npos);
-    test(S(""), "jtdaefblso", 0, 0, S::npos);
-    test(S(""), "oselktgbca", 0, 1, S::npos);
-    test(S(""), "eqgaplhckj", 0, 5, S::npos);
-    test(S(""), "bjahtcmnlp", 0, 9, S::npos);
-    test(S(""), "hjlcmgpket", 0, 10, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
-    test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
-    test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
-    test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
-    test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
-    test(S(""), "", 1, 0, S::npos);
-    test(S(""), "lbtqd", 1, 0, S::npos);
-    test(S(""), "tboim", 1, 1, S::npos);
-    test(S(""), "slcer", 1, 2, S::npos);
-    test(S(""), "cbjfs", 1, 4, S::npos);
-    test(S(""), "aqibs", 1, 5, S::npos);
-    test(S(""), "gtfblmqinc", 1, 0, S::npos);
-    test(S(""), "mkqpbtdalg", 1, 1, S::npos);
-    test(S(""), "kphatlimcd", 1, 5, S::npos);
-    test(S(""), "pblasqogic", 1, 9, S::npos);
-    test(S(""), "arosdhcfme", 1, 10, S::npos);
-    test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
-    test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
-    test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
-    test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
-    test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
-    test(S("eaint"), "", 0, 0, 0);
-    test(S("binja"), "gfsrt", 0, 0, 0);
-    test(S("latkm"), "pfsoc", 0, 1, 0);
-    test(S("lecfr"), "tpflm", 0, 2, 0);
-    test(S("eqkst"), "sgkec", 0, 4, 1);
-    test(S("cdafr"), "romds", 0, 5, 0);
-    test(S("prbhe"), "qhjistlgmr", 0, 0, 0);
-    test(S("lbisk"), "pedfirsglo", 0, 1, 0);
-    test(S("hrlpd"), "aqcoslgrmk", 0, 5, 0);
-    test(S("ehmja"), "dabckmepqj", 0, 9, 1);
-    test(S("mhqgd"), "pqscrjthli", 0, 10, 0);
-    test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, 0);
-    test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, 0);
-    test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, 0);
-    test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, S::npos);
-    test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, S::npos);
-    test(S("clrgb"), "", 1, 0, 1);
-    test(S("tjmek"), "osmia", 1, 0, 1);
-    test(S("bgstp"), "ckonl", 1, 1, 1);
-    test(S("hstrk"), "ilcaj", 1, 2, 1);
-    test(S("kmspj"), "lasiq", 1, 4, 1);
-    test(S("tjboh"), "kfqmr", 1, 5, 1);
-    test(S("ilbcj"), "klnitfaobg", 1, 0, 1);
-    test(S("jkngf"), "gjhmdlqikp", 1, 1, 1);
-    test(S("gfcql"), "skbgtahqej", 1, 5, 1);
-    test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 1);
-    test(S("bthpg"), "bjgfmnlkio", 1, 10, 1);
-    test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, 1);
-    test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, 1);
-    test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 3);
-    test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, S::npos);
-    test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, S::npos);
-    test(S("ndrhl"), "", 2, 0, 2);
-    test(S("mrecp"), "otkgb", 2, 0, 2);
-    test(S("qlasf"), "cqsjl", 2, 1, 2);
-    test(S("smaqd"), "dpifl", 2, 2, 2);
-    test(S("hjeni"), "oapht", 2, 4, 2);
-    test(S("ocmfj"), "cifts", 2, 5, 2);
-    test(S("hmftq"), "nmsckbgalo", 2, 0, 2);
-    test(S("fklad"), "tpksqhamle", 2, 1, 2);
-    test(S("dirnm"), "tpdrchmkji", 2, 5, 3);
-    test(S("hrgdc"), "ijagfkblst", 2, 9, 3);
-    test(S("ifakg"), "kpocsignjb", 2, 10, 2);
-    test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, 2);
-    test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, 2);
-    test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 2);
-    test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, S::npos);
-    test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, S::npos);
-    test(S("cjgao"), "", 4, 0, 4);
-    test(S("kjplq"), "mabns", 4, 0, 4);
-    test(S("herni"), "bdnrp", 4, 1, 4);
-    test(S("tadrb"), "scidp", 4, 2, 4);
-    test(S("pkfeo"), "agbjl", 4, 4, 4);
-    test(S("hoser"), "jfmpr", 4, 5, S::npos);
-    test(S("kgrsp"), "rbpefghsmj", 4, 0, 4);
-    test(S("pgejb"), "apsfntdoqc", 4, 1, 4);
-    test(S("thlnq"), "ndkjeisgcl", 4, 5, 4);
-    test(S("nbmit"), "rnfpqatdeo", 4, 9, S::npos);
-    test(S("jgmib"), "bntjlqrfik", 4, 10, S::npos);
-    test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, 4);
-    test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, 4);
-    test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, S::npos);
-    test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, S::npos);
-    test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, S::npos);
-    test(S("klopi"), "", 5, 0, S::npos);
-    test(S("dajhn"), "psthd", 5, 0, S::npos);
-    test(S("jbgno"), "rpmjd", 5, 1, S::npos);
-    test(S("hkjae"), "dfsmk", 5, 2, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), "", 0, 0, S::npos);
+  test(S(""), "irkhs", 0, 0, S::npos);
+  test(S(""), "kante", 0, 1, S::npos);
+  test(S(""), "oknlr", 0, 2, S::npos);
+  test(S(""), "pcdro", 0, 4, S::npos);
+  test(S(""), "bnrpe", 0, 5, S::npos);
+  test(S(""), "jtdaefblso", 0, 0, S::npos);
+  test(S(""), "oselktgbca", 0, 1, S::npos);
+  test(S(""), "eqgaplhckj", 0, 5, S::npos);
+  test(S(""), "bjahtcmnlp", 0, 9, S::npos);
+  test(S(""), "hjlcmgpket", 0, 10, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
+  test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
+  test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
+  test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
+  test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
+  test(S(""), "", 1, 0, S::npos);
+  test(S(""), "lbtqd", 1, 0, S::npos);
+  test(S(""), "tboim", 1, 1, S::npos);
+  test(S(""), "slcer", 1, 2, S::npos);
+  test(S(""), "cbjfs", 1, 4, S::npos);
+  test(S(""), "aqibs", 1, 5, S::npos);
+  test(S(""), "gtfblmqinc", 1, 0, S::npos);
+  test(S(""), "mkqpbtdalg", 1, 1, S::npos);
+  test(S(""), "kphatlimcd", 1, 5, S::npos);
+  test(S(""), "pblasqogic", 1, 9, S::npos);
+  test(S(""), "arosdhcfme", 1, 10, S::npos);
+  test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
+  test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
+  test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
+  test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
+  test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
+  test(S("eaint"), "", 0, 0, 0);
+  test(S("binja"), "gfsrt", 0, 0, 0);
+  test(S("latkm"), "pfsoc", 0, 1, 0);
+  test(S("lecfr"), "tpflm", 0, 2, 0);
+  test(S("eqkst"), "sgkec", 0, 4, 1);
+  test(S("cdafr"), "romds", 0, 5, 0);
+  test(S("prbhe"), "qhjistlgmr", 0, 0, 0);
+  test(S("lbisk"), "pedfirsglo", 0, 1, 0);
+  test(S("hrlpd"), "aqcoslgrmk", 0, 5, 0);
+  test(S("ehmja"), "dabckmepqj", 0, 9, 1);
+  test(S("mhqgd"), "pqscrjthli", 0, 10, 0);
+  test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, 0);
+  test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, 0);
+  test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, 0);
+  test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, S::npos);
+  test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, S::npos);
+  test(S("clrgb"), "", 1, 0, 1);
+  test(S("tjmek"), "osmia", 1, 0, 1);
+  test(S("bgstp"), "ckonl", 1, 1, 1);
+  test(S("hstrk"), "ilcaj", 1, 2, 1);
+  test(S("kmspj"), "lasiq", 1, 4, 1);
+  test(S("tjboh"), "kfqmr", 1, 5, 1);
+  test(S("ilbcj"), "klnitfaobg", 1, 0, 1);
+  test(S("jkngf"), "gjhmdlqikp", 1, 1, 1);
+  test(S("gfcql"), "skbgtahqej", 1, 5, 1);
+  test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 1);
+  test(S("bthpg"), "bjgfmnlkio", 1, 10, 1);
+  test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, 1);
+  test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, 1);
+  test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 3);
+  test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, S::npos);
+  test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, S::npos);
+  test(S("ndrhl"), "", 2, 0, 2);
+  test(S("mrecp"), "otkgb", 2, 0, 2);
+  test(S("qlasf"), "cqsjl", 2, 1, 2);
+  test(S("smaqd"), "dpifl", 2, 2, 2);
+  test(S("hjeni"), "oapht", 2, 4, 2);
+  test(S("ocmfj"), "cifts", 2, 5, 2);
+  test(S("hmftq"), "nmsckbgalo", 2, 0, 2);
+  test(S("fklad"), "tpksqhamle", 2, 1, 2);
+  test(S("dirnm"), "tpdrchmkji", 2, 5, 3);
+  test(S("hrgdc"), "ijagfkblst", 2, 9, 3);
+  test(S("ifakg"), "kpocsignjb", 2, 10, 2);
+  test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, 2);
+  test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, 2);
+  test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 2);
+  test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, S::npos);
+  test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, S::npos);
+  test(S("cjgao"), "", 4, 0, 4);
+  test(S("kjplq"), "mabns", 4, 0, 4);
+  test(S("herni"), "bdnrp", 4, 1, 4);
+  test(S("tadrb"), "scidp", 4, 2, 4);
+  test(S("pkfeo"), "agbjl", 4, 4, 4);
+  test(S("hoser"), "jfmpr", 4, 5, S::npos);
+  test(S("kgrsp"), "rbpefghsmj", 4, 0, 4);
+  test(S("pgejb"), "apsfntdoqc", 4, 1, 4);
+  test(S("thlnq"), "ndkjeisgcl", 4, 5, 4);
+  test(S("nbmit"), "rnfpqatdeo", 4, 9, S::npos);
+  test(S("jgmib"), "bntjlqrfik", 4, 10, S::npos);
+  test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, 4);
+  test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, 4);
+  test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, S::npos);
+  test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, S::npos);
+  test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, S::npos);
+  test(S("klopi"), "", 5, 0, S::npos);
+  test(S("dajhn"), "psthd", 5, 0, S::npos);
+  test(S("jbgno"), "rpmjd", 5, 1, S::npos);
+  test(S("hkjae"), "dfsmk", 5, 2, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S("gbhqo"), "skqne", 5, 4, S::npos);
-    test(S("ktdor"), "kipnf", 5, 5, S::npos);
-    test(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos);
-    test(S("egmjk"), "fsmjcdairn", 5, 1, S::npos);
-    test(S("armql"), "pcdgltbrfj", 5, 5, S::npos);
-    test(S("cdhjo"), "aekfctpirg", 5, 9, S::npos);
-    test(S("jcons"), "ledihrsgpf", 5, 10, S::npos);
-    test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos);
-    test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos);
-    test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, S::npos);
-    test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, S::npos);
-    test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos);
-    test(S("gajqn"), "", 6, 0, S::npos);
-    test(S("stedk"), "hrnat", 6, 0, S::npos);
-    test(S("tjkaf"), "gsqdt", 6, 1, S::npos);
-    test(S("dthpe"), "bspkd", 6, 2, S::npos);
-    test(S("klhde"), "ohcmb", 6, 4, S::npos);
-    test(S("bhlki"), "heatr", 6, 5, S::npos);
-    test(S("lqmoh"), "pmblckedfn", 6, 0, S::npos);
-    test(S("mtqin"), "aceqmsrbik", 6, 1, S::npos);
-    test(S("dpqbr"), "lmbtdehjrn", 6, 5, S::npos);
-    test(S("kdhmo"), "teqmcrlgib", 6, 9, S::npos);
-    test(S("jblqp"), "njolbmspac", 6, 10, S::npos);
-    test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos);
-    test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos);
-    test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, S::npos);
-    test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos);
-    test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos);
-    test(S("jnkrfhotgl"), "", 0, 0, 0);
-    test(S("dltjfngbko"), "rqegt", 0, 0, 0);
-    test(S("bmjlpkiqde"), "dashm", 0, 1, 0);
-    test(S("skrflobnqm"), "jqirk", 0, 2, 0);
-    test(S("jkpldtshrm"), "rckeg", 0, 4, 0);
-    test(S("ghasdbnjqo"), "jscie", 0, 5, 0);
-    test(S("igrkhpbqjt"), "efsphndliq", 0, 0, 0);
-    test(S("ikthdgcamf"), "gdicosleja", 0, 1, 0);
-    test(S("pcofgeniam"), "qcpjibosfl", 0, 5, 2);
-    test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 4);
-    test(S("itphbqsker"), "dtablcrseo", 0, 10, 0);
-    test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, 0);
-    test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, 0);
-    test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 0);
-    test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 1);
-    test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, S::npos);
-    test(S("shbcqnmoar"), "", 1, 0, 1);
-    test(S("bdoshlmfin"), "ontrs", 1, 0, 1);
-    test(S("khfrebnsgq"), "pfkna", 1, 1, 1);
-    test(S("getcrsaoji"), "ekosa", 1, 2, 2);
-    test(S("fjiknedcpq"), "anqhk", 1, 4, 1);
-    test(S("tkejgnafrm"), "jekca", 1, 5, 4);
-    test(S("jnakolqrde"), "ikemsjgacf", 1, 0, 1);
-    test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, 1);
-    test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 3);
-    test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 1);
-    test(S("cigfqkated"), "sqcflrgtim", 1, 10, 5);
-    test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, 1);
-    test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, 1);
-    test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 5);
-    test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 5);
-    test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, S::npos);
-    test(S("ectnhskflp"), "", 5, 0, 5);
-    test(S("fgtianblpq"), "pijag", 5, 0, 5);
-    test(S("mfeqklirnh"), "jrckd", 5, 1, 5);
-    test(S("astedncjhk"), "qcloh", 5, 2, 5);
-    test(S("fhlqgcajbr"), "thlmp", 5, 4, 5);
-    test(S("epfhocmdng"), "qidmo", 5, 5, 5);
-    test(S("apcnsibger"), "lnegpsjqrd", 5, 0, 5);
-    test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 6);
-    test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 5);
-    test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 6);
-    test(S("jbhcfposld"), "trfqgmckbe", 5, 10, 5);
-    test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, 5);
-    test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, 5);
-    test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 6);
-    test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 8);
-    test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, S::npos);
-    test(S("shoiedtcjb"), "", 9, 0, 9);
-    test(S("ebcinjgads"), "tqbnh", 9, 0, 9);
-    test(S("dqmregkcfl"), "akmle", 9, 1, 9);
-    test(S("ngcrieqajf"), "iqfkm", 9, 2, 9);
-    test(S("qosmilgnjb"), "tqjsr", 9, 4, 9);
-    test(S("ikabsjtdfl"), "jplqg", 9, 5, S::npos);
-    test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, 9);
-    test(S("fdnplotmgh"), "morkglpesn", 9, 1, 9);
-    test(S("fdbicojerm"), "dmicerngat", 9, 5, S::npos);
-    test(S("mbtafndjcq"), "radgeskbtc", 9, 9, 9);
-    test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 9);
-    test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, 9);
-    test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 9);
-    test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 9);
-    test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, S::npos);
-    test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, S::npos);
-    test(S("ncjpmaekbs"), "", 10, 0, S::npos);
-    test(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos);
-    test(S("pqfhsgilen"), "qnpor", 10, 1, S::npos);
-    test(S("gqtjsbdckh"), "otdma", 10, 2, S::npos);
-    test(S("cfkqpjlegi"), "efhjg", 10, 4, S::npos);
-    test(S("beanrfodgj"), "odpte", 10, 5, S::npos);
-    test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos);
-    test(S("iomkfthagj"), "oaklidrbqg", 10, 1, S::npos);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S("gbhqo"), "skqne", 5, 4, S::npos);
+  test(S("ktdor"), "kipnf", 5, 5, S::npos);
+  test(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos);
+  test(S("egmjk"), "fsmjcdairn", 5, 1, S::npos);
+  test(S("armql"), "pcdgltbrfj", 5, 5, S::npos);
+  test(S("cdhjo"), "aekfctpirg", 5, 9, S::npos);
+  test(S("jcons"), "ledihrsgpf", 5, 10, S::npos);
+  test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos);
+  test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos);
+  test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, S::npos);
+  test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, S::npos);
+  test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos);
+  test(S("gajqn"), "", 6, 0, S::npos);
+  test(S("stedk"), "hrnat", 6, 0, S::npos);
+  test(S("tjkaf"), "gsqdt", 6, 1, S::npos);
+  test(S("dthpe"), "bspkd", 6, 2, S::npos);
+  test(S("klhde"), "ohcmb", 6, 4, S::npos);
+  test(S("bhlki"), "heatr", 6, 5, S::npos);
+  test(S("lqmoh"), "pmblckedfn", 6, 0, S::npos);
+  test(S("mtqin"), "aceqmsrbik", 6, 1, S::npos);
+  test(S("dpqbr"), "lmbtdehjrn", 6, 5, S::npos);
+  test(S("kdhmo"), "teqmcrlgib", 6, 9, S::npos);
+  test(S("jblqp"), "njolbmspac", 6, 10, S::npos);
+  test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos);
+  test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos);
+  test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, S::npos);
+  test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos);
+  test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos);
+  test(S("jnkrfhotgl"), "", 0, 0, 0);
+  test(S("dltjfngbko"), "rqegt", 0, 0, 0);
+  test(S("bmjlpkiqde"), "dashm", 0, 1, 0);
+  test(S("skrflobnqm"), "jqirk", 0, 2, 0);
+  test(S("jkpldtshrm"), "rckeg", 0, 4, 0);
+  test(S("ghasdbnjqo"), "jscie", 0, 5, 0);
+  test(S("igrkhpbqjt"), "efsphndliq", 0, 0, 0);
+  test(S("ikthdgcamf"), "gdicosleja", 0, 1, 0);
+  test(S("pcofgeniam"), "qcpjibosfl", 0, 5, 2);
+  test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 4);
+  test(S("itphbqsker"), "dtablcrseo", 0, 10, 0);
+  test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, 0);
+  test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, 0);
+  test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 0);
+  test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 1);
+  test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, S::npos);
+  test(S("shbcqnmoar"), "", 1, 0, 1);
+  test(S("bdoshlmfin"), "ontrs", 1, 0, 1);
+  test(S("khfrebnsgq"), "pfkna", 1, 1, 1);
+  test(S("getcrsaoji"), "ekosa", 1, 2, 2);
+  test(S("fjiknedcpq"), "anqhk", 1, 4, 1);
+  test(S("tkejgnafrm"), "jekca", 1, 5, 4);
+  test(S("jnakolqrde"), "ikemsjgacf", 1, 0, 1);
+  test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, 1);
+  test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 3);
+  test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 1);
+  test(S("cigfqkated"), "sqcflrgtim", 1, 10, 5);
+  test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, 1);
+  test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, 1);
+  test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 5);
+  test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 5);
+  test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, S::npos);
+  test(S("ectnhskflp"), "", 5, 0, 5);
+  test(S("fgtianblpq"), "pijag", 5, 0, 5);
+  test(S("mfeqklirnh"), "jrckd", 5, 1, 5);
+  test(S("astedncjhk"), "qcloh", 5, 2, 5);
+  test(S("fhlqgcajbr"), "thlmp", 5, 4, 5);
+  test(S("epfhocmdng"), "qidmo", 5, 5, 5);
+  test(S("apcnsibger"), "lnegpsjqrd", 5, 0, 5);
+  test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 6);
+  test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 5);
+  test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 6);
+  test(S("jbhcfposld"), "trfqgmckbe", 5, 10, 5);
+  test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, 5);
+  test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, 5);
+  test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 6);
+  test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 8);
+  test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, S::npos);
+  test(S("shoiedtcjb"), "", 9, 0, 9);
+  test(S("ebcinjgads"), "tqbnh", 9, 0, 9);
+  test(S("dqmregkcfl"), "akmle", 9, 1, 9);
+  test(S("ngcrieqajf"), "iqfkm", 9, 2, 9);
+  test(S("qosmilgnjb"), "tqjsr", 9, 4, 9);
+  test(S("ikabsjtdfl"), "jplqg", 9, 5, S::npos);
+  test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, 9);
+  test(S("fdnplotmgh"), "morkglpesn", 9, 1, 9);
+  test(S("fdbicojerm"), "dmicerngat", 9, 5, S::npos);
+  test(S("mbtafndjcq"), "radgeskbtc", 9, 9, 9);
+  test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 9);
+  test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, 9);
+  test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 9);
+  test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 9);
+  test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, S::npos);
+  test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, S::npos);
+  test(S("ncjpmaekbs"), "", 10, 0, S::npos);
+  test(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos);
+  test(S("pqfhsgilen"), "qnpor", 10, 1, S::npos);
+  test(S("gqtjsbdckh"), "otdma", 10, 2, S::npos);
+  test(S("cfkqpjlegi"), "efhjg", 10, 4, S::npos);
+  test(S("beanrfodgj"), "odpte", 10, 5, S::npos);
+  test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos);
+  test(S("iomkfthagj"), "oaklidrbqg", 10, 1, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test2()
-{
-    test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, S::npos);
-    test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, S::npos);
-    test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, S::npos);
-    test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos);
-    test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, S::npos);
-    test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, S::npos);
-    test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, S::npos);
-    test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos);
-    test(S("cqjohampgd"), "", 11, 0, S::npos);
-    test(S("hobitmpsan"), "aocjb", 11, 0, S::npos);
-    test(S("tjehkpsalm"), "jbrnk", 11, 1, S::npos);
-    test(S("ngfbojitcl"), "tqedg", 11, 2, S::npos);
-    test(S("rcfkdbhgjo"), "nqskp", 11, 4, S::npos);
-    test(S("qghptonrea"), "eaqkl", 11, 5, S::npos);
-    test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos);
-    test(S("hlmgabenti"), "lsftgajqpm", 11, 1, S::npos);
-    test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, S::npos);
-    test(S("jqedtkornm"), "shkncmiaqj", 11, 9, S::npos);
-    test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, S::npos);
-    test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos);
-    test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos);
-    test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, S::npos);
-    test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos);
-    test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos);
-    test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, 0);
-    test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, 0);
-    test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 0);
-    test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 0);
-    test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 0);
-    test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 0);
-    test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, 0);
-    test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 0);
-    test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 0);
-    test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 0);
-    test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 0);
-    test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, 0);
-    test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 0);
-    test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 0);
-    test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 11);
-    test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, S::npos);
-    test(S("febhmqtjanokscdirpgl"), "", 1, 0, 1);
-    test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, 1);
-    test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 1);
-    test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 2);
-    test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 2);
-    test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 1);
-    test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, 1);
-    test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 1);
-    test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 1);
-    test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 3);
-    test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 2);
-    test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, 1);
-    test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 1);
-    test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 2);
-    test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 13);
-    test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, S::npos);
-    test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, 10);
-    test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, 10);
-    test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 10);
-    test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 10);
-    test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 11);
-    test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 10);
-    test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, 10);
-    test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 10);
-    test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 10);
-    test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 11);
-    test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 10);
-    test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, 10);
-    test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 10);
-    test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 11);
-    test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 11);
-    test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, S::npos);
-    test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, 19);
-    test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, 19);
-    test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 19);
-    test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 19);
-    test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 19);
-    test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, S::npos);
-    test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, 19);
-    test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 19);
-    test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 19);
-    test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 19);
-    test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 19);
-    test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, 19);
-    test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 19);
-    test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, S::npos);
-    test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, S::npos);
-    test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, S::npos);
-    test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos);
-    test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos);
-    test(S("grkpahljcftesdmonqib"), "odife", 20, 1, S::npos);
-    test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, S::npos);
-    test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, S::npos);
-    test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, S::npos);
-    test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos);
-    test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, S::npos);
-    test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, S::npos);
-    test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, S::npos);
-    test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, S::npos);
-    test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos);
+TEST_CONSTEXPR_CXX20 void test2() {
+  test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, S::npos);
+  test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, S::npos);
+  test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, S::npos);
+  test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos);
+  test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, S::npos);
+  test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, S::npos);
+  test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, S::npos);
+  test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos);
+  test(S("cqjohampgd"), "", 11, 0, S::npos);
+  test(S("hobitmpsan"), "aocjb", 11, 0, S::npos);
+  test(S("tjehkpsalm"), "jbrnk", 11, 1, S::npos);
+  test(S("ngfbojitcl"), "tqedg", 11, 2, S::npos);
+  test(S("rcfkdbhgjo"), "nqskp", 11, 4, S::npos);
+  test(S("qghptonrea"), "eaqkl", 11, 5, S::npos);
+  test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos);
+  test(S("hlmgabenti"), "lsftgajqpm", 11, 1, S::npos);
+  test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, S::npos);
+  test(S("jqedtkornm"), "shkncmiaqj", 11, 9, S::npos);
+  test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, S::npos);
+  test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos);
+  test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos);
+  test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, S::npos);
+  test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos);
+  test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos);
+  test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, 0);
+  test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, 0);
+  test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 0);
+  test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 0);
+  test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 0);
+  test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 0);
+  test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, 0);
+  test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 0);
+  test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 0);
+  test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 0);
+  test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 0);
+  test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, 0);
+  test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 0);
+  test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 0);
+  test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 11);
+  test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, S::npos);
+  test(S("febhmqtjanokscdirpgl"), "", 1, 0, 1);
+  test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, 1);
+  test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 1);
+  test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 2);
+  test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 2);
+  test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 1);
+  test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, 1);
+  test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 1);
+  test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 1);
+  test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 3);
+  test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 2);
+  test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, 1);
+  test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 1);
+  test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 2);
+  test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 13);
+  test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, S::npos);
+  test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, 10);
+  test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, 10);
+  test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 10);
+  test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 10);
+  test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 11);
+  test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 10);
+  test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, 10);
+  test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 10);
+  test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 10);
+  test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 11);
+  test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 10);
+  test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, 10);
+  test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 10);
+  test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 11);
+  test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 11);
+  test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, S::npos);
+  test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, 19);
+  test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, 19);
+  test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 19);
+  test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 19);
+  test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 19);
+  test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, S::npos);
+  test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, 19);
+  test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 19);
+  test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 19);
+  test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 19);
+  test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 19);
+  test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, 19);
+  test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 19);
+  test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, S::npos);
+  test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, S::npos);
+  test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, S::npos);
+  test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos);
+  test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos);
+  test(S("grkpahljcftesdmonqib"), "odife", 20, 1, S::npos);
+  test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, S::npos);
+  test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, S::npos);
+  test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, S::npos);
+  test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos);
+  test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, S::npos);
+  test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, S::npos);
+  test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, S::npos);
+  test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, S::npos);
+  test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test3()
-{
-    test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, S::npos);
-    test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, S::npos);
-    test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, S::npos);
-    test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos);
-    test(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos);
-    test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos);
-    test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, S::npos);
-    test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, S::npos);
-    test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, S::npos);
-    test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, S::npos);
-    test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos);
-    test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, S::npos);
-    test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, S::npos);
-    test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, S::npos);
-    test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, S::npos);
-    test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos);
-    test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, S::npos);
-    test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, S::npos);
-    test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, S::npos);
-    test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos);
+TEST_CONSTEXPR_CXX20 void test3() {
+  test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, S::npos);
+  test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, S::npos);
+  test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, S::npos);
+  test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos);
+  test(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos);
+  test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos);
+  test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, S::npos);
+  test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, S::npos);
+  test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, S::npos);
+  test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, S::npos);
+  test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos);
+  test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, S::npos);
+  test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, S::npos);
+  test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, S::npos);
+  test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, S::npos);
+  test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos);
+  test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, S::npos);
+  test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, S::npos);
+  test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, S::npos);
+  test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -388,8 +386,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_size.pass.cpp
index df0273d594335fb..5a9bb039a3579ed 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_size.pass.cpp
@@ -17,129 +17,123 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str, pos));
-    assert(s.find_first_not_of(str, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str, pos));
+  assert(s.find_first_not_of(str, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str));
-    assert(s.find_first_not_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str));
+  assert(s.find_first_not_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), S(""), 0, S::npos);
-    test(S(""), S("laenf"), 0, S::npos);
-    test(S(""), S("pqlnkmbdjo"), 0, S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
-    test(S(""), S(""), 1, S::npos);
-    test(S(""), S("bjaht"), 1, S::npos);
-    test(S(""), S("hjlcmgpket"), 1, S::npos);
-    test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
-    test(S("fodgq"), S(""), 0, 0);
-    test(S("qanej"), S("dfkap"), 0, 0);
-    test(S("clbao"), S("ihqrfebgad"), 0, 0);
-    test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, S::npos);
-    test(S("srdfq"), S(""), 1, 1);
-    test(S("oemth"), S("ikcrq"), 1, 1);
-    test(S("cdaih"), S("dmajblfhsg"), 1, 3);
-    test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, S::npos);
-    test(S("cshmd"), S(""), 2, 2);
-    test(S("lhcdo"), S("oebqi"), 2, 2);
-    test(S("qnsoh"), S("kojhpmbsfe"), 2, S::npos);
-    test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, S::npos);
-    test(S("fmtsp"), S(""), 4, 4);
-    test(S("khbpm"), S("aobjd"), 4, 4);
-    test(S("pbsji"), S("pcbahntsje"), 4, 4);
-    test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, S::npos);
-    test(S("eqmpa"), S(""), 5, S::npos);
-    test(S("omigs"), S("kocgb"), 5, S::npos);
-    test(S("onmje"), S("fbslrjiqkm"), 5, S::npos);
-    test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, S::npos);
-    test(S("schfa"), S(""), 6, S::npos);
-    test(S("igdsc"), S("qngpd"), 6, S::npos);
-    test(S("brqgo"), S("rodhqklgmb"), 6, S::npos);
-    test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, S::npos);
-    test(S("hcjitbfapl"), S(""), 0, 0);
-    test(S("daiprenocl"), S("ashjd"), 0, 2);
-    test(S("litpcfdghe"), S("mgojkldsqh"), 0, 1);
-    test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, S::npos);
-    test(S("qpghtfbaji"), S(""), 1, 1);
-    test(S("gfshlcmdjr"), S("nadkh"), 1, 1);
-    test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 4);
-    test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, S::npos);
-    test(S("crnklpmegd"), S(""), 5, 5);
-    test(S("jsbtafedoc"), S("prqgn"), 5, 5);
-    test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 6);
-    test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, S::npos);
-    test(S("lmofqdhpki"), S(""), 9, 9);
-    test(S("hnefkqimca"), S("rtjpa"), 9, S::npos);
-    test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, 9);
-    test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, S::npos);
-    test(S("elgofjmbrq"), S(""), 10, S::npos);
-    test(S("mjqdgalkpc"), S("dplqa"), 10, S::npos);
-    test(S("kthqnfcerm"), S("dkacjoptns"), 10, S::npos);
-    test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, S::npos);
-    test(S("eqsgalomhb"), S(""), 11, S::npos);
-    test(S("akiteljmoh"), S("lofbc"), 11, S::npos);
-    test(S("hlbdfreqjo"), S("astoegbfpn"), 11, S::npos);
-    test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), S(""), 0, 0);
-    test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, 0);
-    test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, 1);
-    test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, S::npos);
-    test(S("jlnkraeodhcspfgbqitm"), S(""), 1, 1);
-    test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, 1);
-    test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 3);
-    test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, S::npos);
-    test(S("hdpkobnsalmcfijregtq"), S(""), 10, 10);
-    test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 11);
-    test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 13);
-    test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, S::npos);
-    test(S("niptglfbosehkamrdqcj"), S(""), 19, 19);
-    test(S("copqdhstbingamjfkler"), S("djkqc"), 19, 19);
-    test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, S::npos);
-    test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, S::npos);
-    test(S("eaintpchlqsbdgrkjofm"), S(""), 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, S::npos);
-    test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, S::npos);
-    test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, S::npos);
-    test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, S::npos);
-    test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), S(""), 0, S::npos);
+  test(S(""), S("laenf"), 0, S::npos);
+  test(S(""), S("pqlnkmbdjo"), 0, S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
+  test(S(""), S(""), 1, S::npos);
+  test(S(""), S("bjaht"), 1, S::npos);
+  test(S(""), S("hjlcmgpket"), 1, S::npos);
+  test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
+  test(S("fodgq"), S(""), 0, 0);
+  test(S("qanej"), S("dfkap"), 0, 0);
+  test(S("clbao"), S("ihqrfebgad"), 0, 0);
+  test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, S::npos);
+  test(S("srdfq"), S(""), 1, 1);
+  test(S("oemth"), S("ikcrq"), 1, 1);
+  test(S("cdaih"), S("dmajblfhsg"), 1, 3);
+  test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, S::npos);
+  test(S("cshmd"), S(""), 2, 2);
+  test(S("lhcdo"), S("oebqi"), 2, 2);
+  test(S("qnsoh"), S("kojhpmbsfe"), 2, S::npos);
+  test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, S::npos);
+  test(S("fmtsp"), S(""), 4, 4);
+  test(S("khbpm"), S("aobjd"), 4, 4);
+  test(S("pbsji"), S("pcbahntsje"), 4, 4);
+  test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, S::npos);
+  test(S("eqmpa"), S(""), 5, S::npos);
+  test(S("omigs"), S("kocgb"), 5, S::npos);
+  test(S("onmje"), S("fbslrjiqkm"), 5, S::npos);
+  test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, S::npos);
+  test(S("schfa"), S(""), 6, S::npos);
+  test(S("igdsc"), S("qngpd"), 6, S::npos);
+  test(S("brqgo"), S("rodhqklgmb"), 6, S::npos);
+  test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, S::npos);
+  test(S("hcjitbfapl"), S(""), 0, 0);
+  test(S("daiprenocl"), S("ashjd"), 0, 2);
+  test(S("litpcfdghe"), S("mgojkldsqh"), 0, 1);
+  test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, S::npos);
+  test(S("qpghtfbaji"), S(""), 1, 1);
+  test(S("gfshlcmdjr"), S("nadkh"), 1, 1);
+  test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 4);
+  test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, S::npos);
+  test(S("crnklpmegd"), S(""), 5, 5);
+  test(S("jsbtafedoc"), S("prqgn"), 5, 5);
+  test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 6);
+  test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, S::npos);
+  test(S("lmofqdhpki"), S(""), 9, 9);
+  test(S("hnefkqimca"), S("rtjpa"), 9, S::npos);
+  test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, 9);
+  test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, S::npos);
+  test(S("elgofjmbrq"), S(""), 10, S::npos);
+  test(S("mjqdgalkpc"), S("dplqa"), 10, S::npos);
+  test(S("kthqnfcerm"), S("dkacjoptns"), 10, S::npos);
+  test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, S::npos);
+  test(S("eqsgalomhb"), S(""), 11, S::npos);
+  test(S("akiteljmoh"), S("lofbc"), 11, S::npos);
+  test(S("hlbdfreqjo"), S("astoegbfpn"), 11, S::npos);
+  test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), S(""), 0, 0);
+  test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, 0);
+  test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, 1);
+  test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, S::npos);
+  test(S("jlnkraeodhcspfgbqitm"), S(""), 1, 1);
+  test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, 1);
+  test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 3);
+  test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, S::npos);
+  test(S("hdpkobnsalmcfijregtq"), S(""), 10, 10);
+  test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 11);
+  test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 13);
+  test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, S::npos);
+  test(S("niptglfbosehkamrdqcj"), S(""), 19, 19);
+  test(S("copqdhstbingamjfkler"), S("djkqc"), 19, 19);
+  test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, S::npos);
+  test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, S::npos);
+  test(S("eaintpchlqsbdgrkjofm"), S(""), 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, S::npos);
+  test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, S::npos);
+  test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, S::npos);
+  test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, S::npos);
+  test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), S(""), S::npos);
-    test(S(""), S("laenf"), S::npos);
-    test(S(""), S("pqlnkmbdjo"), S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
-    test(S("nhmko"), S(""), 0);
-    test(S("lahfb"), S("irkhs"), 0);
-    test(S("gmfhd"), S("kantesmpgj"), 2);
-    test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), S::npos);
-    test(S("eolhfgpjqk"), S(""), 0);
-    test(S("nbatdlmekr"), S("bnrpe"), 2);
-    test(S("jdmciepkaq"), S("jtdaefblso"), 2);
-    test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), S::npos);
-    test(S("gprdcokbnjhlsfmtieqa"), S(""), 0);
-    test(S("qjghlnftcaismkropdeb"), S("bjaht"), 0);
-    test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 1);
-    test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), S::npos);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), S(""), S::npos);
+  test(S(""), S("laenf"), S::npos);
+  test(S(""), S("pqlnkmbdjo"), S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
+  test(S("nhmko"), S(""), 0);
+  test(S("lahfb"), S("irkhs"), 0);
+  test(S("gmfhd"), S("kantesmpgj"), 2);
+  test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), S::npos);
+  test(S("eolhfgpjqk"), S(""), 0);
+  test(S("nbatdlmekr"), S("bnrpe"), 2);
+  test(S("jdmciepkaq"), S("jtdaefblso"), 2);
+  test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), S::npos);
+  test(S("gprdcokbnjhlsfmtieqa"), S(""), 0);
+  test(S("qjghlnftcaismkropdeb"), S("bjaht"), 0);
+  test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 1);
+  test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), S::npos);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -166,8 +160,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_view_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_view_size.pass.cpp
index ce5f765533c7462..98dfeafe8efc59c 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_view_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.not.of/string_view_size.pass.cpp
@@ -17,129 +17,123 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(sv, pos));
-    assert(s.find_first_not_of(sv, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(sv, pos));
+  assert(s.find_first_not_of(sv, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(sv));
-    assert(s.find_first_not_of(sv) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(sv));
+  assert(s.find_first_not_of(sv) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), SV(""), 0, S::npos);
-    test(S(""), SV("laenf"), 0, S::npos);
-    test(S(""), SV("pqlnkmbdjo"), 0, S::npos);
-    test(S(""), SV("qkamfogpnljdcshbreti"), 0, S::npos);
-    test(S(""), SV(""), 1, S::npos);
-    test(S(""), SV("bjaht"), 1, S::npos);
-    test(S(""), SV("hjlcmgpket"), 1, S::npos);
-    test(S(""), SV("htaobedqikfplcgjsmrn"), 1, S::npos);
-    test(S("fodgq"), SV(""), 0, 0);
-    test(S("qanej"), SV("dfkap"), 0, 0);
-    test(S("clbao"), SV("ihqrfebgad"), 0, 0);
-    test(S("mekdn"), SV("ngtjfcalbseiqrphmkdo"), 0, S::npos);
-    test(S("srdfq"), SV(""), 1, 1);
-    test(S("oemth"), SV("ikcrq"), 1, 1);
-    test(S("cdaih"), SV("dmajblfhsg"), 1, 3);
-    test(S("qohtk"), SV("oqftjhdmkgsblacenirp"), 1, S::npos);
-    test(S("cshmd"), SV(""), 2, 2);
-    test(S("lhcdo"), SV("oebqi"), 2, 2);
-    test(S("qnsoh"), SV("kojhpmbsfe"), 2, S::npos);
-    test(S("pkrof"), SV("acbsjqogpltdkhinfrem"), 2, S::npos);
-    test(S("fmtsp"), SV(""), 4, 4);
-    test(S("khbpm"), SV("aobjd"), 4, 4);
-    test(S("pbsji"), SV("pcbahntsje"), 4, 4);
-    test(S("mprdj"), SV("fhepcrntkoagbmldqijs"), 4, S::npos);
-    test(S("eqmpa"), SV(""), 5, S::npos);
-    test(S("omigs"), SV("kocgb"), 5, S::npos);
-    test(S("onmje"), SV("fbslrjiqkm"), 5, S::npos);
-    test(S("oqmrj"), SV("jeidpcmalhfnqbgtrsko"), 5, S::npos);
-    test(S("schfa"), SV(""), 6, S::npos);
-    test(S("igdsc"), SV("qngpd"), 6, S::npos);
-    test(S("brqgo"), SV("rodhqklgmb"), 6, S::npos);
-    test(S("tnrph"), SV("thdjgafrlbkoiqcspmne"), 6, S::npos);
-    test(S("hcjitbfapl"), SV(""), 0, 0);
-    test(S("daiprenocl"), SV("ashjd"), 0, 2);
-    test(S("litpcfdghe"), SV("mgojkldsqh"), 0, 1);
-    test(S("aidjksrolc"), SV("imqnaghkfrdtlopbjesc"), 0, S::npos);
-    test(S("qpghtfbaji"), SV(""), 1, 1);
-    test(S("gfshlcmdjr"), SV("nadkh"), 1, 1);
-    test(S("nkodajteqp"), SV("ofdrqmkebl"), 1, 4);
-    test(S("gbmetiprqd"), SV("bdfjqgatlksriohemnpc"), 1, S::npos);
-    test(S("crnklpmegd"), SV(""), 5, 5);
-    test(S("jsbtafedoc"), SV("prqgn"), 5, 5);
-    test(S("qnmodrtkeb"), SV("pejafmnokr"), 5, 6);
-    test(S("cpebqsfmnj"), SV("odnqkgijrhabfmcestlp"), 5, S::npos);
-    test(S("lmofqdhpki"), SV(""), 9, 9);
-    test(S("hnefkqimca"), SV("rtjpa"), 9, S::npos);
-    test(S("drtasbgmfp"), SV("ktsrmnqagd"), 9, 9);
-    test(S("lsaijeqhtr"), SV("rtdhgcisbnmoaqkfpjle"), 9, S::npos);
-    test(S("elgofjmbrq"), SV(""), 10, S::npos);
-    test(S("mjqdgalkpc"), SV("dplqa"), 10, S::npos);
-    test(S("kthqnfcerm"), SV("dkacjoptns"), 10, S::npos);
-    test(S("dfsjhanorc"), SV("hqfimtrgnbekpdcsjalo"), 10, S::npos);
-    test(S("eqsgalomhb"), SV(""), 11, S::npos);
-    test(S("akiteljmoh"), SV("lofbc"), 11, S::npos);
-    test(S("hlbdfreqjo"), SV("astoegbfpn"), 11, S::npos);
-    test(S("taqobhlerg"), SV("pdgreqomsncafklhtibj"), 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), SV(""), 0, 0);
-    test(S("aemtbrgcklhndjisfpoq"), SV("lbtqd"), 0, 0);
-    test(S("pnracgfkjdiholtbqsem"), SV("tboimldpjh"), 0, 1);
-    test(S("dicfltehbsgrmojnpkaq"), SV("slcerthdaiqjfnobgkpm"), 0, S::npos);
-    test(S("jlnkraeodhcspfgbqitm"), SV(""), 1, 1);
-    test(S("lhosrngtmfjikbqpcade"), SV("aqibs"), 1, 1);
-    test(S("rbtaqjhgkneisldpmfoc"), SV("gtfblmqinc"), 1, 3);
-    test(S("gpifsqlrdkbonjtmheca"), SV("mkqpbtdalgniorhfescj"), 1, S::npos);
-    test(S("hdpkobnsalmcfijregtq"), SV(""), 10, 10);
-    test(S("jtlshdgqaiprkbcoenfm"), SV("pblas"), 10, 11);
-    test(S("fkdrbqltsgmcoiphneaj"), SV("arosdhcfme"), 10, 13);
-    test(S("crsplifgtqedjohnabmk"), SV("blkhjeogicatqfnpdmsr"), 10, S::npos);
-    test(S("niptglfbosehkamrdqcj"), SV(""), 19, 19);
-    test(S("copqdhstbingamjfkler"), SV("djkqc"), 19, 19);
-    test(S("mrtaefilpdsgocnhqbjk"), SV("lgokshjtpb"), 19, S::npos);
-    test(S("kojatdhlcmigpbfrqnes"), SV("bqjhtkfepimcnsgrlado"), 19, S::npos);
-    test(S("eaintpchlqsbdgrkjofm"), SV(""), 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), SV("nocfa"), 20, S::npos);
-    test(S("spocfaktqdbiejlhngmr"), SV("bgtajmiedc"), 20, S::npos);
-    test(S("rphmlekgfscndtaobiqj"), SV("lsckfnqgdahejiopbtmr"), 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), SV(""), 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), SV("gfsrt"), 21, S::npos);
-    test(S("latkmisecnorjbfhqpdg"), SV("pfsocbhjtm"), 21, S::npos);
-    test(S("lecfratdjkhnsmqpoigb"), SV("tpflmdnoicjgkberhqsa"), 21, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), SV(""), 0, S::npos);
+  test(S(""), SV("laenf"), 0, S::npos);
+  test(S(""), SV("pqlnkmbdjo"), 0, S::npos);
+  test(S(""), SV("qkamfogpnljdcshbreti"), 0, S::npos);
+  test(S(""), SV(""), 1, S::npos);
+  test(S(""), SV("bjaht"), 1, S::npos);
+  test(S(""), SV("hjlcmgpket"), 1, S::npos);
+  test(S(""), SV("htaobedqikfplcgjsmrn"), 1, S::npos);
+  test(S("fodgq"), SV(""), 0, 0);
+  test(S("qanej"), SV("dfkap"), 0, 0);
+  test(S("clbao"), SV("ihqrfebgad"), 0, 0);
+  test(S("mekdn"), SV("ngtjfcalbseiqrphmkdo"), 0, S::npos);
+  test(S("srdfq"), SV(""), 1, 1);
+  test(S("oemth"), SV("ikcrq"), 1, 1);
+  test(S("cdaih"), SV("dmajblfhsg"), 1, 3);
+  test(S("qohtk"), SV("oqftjhdmkgsblacenirp"), 1, S::npos);
+  test(S("cshmd"), SV(""), 2, 2);
+  test(S("lhcdo"), SV("oebqi"), 2, 2);
+  test(S("qnsoh"), SV("kojhpmbsfe"), 2, S::npos);
+  test(S("pkrof"), SV("acbsjqogpltdkhinfrem"), 2, S::npos);
+  test(S("fmtsp"), SV(""), 4, 4);
+  test(S("khbpm"), SV("aobjd"), 4, 4);
+  test(S("pbsji"), SV("pcbahntsje"), 4, 4);
+  test(S("mprdj"), SV("fhepcrntkoagbmldqijs"), 4, S::npos);
+  test(S("eqmpa"), SV(""), 5, S::npos);
+  test(S("omigs"), SV("kocgb"), 5, S::npos);
+  test(S("onmje"), SV("fbslrjiqkm"), 5, S::npos);
+  test(S("oqmrj"), SV("jeidpcmalhfnqbgtrsko"), 5, S::npos);
+  test(S("schfa"), SV(""), 6, S::npos);
+  test(S("igdsc"), SV("qngpd"), 6, S::npos);
+  test(S("brqgo"), SV("rodhqklgmb"), 6, S::npos);
+  test(S("tnrph"), SV("thdjgafrlbkoiqcspmne"), 6, S::npos);
+  test(S("hcjitbfapl"), SV(""), 0, 0);
+  test(S("daiprenocl"), SV("ashjd"), 0, 2);
+  test(S("litpcfdghe"), SV("mgojkldsqh"), 0, 1);
+  test(S("aidjksrolc"), SV("imqnaghkfrdtlopbjesc"), 0, S::npos);
+  test(S("qpghtfbaji"), SV(""), 1, 1);
+  test(S("gfshlcmdjr"), SV("nadkh"), 1, 1);
+  test(S("nkodajteqp"), SV("ofdrqmkebl"), 1, 4);
+  test(S("gbmetiprqd"), SV("bdfjqgatlksriohemnpc"), 1, S::npos);
+  test(S("crnklpmegd"), SV(""), 5, 5);
+  test(S("jsbtafedoc"), SV("prqgn"), 5, 5);
+  test(S("qnmodrtkeb"), SV("pejafmnokr"), 5, 6);
+  test(S("cpebqsfmnj"), SV("odnqkgijrhabfmcestlp"), 5, S::npos);
+  test(S("lmofqdhpki"), SV(""), 9, 9);
+  test(S("hnefkqimca"), SV("rtjpa"), 9, S::npos);
+  test(S("drtasbgmfp"), SV("ktsrmnqagd"), 9, 9);
+  test(S("lsaijeqhtr"), SV("rtdhgcisbnmoaqkfpjle"), 9, S::npos);
+  test(S("elgofjmbrq"), SV(""), 10, S::npos);
+  test(S("mjqdgalkpc"), SV("dplqa"), 10, S::npos);
+  test(S("kthqnfcerm"), SV("dkacjoptns"), 10, S::npos);
+  test(S("dfsjhanorc"), SV("hqfimtrgnbekpdcsjalo"), 10, S::npos);
+  test(S("eqsgalomhb"), SV(""), 11, S::npos);
+  test(S("akiteljmoh"), SV("lofbc"), 11, S::npos);
+  test(S("hlbdfreqjo"), SV("astoegbfpn"), 11, S::npos);
+  test(S("taqobhlerg"), SV("pdgreqomsncafklhtibj"), 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), SV(""), 0, 0);
+  test(S("aemtbrgcklhndjisfpoq"), SV("lbtqd"), 0, 0);
+  test(S("pnracgfkjdiholtbqsem"), SV("tboimldpjh"), 0, 1);
+  test(S("dicfltehbsgrmojnpkaq"), SV("slcerthdaiqjfnobgkpm"), 0, S::npos);
+  test(S("jlnkraeodhcspfgbqitm"), SV(""), 1, 1);
+  test(S("lhosrngtmfjikbqpcade"), SV("aqibs"), 1, 1);
+  test(S("rbtaqjhgkneisldpmfoc"), SV("gtfblmqinc"), 1, 3);
+  test(S("gpifsqlrdkbonjtmheca"), SV("mkqpbtdalgniorhfescj"), 1, S::npos);
+  test(S("hdpkobnsalmcfijregtq"), SV(""), 10, 10);
+  test(S("jtlshdgqaiprkbcoenfm"), SV("pblas"), 10, 11);
+  test(S("fkdrbqltsgmcoiphneaj"), SV("arosdhcfme"), 10, 13);
+  test(S("crsplifgtqedjohnabmk"), SV("blkhjeogicatqfnpdmsr"), 10, S::npos);
+  test(S("niptglfbosehkamrdqcj"), SV(""), 19, 19);
+  test(S("copqdhstbingamjfkler"), SV("djkqc"), 19, 19);
+  test(S("mrtaefilpdsgocnhqbjk"), SV("lgokshjtpb"), 19, S::npos);
+  test(S("kojatdhlcmigpbfrqnes"), SV("bqjhtkfepimcnsgrlado"), 19, S::npos);
+  test(S("eaintpchlqsbdgrkjofm"), SV(""), 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), SV("nocfa"), 20, S::npos);
+  test(S("spocfaktqdbiejlhngmr"), SV("bgtajmiedc"), 20, S::npos);
+  test(S("rphmlekgfscndtaobiqj"), SV("lsckfnqgdahejiopbtmr"), 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), SV(""), 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), SV("gfsrt"), 21, S::npos);
+  test(S("latkmisecnorjbfhqpdg"), SV("pfsocbhjtm"), 21, S::npos);
+  test(S("lecfratdjkhnsmqpoigb"), SV("tpflmdnoicjgkberhqsa"), 21, S::npos);
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), SV(""), S::npos);
-    test(S(""), SV("laenf"), S::npos);
-    test(S(""), SV("pqlnkmbdjo"), S::npos);
-    test(S(""), SV("qkamfogpnljdcshbreti"), S::npos);
-    test(S("nhmko"), SV(""), 0);
-    test(S("lahfb"), SV("irkhs"), 0);
-    test(S("gmfhd"), SV("kantesmpgj"), 2);
-    test(S("odaft"), SV("oknlrstdpiqmjbaghcfe"), S::npos);
-    test(S("eolhfgpjqk"), SV(""), 0);
-    test(S("nbatdlmekr"), SV("bnrpe"), 2);
-    test(S("jdmciepkaq"), SV("jtdaefblso"), 2);
-    test(S("hkbgspoflt"), SV("oselktgbcapndfjihrmq"), S::npos);
-    test(S("gprdcokbnjhlsfmtieqa"), SV(""), 0);
-    test(S("qjghlnftcaismkropdeb"), SV("bjaht"), 0);
-    test(S("pnalfrdtkqcmojiesbhg"), SV("hjlcmgpket"), 1);
-    test(S("pniotcfrhqsmgdkjbael"), SV("htaobedqikfplcgjsmrn"), S::npos);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), SV(""), S::npos);
+  test(S(""), SV("laenf"), S::npos);
+  test(S(""), SV("pqlnkmbdjo"), S::npos);
+  test(S(""), SV("qkamfogpnljdcshbreti"), S::npos);
+  test(S("nhmko"), SV(""), 0);
+  test(S("lahfb"), SV("irkhs"), 0);
+  test(S("gmfhd"), SV("kantesmpgj"), 2);
+  test(S("odaft"), SV("oknlrstdpiqmjbaghcfe"), S::npos);
+  test(S("eolhfgpjqk"), SV(""), 0);
+  test(S("nbatdlmekr"), SV("bnrpe"), 2);
+  test(S("jdmciepkaq"), SV("jtdaefblso"), 2);
+  test(S("hkbgspoflt"), SV("oselktgbcapndfjihrmq"), S::npos);
+  test(S("gprdcokbnjhlsfmtieqa"), SV(""), 0);
+  test(S("qjghlnftcaismkropdeb"), SV("bjaht"), 0);
+  test(S("pnalfrdtkqcmojiesbhg"), SV("hjlcmgpket"), 1);
+  test(S("pniotcfrhqsmgdkjbael"), SV("htaobedqikfplcgjsmrn"), S::npos);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -161,8 +155,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/char_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/char_size.pass.cpp
index c1e81318d392e11..a6eafab0423891e 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/char_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/char_size.pass.cpp
@@ -18,23 +18,19 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::value_type c, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(c, pos));
-    assert(s.find_first_of(c, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+test(const S& s, typename S::value_type c, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(c, pos));
+  assert(s.find_first_of(c, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::value_type c, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(c));
-    assert(s.find_first_of(c) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::value_type c, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(c));
+  assert(s.find_first_of(c) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -100,8 +96,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size.pass.cpp
index aff18ad8fe9feda..faf9557a6efd974 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size.pass.cpp
@@ -18,129 +18,123 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str, pos));
-    assert(s.find_first_of(str, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+test(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str, pos));
+  assert(s.find_first_of(str, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str));
-    assert(s.find_first_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const typename S::value_type* str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str));
+  assert(s.find_first_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), "", 0, S::npos);
-    test(S(""), "laenf", 0, S::npos);
-    test(S(""), "pqlnkmbdjo", 0, S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
-    test(S(""), "", 1, S::npos);
-    test(S(""), "bjaht", 1, S::npos);
-    test(S(""), "hjlcmgpket", 1, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
-    test(S("fodgq"), "", 0, S::npos);
-    test(S("qanej"), "dfkap", 0, 1);
-    test(S("clbao"), "ihqrfebgad", 0, 2);
-    test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, 0);
-    test(S("srdfq"), "", 1, S::npos);
-    test(S("oemth"), "ikcrq", 1, S::npos);
-    test(S("cdaih"), "dmajblfhsg", 1, 1);
-    test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, 1);
-    test(S("cshmd"), "", 2, S::npos);
-    test(S("lhcdo"), "oebqi", 2, 4);
-    test(S("qnsoh"), "kojhpmbsfe", 2, 2);
-    test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, 2);
-    test(S("fmtsp"), "", 4, S::npos);
-    test(S("khbpm"), "aobjd", 4, S::npos);
-    test(S("pbsji"), "pcbahntsje", 4, S::npos);
-    test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, 4);
-    test(S("eqmpa"), "", 5, S::npos);
-    test(S("omigs"), "kocgb", 5, S::npos);
-    test(S("onmje"), "fbslrjiqkm", 5, S::npos);
-    test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, S::npos);
-    test(S("schfa"), "", 6, S::npos);
-    test(S("igdsc"), "qngpd", 6, S::npos);
-    test(S("brqgo"), "rodhqklgmb", 6, S::npos);
-    test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, S::npos);
-    test(S("hcjitbfapl"), "", 0, S::npos);
-    test(S("daiprenocl"), "ashjd", 0, 0);
-    test(S("litpcfdghe"), "mgojkldsqh", 0, 0);
-    test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, 0);
-    test(S("qpghtfbaji"), "", 1, S::npos);
-    test(S("gfshlcmdjr"), "nadkh", 1, 3);
-    test(S("nkodajteqp"), "ofdrqmkebl", 1, 1);
-    test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, 1);
-    test(S("crnklpmegd"), "", 5, S::npos);
-    test(S("jsbtafedoc"), "prqgn", 5, S::npos);
-    test(S("qnmodrtkeb"), "pejafmnokr", 5, 5);
-    test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, 5);
-    test(S("lmofqdhpki"), "", 9, S::npos);
-    test(S("hnefkqimca"), "rtjpa", 9, 9);
-    test(S("drtasbgmfp"), "ktsrmnqagd", 9, S::npos);
-    test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, 9);
-    test(S("elgofjmbrq"), "", 10, S::npos);
-    test(S("mjqdgalkpc"), "dplqa", 10, S::npos);
-    test(S("kthqnfcerm"), "dkacjoptns", 10, S::npos);
-    test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, S::npos);
-    test(S("eqsgalomhb"), "", 11, S::npos);
-    test(S("akiteljmoh"), "lofbc", 11, S::npos);
-    test(S("hlbdfreqjo"), "astoegbfpn", 11, S::npos);
-    test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), "", 0, S::npos);
-    test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, 3);
-    test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, 0);
-    test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, 0);
-    test(S("jlnkraeodhcspfgbqitm"), "", 1, S::npos);
-    test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, 3);
-    test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 1);
-    test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, 1);
-    test(S("hdpkobnsalmcfijregtq"), "", 10, S::npos);
-    test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 10);
-    test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 10);
-    test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, 10);
-    test(S("niptglfbosehkamrdqcj"), "", 19, S::npos);
-    test(S("copqdhstbingamjfkler"), "djkqc", 19, S::npos);
-    test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, 19);
-    test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, 19);
-    test(S("eaintpchlqsbdgrkjofm"), "", 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, S::npos);
-    test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, S::npos);
-    test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), "", 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, S::npos);
-    test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, S::npos);
-    test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), "", 0, S::npos);
+  test(S(""), "laenf", 0, S::npos);
+  test(S(""), "pqlnkmbdjo", 0, S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
+  test(S(""), "", 1, S::npos);
+  test(S(""), "bjaht", 1, S::npos);
+  test(S(""), "hjlcmgpket", 1, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
+  test(S("fodgq"), "", 0, S::npos);
+  test(S("qanej"), "dfkap", 0, 1);
+  test(S("clbao"), "ihqrfebgad", 0, 2);
+  test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, 0);
+  test(S("srdfq"), "", 1, S::npos);
+  test(S("oemth"), "ikcrq", 1, S::npos);
+  test(S("cdaih"), "dmajblfhsg", 1, 1);
+  test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, 1);
+  test(S("cshmd"), "", 2, S::npos);
+  test(S("lhcdo"), "oebqi", 2, 4);
+  test(S("qnsoh"), "kojhpmbsfe", 2, 2);
+  test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, 2);
+  test(S("fmtsp"), "", 4, S::npos);
+  test(S("khbpm"), "aobjd", 4, S::npos);
+  test(S("pbsji"), "pcbahntsje", 4, S::npos);
+  test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, 4);
+  test(S("eqmpa"), "", 5, S::npos);
+  test(S("omigs"), "kocgb", 5, S::npos);
+  test(S("onmje"), "fbslrjiqkm", 5, S::npos);
+  test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, S::npos);
+  test(S("schfa"), "", 6, S::npos);
+  test(S("igdsc"), "qngpd", 6, S::npos);
+  test(S("brqgo"), "rodhqklgmb", 6, S::npos);
+  test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, S::npos);
+  test(S("hcjitbfapl"), "", 0, S::npos);
+  test(S("daiprenocl"), "ashjd", 0, 0);
+  test(S("litpcfdghe"), "mgojkldsqh", 0, 0);
+  test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, 0);
+  test(S("qpghtfbaji"), "", 1, S::npos);
+  test(S("gfshlcmdjr"), "nadkh", 1, 3);
+  test(S("nkodajteqp"), "ofdrqmkebl", 1, 1);
+  test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, 1);
+  test(S("crnklpmegd"), "", 5, S::npos);
+  test(S("jsbtafedoc"), "prqgn", 5, S::npos);
+  test(S("qnmodrtkeb"), "pejafmnokr", 5, 5);
+  test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, 5);
+  test(S("lmofqdhpki"), "", 9, S::npos);
+  test(S("hnefkqimca"), "rtjpa", 9, 9);
+  test(S("drtasbgmfp"), "ktsrmnqagd", 9, S::npos);
+  test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, 9);
+  test(S("elgofjmbrq"), "", 10, S::npos);
+  test(S("mjqdgalkpc"), "dplqa", 10, S::npos);
+  test(S("kthqnfcerm"), "dkacjoptns", 10, S::npos);
+  test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, S::npos);
+  test(S("eqsgalomhb"), "", 11, S::npos);
+  test(S("akiteljmoh"), "lofbc", 11, S::npos);
+  test(S("hlbdfreqjo"), "astoegbfpn", 11, S::npos);
+  test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), "", 0, S::npos);
+  test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, 3);
+  test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, 0);
+  test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, 0);
+  test(S("jlnkraeodhcspfgbqitm"), "", 1, S::npos);
+  test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, 3);
+  test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 1);
+  test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, 1);
+  test(S("hdpkobnsalmcfijregtq"), "", 10, S::npos);
+  test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 10);
+  test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 10);
+  test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, 10);
+  test(S("niptglfbosehkamrdqcj"), "", 19, S::npos);
+  test(S("copqdhstbingamjfkler"), "djkqc", 19, S::npos);
+  test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, 19);
+  test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, 19);
+  test(S("eaintpchlqsbdgrkjofm"), "", 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, S::npos);
+  test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, S::npos);
+  test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), "", 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, S::npos);
+  test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, S::npos);
+  test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), "", S::npos);
-    test(S(""), "laenf", S::npos);
-    test(S(""), "pqlnkmbdjo", S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", S::npos);
-    test(S("nhmko"), "", S::npos);
-    test(S("lahfb"), "irkhs", 2);
-    test(S("gmfhd"), "kantesmpgj", 0);
-    test(S("odaft"), "oknlrstdpiqmjbaghcfe", 0);
-    test(S("eolhfgpjqk"), "", S::npos);
-    test(S("nbatdlmekr"), "bnrpe", 0);
-    test(S("jdmciepkaq"), "jtdaefblso", 0);
-    test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", 0);
-    test(S("gprdcokbnjhlsfmtieqa"), "", S::npos);
-    test(S("qjghlnftcaismkropdeb"), "bjaht", 1);
-    test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 0);
-    test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", 0);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), "", S::npos);
+  test(S(""), "laenf", S::npos);
+  test(S(""), "pqlnkmbdjo", S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", S::npos);
+  test(S("nhmko"), "", S::npos);
+  test(S("lahfb"), "irkhs", 2);
+  test(S("gmfhd"), "kantesmpgj", 0);
+  test(S("odaft"), "oknlrstdpiqmjbaghcfe", 0);
+  test(S("eolhfgpjqk"), "", S::npos);
+  test(S("nbatdlmekr"), "bnrpe", 0);
+  test(S("jdmciepkaq"), "jtdaefblso", 0);
+  test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", 0);
+  test(S("gprdcokbnjhlsfmtieqa"), "", S::npos);
+  test(S("qjghlnftcaismkropdeb"), "bjaht", 1);
+  test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 0);
+  test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -160,8 +154,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size_size.pass.cpp
index 816268d357caeb5..71a026b98e0870d 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/pointer_size_size.pass.cpp
@@ -18,353 +18,351 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type n, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str, pos, n));
-    assert(s.find_first_of(str, pos, n) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+test(const S& s,
+     const typename S::value_type* str,
+     typename S::size_type pos,
+     typename S::size_type n,
+     typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str, pos, n));
+  assert(s.find_first_of(str, pos, n) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), "", 0, 0, S::npos);
-    test(S(""), "irkhs", 0, 0, S::npos);
-    test(S(""), "kante", 0, 1, S::npos);
-    test(S(""), "oknlr", 0, 2, S::npos);
-    test(S(""), "pcdro", 0, 4, S::npos);
-    test(S(""), "bnrpe", 0, 5, S::npos);
-    test(S(""), "jtdaefblso", 0, 0, S::npos);
-    test(S(""), "oselktgbca", 0, 1, S::npos);
-    test(S(""), "eqgaplhckj", 0, 5, S::npos);
-    test(S(""), "bjahtcmnlp", 0, 9, S::npos);
-    test(S(""), "hjlcmgpket", 0, 10, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
-    test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
-    test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
-    test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
-    test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
-    test(S(""), "", 1, 0, S::npos);
-    test(S(""), "lbtqd", 1, 0, S::npos);
-    test(S(""), "tboim", 1, 1, S::npos);
-    test(S(""), "slcer", 1, 2, S::npos);
-    test(S(""), "cbjfs", 1, 4, S::npos);
-    test(S(""), "aqibs", 1, 5, S::npos);
-    test(S(""), "gtfblmqinc", 1, 0, S::npos);
-    test(S(""), "mkqpbtdalg", 1, 1, S::npos);
-    test(S(""), "kphatlimcd", 1, 5, S::npos);
-    test(S(""), "pblasqogic", 1, 9, S::npos);
-    test(S(""), "arosdhcfme", 1, 10, S::npos);
-    test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
-    test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
-    test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
-    test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
-    test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
-    test(S("eaint"), "", 0, 0, S::npos);
-    test(S("binja"), "gfsrt", 0, 0, S::npos);
-    test(S("latkm"), "pfsoc", 0, 1, S::npos);
-    test(S("lecfr"), "tpflm", 0, 2, S::npos);
-    test(S("eqkst"), "sgkec", 0, 4, 0);
-    test(S("cdafr"), "romds", 0, 5, 1);
-    test(S("prbhe"), "qhjistlgmr", 0, 0, S::npos);
-    test(S("lbisk"), "pedfirsglo", 0, 1, S::npos);
-    test(S("hrlpd"), "aqcoslgrmk", 0, 5, S::npos);
-    test(S("ehmja"), "dabckmepqj", 0, 9, 0);
-    test(S("mhqgd"), "pqscrjthli", 0, 10, 1);
-    test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, S::npos);
-    test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, S::npos);
-    test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, S::npos);
-    test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, 0);
-    test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, 0);
-    test(S("clrgb"), "", 1, 0, S::npos);
-    test(S("tjmek"), "osmia", 1, 0, S::npos);
-    test(S("bgstp"), "ckonl", 1, 1, S::npos);
-    test(S("hstrk"), "ilcaj", 1, 2, S::npos);
-    test(S("kmspj"), "lasiq", 1, 4, 2);
-    test(S("tjboh"), "kfqmr", 1, 5, S::npos);
-    test(S("ilbcj"), "klnitfaobg", 1, 0, S::npos);
-    test(S("jkngf"), "gjhmdlqikp", 1, 1, 3);
-    test(S("gfcql"), "skbgtahqej", 1, 5, S::npos);
-    test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 2);
-    test(S("bthpg"), "bjgfmnlkio", 1, 10, 4);
-    test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, S::npos);
-    test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, S::npos);
-    test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 1);
-    test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, 1);
-    test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, 1);
-    test(S("ndrhl"), "", 2, 0, S::npos);
-    test(S("mrecp"), "otkgb", 2, 0, S::npos);
-    test(S("qlasf"), "cqsjl", 2, 1, S::npos);
-    test(S("smaqd"), "dpifl", 2, 2, 4);
-    test(S("hjeni"), "oapht", 2, 4, S::npos);
-    test(S("ocmfj"), "cifts", 2, 5, 3);
-    test(S("hmftq"), "nmsckbgalo", 2, 0, S::npos);
-    test(S("fklad"), "tpksqhamle", 2, 1, S::npos);
-    test(S("dirnm"), "tpdrchmkji", 2, 5, 2);
-    test(S("hrgdc"), "ijagfkblst", 2, 9, 2);
-    test(S("ifakg"), "kpocsignjb", 2, 10, 3);
-    test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, S::npos);
-    test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, S::npos);
-    test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 3);
-    test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, 2);
-    test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, 2);
-    test(S("cjgao"), "", 4, 0, S::npos);
-    test(S("kjplq"), "mabns", 4, 0, S::npos);
-    test(S("herni"), "bdnrp", 4, 1, S::npos);
-    test(S("tadrb"), "scidp", 4, 2, S::npos);
-    test(S("pkfeo"), "agbjl", 4, 4, S::npos);
-    test(S("hoser"), "jfmpr", 4, 5, 4);
-    test(S("kgrsp"), "rbpefghsmj", 4, 0, S::npos);
-    test(S("pgejb"), "apsfntdoqc", 4, 1, S::npos);
-    test(S("thlnq"), "ndkjeisgcl", 4, 5, S::npos);
-    test(S("nbmit"), "rnfpqatdeo", 4, 9, 4);
-    test(S("jgmib"), "bntjlqrfik", 4, 10, 4);
-    test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, S::npos);
-    test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, S::npos);
-    test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 4);
-    test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 4);
-    test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, 4);
-    test(S("klopi"), "", 5, 0, S::npos);
-    test(S("dajhn"), "psthd", 5, 0, S::npos);
-    test(S("jbgno"), "rpmjd", 5, 1, S::npos);
-    test(S("hkjae"), "dfsmk", 5, 2, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), "", 0, 0, S::npos);
+  test(S(""), "irkhs", 0, 0, S::npos);
+  test(S(""), "kante", 0, 1, S::npos);
+  test(S(""), "oknlr", 0, 2, S::npos);
+  test(S(""), "pcdro", 0, 4, S::npos);
+  test(S(""), "bnrpe", 0, 5, S::npos);
+  test(S(""), "jtdaefblso", 0, 0, S::npos);
+  test(S(""), "oselktgbca", 0, 1, S::npos);
+  test(S(""), "eqgaplhckj", 0, 5, S::npos);
+  test(S(""), "bjahtcmnlp", 0, 9, S::npos);
+  test(S(""), "hjlcmgpket", 0, 10, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
+  test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
+  test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
+  test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
+  test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
+  test(S(""), "", 1, 0, S::npos);
+  test(S(""), "lbtqd", 1, 0, S::npos);
+  test(S(""), "tboim", 1, 1, S::npos);
+  test(S(""), "slcer", 1, 2, S::npos);
+  test(S(""), "cbjfs", 1, 4, S::npos);
+  test(S(""), "aqibs", 1, 5, S::npos);
+  test(S(""), "gtfblmqinc", 1, 0, S::npos);
+  test(S(""), "mkqpbtdalg", 1, 1, S::npos);
+  test(S(""), "kphatlimcd", 1, 5, S::npos);
+  test(S(""), "pblasqogic", 1, 9, S::npos);
+  test(S(""), "arosdhcfme", 1, 10, S::npos);
+  test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
+  test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
+  test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
+  test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
+  test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
+  test(S("eaint"), "", 0, 0, S::npos);
+  test(S("binja"), "gfsrt", 0, 0, S::npos);
+  test(S("latkm"), "pfsoc", 0, 1, S::npos);
+  test(S("lecfr"), "tpflm", 0, 2, S::npos);
+  test(S("eqkst"), "sgkec", 0, 4, 0);
+  test(S("cdafr"), "romds", 0, 5, 1);
+  test(S("prbhe"), "qhjistlgmr", 0, 0, S::npos);
+  test(S("lbisk"), "pedfirsglo", 0, 1, S::npos);
+  test(S("hrlpd"), "aqcoslgrmk", 0, 5, S::npos);
+  test(S("ehmja"), "dabckmepqj", 0, 9, 0);
+  test(S("mhqgd"), "pqscrjthli", 0, 10, 1);
+  test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, S::npos);
+  test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, S::npos);
+  test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, S::npos);
+  test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, 0);
+  test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, 0);
+  test(S("clrgb"), "", 1, 0, S::npos);
+  test(S("tjmek"), "osmia", 1, 0, S::npos);
+  test(S("bgstp"), "ckonl", 1, 1, S::npos);
+  test(S("hstrk"), "ilcaj", 1, 2, S::npos);
+  test(S("kmspj"), "lasiq", 1, 4, 2);
+  test(S("tjboh"), "kfqmr", 1, 5, S::npos);
+  test(S("ilbcj"), "klnitfaobg", 1, 0, S::npos);
+  test(S("jkngf"), "gjhmdlqikp", 1, 1, 3);
+  test(S("gfcql"), "skbgtahqej", 1, 5, S::npos);
+  test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 2);
+  test(S("bthpg"), "bjgfmnlkio", 1, 10, 4);
+  test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, S::npos);
+  test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, S::npos);
+  test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 1);
+  test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, 1);
+  test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, 1);
+  test(S("ndrhl"), "", 2, 0, S::npos);
+  test(S("mrecp"), "otkgb", 2, 0, S::npos);
+  test(S("qlasf"), "cqsjl", 2, 1, S::npos);
+  test(S("smaqd"), "dpifl", 2, 2, 4);
+  test(S("hjeni"), "oapht", 2, 4, S::npos);
+  test(S("ocmfj"), "cifts", 2, 5, 3);
+  test(S("hmftq"), "nmsckbgalo", 2, 0, S::npos);
+  test(S("fklad"), "tpksqhamle", 2, 1, S::npos);
+  test(S("dirnm"), "tpdrchmkji", 2, 5, 2);
+  test(S("hrgdc"), "ijagfkblst", 2, 9, 2);
+  test(S("ifakg"), "kpocsignjb", 2, 10, 3);
+  test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, S::npos);
+  test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, S::npos);
+  test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 3);
+  test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, 2);
+  test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, 2);
+  test(S("cjgao"), "", 4, 0, S::npos);
+  test(S("kjplq"), "mabns", 4, 0, S::npos);
+  test(S("herni"), "bdnrp", 4, 1, S::npos);
+  test(S("tadrb"), "scidp", 4, 2, S::npos);
+  test(S("pkfeo"), "agbjl", 4, 4, S::npos);
+  test(S("hoser"), "jfmpr", 4, 5, 4);
+  test(S("kgrsp"), "rbpefghsmj", 4, 0, S::npos);
+  test(S("pgejb"), "apsfntdoqc", 4, 1, S::npos);
+  test(S("thlnq"), "ndkjeisgcl", 4, 5, S::npos);
+  test(S("nbmit"), "rnfpqatdeo", 4, 9, 4);
+  test(S("jgmib"), "bntjlqrfik", 4, 10, 4);
+  test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, S::npos);
+  test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, S::npos);
+  test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 4);
+  test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 4);
+  test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, 4);
+  test(S("klopi"), "", 5, 0, S::npos);
+  test(S("dajhn"), "psthd", 5, 0, S::npos);
+  test(S("jbgno"), "rpmjd", 5, 1, S::npos);
+  test(S("hkjae"), "dfsmk", 5, 2, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S("gbhqo"), "skqne", 5, 4, S::npos);
-    test(S("ktdor"), "kipnf", 5, 5, S::npos);
-    test(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos);
-    test(S("egmjk"), "fsmjcdairn", 5, 1, S::npos);
-    test(S("armql"), "pcdgltbrfj", 5, 5, S::npos);
-    test(S("cdhjo"), "aekfctpirg", 5, 9, S::npos);
-    test(S("jcons"), "ledihrsgpf", 5, 10, S::npos);
-    test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos);
-    test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos);
-    test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, S::npos);
-    test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, S::npos);
-    test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos);
-    test(S("gajqn"), "", 6, 0, S::npos);
-    test(S("stedk"), "hrnat", 6, 0, S::npos);
-    test(S("tjkaf"), "gsqdt", 6, 1, S::npos);
-    test(S("dthpe"), "bspkd", 6, 2, S::npos);
-    test(S("klhde"), "ohcmb", 6, 4, S::npos);
-    test(S("bhlki"), "heatr", 6, 5, S::npos);
-    test(S("lqmoh"), "pmblckedfn", 6, 0, S::npos);
-    test(S("mtqin"), "aceqmsrbik", 6, 1, S::npos);
-    test(S("dpqbr"), "lmbtdehjrn", 6, 5, S::npos);
-    test(S("kdhmo"), "teqmcrlgib", 6, 9, S::npos);
-    test(S("jblqp"), "njolbmspac", 6, 10, S::npos);
-    test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos);
-    test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos);
-    test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, S::npos);
-    test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos);
-    test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos);
-    test(S("jnkrfhotgl"), "", 0, 0, S::npos);
-    test(S("dltjfngbko"), "rqegt", 0, 0, S::npos);
-    test(S("bmjlpkiqde"), "dashm", 0, 1, 8);
-    test(S("skrflobnqm"), "jqirk", 0, 2, 8);
-    test(S("jkpldtshrm"), "rckeg", 0, 4, 1);
-    test(S("ghasdbnjqo"), "jscie", 0, 5, 3);
-    test(S("igrkhpbqjt"), "efsphndliq", 0, 0, S::npos);
-    test(S("ikthdgcamf"), "gdicosleja", 0, 1, 5);
-    test(S("pcofgeniam"), "qcpjibosfl", 0, 5, 0);
-    test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 0);
-    test(S("itphbqsker"), "dtablcrseo", 0, 10, 1);
-    test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, S::npos);
-    test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, S::npos);
-    test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 4);
-    test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 0);
-    test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, 0);
-    test(S("shbcqnmoar"), "", 1, 0, S::npos);
-    test(S("bdoshlmfin"), "ontrs", 1, 0, S::npos);
-    test(S("khfrebnsgq"), "pfkna", 1, 1, S::npos);
-    test(S("getcrsaoji"), "ekosa", 1, 2, 1);
-    test(S("fjiknedcpq"), "anqhk", 1, 4, 4);
-    test(S("tkejgnafrm"), "jekca", 1, 5, 1);
-    test(S("jnakolqrde"), "ikemsjgacf", 1, 0, S::npos);
-    test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, S::npos);
-    test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 1);
-    test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 4);
-    test(S("cigfqkated"), "sqcflrgtim", 1, 10, 1);
-    test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, S::npos);
-    test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, S::npos);
-    test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 1);
-    test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 1);
-    test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, 1);
-    test(S("ectnhskflp"), "", 5, 0, S::npos);
-    test(S("fgtianblpq"), "pijag", 5, 0, S::npos);
-    test(S("mfeqklirnh"), "jrckd", 5, 1, S::npos);
-    test(S("astedncjhk"), "qcloh", 5, 2, 6);
-    test(S("fhlqgcajbr"), "thlmp", 5, 4, S::npos);
-    test(S("epfhocmdng"), "qidmo", 5, 5, 6);
-    test(S("apcnsibger"), "lnegpsjqrd", 5, 0, S::npos);
-    test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 5);
-    test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 7);
-    test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 5);
-    test(S("jbhcfposld"), "trfqgmckbe", 5, 10, S::npos);
-    test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, S::npos);
-    test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, S::npos);
-    test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 5);
-    test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 5);
-    test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, 5);
-    test(S("shoiedtcjb"), "", 9, 0, S::npos);
-    test(S("ebcinjgads"), "tqbnh", 9, 0, S::npos);
-    test(S("dqmregkcfl"), "akmle", 9, 1, S::npos);
-    test(S("ngcrieqajf"), "iqfkm", 9, 2, S::npos);
-    test(S("qosmilgnjb"), "tqjsr", 9, 4, S::npos);
-    test(S("ikabsjtdfl"), "jplqg", 9, 5, 9);
-    test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, S::npos);
-    test(S("fdnplotmgh"), "morkglpesn", 9, 1, S::npos);
-    test(S("fdbicojerm"), "dmicerngat", 9, 5, 9);
-    test(S("mbtafndjcq"), "radgeskbtc", 9, 9, S::npos);
-    test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, S::npos);
-    test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, S::npos);
-    test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, S::npos);
-    test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, S::npos);
-    test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 9);
-    test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, 9);
-    test(S("ncjpmaekbs"), "", 10, 0, S::npos);
-    test(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos);
-    test(S("pqfhsgilen"), "qnpor", 10, 1, S::npos);
-    test(S("gqtjsbdckh"), "otdma", 10, 2, S::npos);
-    test(S("cfkqpjlegi"), "efhjg", 10, 4, S::npos);
-    test(S("beanrfodgj"), "odpte", 10, 5, S::npos);
-    test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos);
-    test(S("iomkfthagj"), "oaklidrbqg", 10, 1, S::npos);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S("gbhqo"), "skqne", 5, 4, S::npos);
+  test(S("ktdor"), "kipnf", 5, 5, S::npos);
+  test(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos);
+  test(S("egmjk"), "fsmjcdairn", 5, 1, S::npos);
+  test(S("armql"), "pcdgltbrfj", 5, 5, S::npos);
+  test(S("cdhjo"), "aekfctpirg", 5, 9, S::npos);
+  test(S("jcons"), "ledihrsgpf", 5, 10, S::npos);
+  test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos);
+  test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos);
+  test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, S::npos);
+  test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, S::npos);
+  test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos);
+  test(S("gajqn"), "", 6, 0, S::npos);
+  test(S("stedk"), "hrnat", 6, 0, S::npos);
+  test(S("tjkaf"), "gsqdt", 6, 1, S::npos);
+  test(S("dthpe"), "bspkd", 6, 2, S::npos);
+  test(S("klhde"), "ohcmb", 6, 4, S::npos);
+  test(S("bhlki"), "heatr", 6, 5, S::npos);
+  test(S("lqmoh"), "pmblckedfn", 6, 0, S::npos);
+  test(S("mtqin"), "aceqmsrbik", 6, 1, S::npos);
+  test(S("dpqbr"), "lmbtdehjrn", 6, 5, S::npos);
+  test(S("kdhmo"), "teqmcrlgib", 6, 9, S::npos);
+  test(S("jblqp"), "njolbmspac", 6, 10, S::npos);
+  test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos);
+  test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos);
+  test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, S::npos);
+  test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos);
+  test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos);
+  test(S("jnkrfhotgl"), "", 0, 0, S::npos);
+  test(S("dltjfngbko"), "rqegt", 0, 0, S::npos);
+  test(S("bmjlpkiqde"), "dashm", 0, 1, 8);
+  test(S("skrflobnqm"), "jqirk", 0, 2, 8);
+  test(S("jkpldtshrm"), "rckeg", 0, 4, 1);
+  test(S("ghasdbnjqo"), "jscie", 0, 5, 3);
+  test(S("igrkhpbqjt"), "efsphndliq", 0, 0, S::npos);
+  test(S("ikthdgcamf"), "gdicosleja", 0, 1, 5);
+  test(S("pcofgeniam"), "qcpjibosfl", 0, 5, 0);
+  test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 0);
+  test(S("itphbqsker"), "dtablcrseo", 0, 10, 1);
+  test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, S::npos);
+  test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, S::npos);
+  test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 4);
+  test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 0);
+  test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, 0);
+  test(S("shbcqnmoar"), "", 1, 0, S::npos);
+  test(S("bdoshlmfin"), "ontrs", 1, 0, S::npos);
+  test(S("khfrebnsgq"), "pfkna", 1, 1, S::npos);
+  test(S("getcrsaoji"), "ekosa", 1, 2, 1);
+  test(S("fjiknedcpq"), "anqhk", 1, 4, 4);
+  test(S("tkejgnafrm"), "jekca", 1, 5, 1);
+  test(S("jnakolqrde"), "ikemsjgacf", 1, 0, S::npos);
+  test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, S::npos);
+  test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 1);
+  test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 4);
+  test(S("cigfqkated"), "sqcflrgtim", 1, 10, 1);
+  test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, S::npos);
+  test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, S::npos);
+  test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 1);
+  test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 1);
+  test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, 1);
+  test(S("ectnhskflp"), "", 5, 0, S::npos);
+  test(S("fgtianblpq"), "pijag", 5, 0, S::npos);
+  test(S("mfeqklirnh"), "jrckd", 5, 1, S::npos);
+  test(S("astedncjhk"), "qcloh", 5, 2, 6);
+  test(S("fhlqgcajbr"), "thlmp", 5, 4, S::npos);
+  test(S("epfhocmdng"), "qidmo", 5, 5, 6);
+  test(S("apcnsibger"), "lnegpsjqrd", 5, 0, S::npos);
+  test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 5);
+  test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 7);
+  test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 5);
+  test(S("jbhcfposld"), "trfqgmckbe", 5, 10, S::npos);
+  test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, S::npos);
+  test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, S::npos);
+  test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 5);
+  test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 5);
+  test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, 5);
+  test(S("shoiedtcjb"), "", 9, 0, S::npos);
+  test(S("ebcinjgads"), "tqbnh", 9, 0, S::npos);
+  test(S("dqmregkcfl"), "akmle", 9, 1, S::npos);
+  test(S("ngcrieqajf"), "iqfkm", 9, 2, S::npos);
+  test(S("qosmilgnjb"), "tqjsr", 9, 4, S::npos);
+  test(S("ikabsjtdfl"), "jplqg", 9, 5, 9);
+  test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, S::npos);
+  test(S("fdnplotmgh"), "morkglpesn", 9, 1, S::npos);
+  test(S("fdbicojerm"), "dmicerngat", 9, 5, 9);
+  test(S("mbtafndjcq"), "radgeskbtc", 9, 9, S::npos);
+  test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, S::npos);
+  test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, S::npos);
+  test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, S::npos);
+  test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, S::npos);
+  test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 9);
+  test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, 9);
+  test(S("ncjpmaekbs"), "", 10, 0, S::npos);
+  test(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos);
+  test(S("pqfhsgilen"), "qnpor", 10, 1, S::npos);
+  test(S("gqtjsbdckh"), "otdma", 10, 2, S::npos);
+  test(S("cfkqpjlegi"), "efhjg", 10, 4, S::npos);
+  test(S("beanrfodgj"), "odpte", 10, 5, S::npos);
+  test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos);
+  test(S("iomkfthagj"), "oaklidrbqg", 10, 1, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test2()
-{
-    test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, S::npos);
-    test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, S::npos);
-    test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, S::npos);
-    test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos);
-    test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, S::npos);
-    test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, S::npos);
-    test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, S::npos);
-    test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos);
-    test(S("cqjohampgd"), "", 11, 0, S::npos);
-    test(S("hobitmpsan"), "aocjb", 11, 0, S::npos);
-    test(S("tjehkpsalm"), "jbrnk", 11, 1, S::npos);
-    test(S("ngfbojitcl"), "tqedg", 11, 2, S::npos);
-    test(S("rcfkdbhgjo"), "nqskp", 11, 4, S::npos);
-    test(S("qghptonrea"), "eaqkl", 11, 5, S::npos);
-    test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos);
-    test(S("hlmgabenti"), "lsftgajqpm", 11, 1, S::npos);
-    test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, S::npos);
-    test(S("jqedtkornm"), "shkncmiaqj", 11, 9, S::npos);
-    test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, S::npos);
-    test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos);
-    test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos);
-    test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, S::npos);
-    test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos);
-    test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos);
-    test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, S::npos);
-    test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, S::npos);
-    test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 4);
-    test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 3);
-    test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 3);
-    test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 3);
-    test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, S::npos);
-    test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 19);
-    test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 2);
-    test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 2);
-    test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 2);
-    test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, S::npos);
-    test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 16);
-    test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 1);
-    test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 0);
-    test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, 0);
-    test(S("febhmqtjanokscdirpgl"), "", 1, 0, S::npos);
-    test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, S::npos);
-    test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 6);
-    test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 1);
-    test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 1);
-    test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 6);
-    test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, S::npos);
-    test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 19);
-    test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 4);
-    test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 1);
-    test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 1);
-    test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, S::npos);
-    test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 7);
-    test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 1);
-    test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 1);
-    test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, 1);
-    test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, S::npos);
-    test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, S::npos);
-    test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 12);
-    test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, S::npos);
-    test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 10);
-    test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 15);
-    test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, S::npos);
-    test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, S::npos);
-    test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 11);
-    test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 10);
-    test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 11);
-    test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, S::npos);
-    test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 18);
-    test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 10);
-    test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 10);
-    test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, 10);
-    test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, S::npos);
-    test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, S::npos);
-    test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, S::npos);
-    test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, S::npos);
-    test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, S::npos);
-    test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 19);
-    test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, S::npos);
-    test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, S::npos);
-    test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, S::npos);
-    test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, S::npos);
-    test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, S::npos);
-    test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, S::npos);
-    test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, S::npos);
-    test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 19);
-    test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 19);
-    test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, 19);
-    test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos);
-    test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos);
-    test(S("grkpahljcftesdmonqib"), "odife", 20, 1, S::npos);
-    test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, S::npos);
-    test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, S::npos);
-    test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, S::npos);
-    test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos);
-    test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, S::npos);
-    test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, S::npos);
-    test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, S::npos);
-    test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, S::npos);
-    test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos);
+TEST_CONSTEXPR_CXX20 void test2() {
+  test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, S::npos);
+  test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, S::npos);
+  test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, S::npos);
+  test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos);
+  test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, S::npos);
+  test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, S::npos);
+  test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, S::npos);
+  test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos);
+  test(S("cqjohampgd"), "", 11, 0, S::npos);
+  test(S("hobitmpsan"), "aocjb", 11, 0, S::npos);
+  test(S("tjehkpsalm"), "jbrnk", 11, 1, S::npos);
+  test(S("ngfbojitcl"), "tqedg", 11, 2, S::npos);
+  test(S("rcfkdbhgjo"), "nqskp", 11, 4, S::npos);
+  test(S("qghptonrea"), "eaqkl", 11, 5, S::npos);
+  test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos);
+  test(S("hlmgabenti"), "lsftgajqpm", 11, 1, S::npos);
+  test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, S::npos);
+  test(S("jqedtkornm"), "shkncmiaqj", 11, 9, S::npos);
+  test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, S::npos);
+  test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos);
+  test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos);
+  test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, S::npos);
+  test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos);
+  test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos);
+  test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, S::npos);
+  test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, S::npos);
+  test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 4);
+  test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 3);
+  test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 3);
+  test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 3);
+  test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, S::npos);
+  test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 19);
+  test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 2);
+  test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 2);
+  test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 2);
+  test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, S::npos);
+  test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 16);
+  test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 1);
+  test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 0);
+  test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, 0);
+  test(S("febhmqtjanokscdirpgl"), "", 1, 0, S::npos);
+  test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, S::npos);
+  test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 6);
+  test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 1);
+  test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 1);
+  test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 6);
+  test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, S::npos);
+  test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 19);
+  test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 4);
+  test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 1);
+  test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 1);
+  test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, S::npos);
+  test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 7);
+  test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 1);
+  test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 1);
+  test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, 1);
+  test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, S::npos);
+  test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, S::npos);
+  test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 12);
+  test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, S::npos);
+  test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 10);
+  test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 15);
+  test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, S::npos);
+  test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, S::npos);
+  test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 11);
+  test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 10);
+  test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 11);
+  test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, S::npos);
+  test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 18);
+  test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 10);
+  test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 10);
+  test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, 10);
+  test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, S::npos);
+  test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, S::npos);
+  test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, S::npos);
+  test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, S::npos);
+  test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, S::npos);
+  test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 19);
+  test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, S::npos);
+  test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, S::npos);
+  test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, S::npos);
+  test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, S::npos);
+  test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, S::npos);
+  test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, S::npos);
+  test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, S::npos);
+  test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 19);
+  test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 19);
+  test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, 19);
+  test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos);
+  test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos);
+  test(S("grkpahljcftesdmonqib"), "odife", 20, 1, S::npos);
+  test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, S::npos);
+  test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, S::npos);
+  test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, S::npos);
+  test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos);
+  test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, S::npos);
+  test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, S::npos);
+  test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, S::npos);
+  test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, S::npos);
+  test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test3()
-{
-    test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, S::npos);
-    test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, S::npos);
-    test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, S::npos);
-    test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos);
-    test(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos);
-    test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos);
-    test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, S::npos);
-    test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, S::npos);
-    test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, S::npos);
-    test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, S::npos);
-    test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos);
-    test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, S::npos);
-    test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, S::npos);
-    test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, S::npos);
-    test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, S::npos);
-    test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos);
-    test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, S::npos);
-    test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, S::npos);
-    test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, S::npos);
-    test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos);
+TEST_CONSTEXPR_CXX20 void test3() {
+  test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, S::npos);
+  test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, S::npos);
+  test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, S::npos);
+  test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos);
+  test(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos);
+  test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos);
+  test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, S::npos);
+  test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, S::npos);
+  test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, S::npos);
+  test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, S::npos);
+  test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos);
+  test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, S::npos);
+  test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, S::npos);
+  test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, S::npos);
+  test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, S::npos);
+  test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos);
+  test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, S::npos);
+  test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, S::npos);
+  test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, S::npos);
+  test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -388,8 +386,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_size.pass.cpp
index 68b5afc06a40d8a..f70a0018aa8afdd 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_size.pass.cpp
@@ -17,129 +17,123 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str, pos));
-    assert(s.find_first_of(str, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str, pos));
+  assert(s.find_first_of(str, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str));
-    assert(s.find_first_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str));
+  assert(s.find_first_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), S(""), 0, S::npos);
-    test(S(""), S("laenf"), 0, S::npos);
-    test(S(""), S("pqlnkmbdjo"), 0, S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
-    test(S(""), S(""), 1, S::npos);
-    test(S(""), S("bjaht"), 1, S::npos);
-    test(S(""), S("hjlcmgpket"), 1, S::npos);
-    test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
-    test(S("fodgq"), S(""), 0, S::npos);
-    test(S("qanej"), S("dfkap"), 0, 1);
-    test(S("clbao"), S("ihqrfebgad"), 0, 2);
-    test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, 0);
-    test(S("srdfq"), S(""), 1, S::npos);
-    test(S("oemth"), S("ikcrq"), 1, S::npos);
-    test(S("cdaih"), S("dmajblfhsg"), 1, 1);
-    test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, 1);
-    test(S("cshmd"), S(""), 2, S::npos);
-    test(S("lhcdo"), S("oebqi"), 2, 4);
-    test(S("qnsoh"), S("kojhpmbsfe"), 2, 2);
-    test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, 2);
-    test(S("fmtsp"), S(""), 4, S::npos);
-    test(S("khbpm"), S("aobjd"), 4, S::npos);
-    test(S("pbsji"), S("pcbahntsje"), 4, S::npos);
-    test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, 4);
-    test(S("eqmpa"), S(""), 5, S::npos);
-    test(S("omigs"), S("kocgb"), 5, S::npos);
-    test(S("onmje"), S("fbslrjiqkm"), 5, S::npos);
-    test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, S::npos);
-    test(S("schfa"), S(""), 6, S::npos);
-    test(S("igdsc"), S("qngpd"), 6, S::npos);
-    test(S("brqgo"), S("rodhqklgmb"), 6, S::npos);
-    test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, S::npos);
-    test(S("hcjitbfapl"), S(""), 0, S::npos);
-    test(S("daiprenocl"), S("ashjd"), 0, 0);
-    test(S("litpcfdghe"), S("mgojkldsqh"), 0, 0);
-    test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, 0);
-    test(S("qpghtfbaji"), S(""), 1, S::npos);
-    test(S("gfshlcmdjr"), S("nadkh"), 1, 3);
-    test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 1);
-    test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, 1);
-    test(S("crnklpmegd"), S(""), 5, S::npos);
-    test(S("jsbtafedoc"), S("prqgn"), 5, S::npos);
-    test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 5);
-    test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, 5);
-    test(S("lmofqdhpki"), S(""), 9, S::npos);
-    test(S("hnefkqimca"), S("rtjpa"), 9, 9);
-    test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, S::npos);
-    test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, 9);
-    test(S("elgofjmbrq"), S(""), 10, S::npos);
-    test(S("mjqdgalkpc"), S("dplqa"), 10, S::npos);
-    test(S("kthqnfcerm"), S("dkacjoptns"), 10, S::npos);
-    test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, S::npos);
-    test(S("eqsgalomhb"), S(""), 11, S::npos);
-    test(S("akiteljmoh"), S("lofbc"), 11, S::npos);
-    test(S("hlbdfreqjo"), S("astoegbfpn"), 11, S::npos);
-    test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), S(""), 0, S::npos);
-    test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, 3);
-    test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, 0);
-    test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, 0);
-    test(S("jlnkraeodhcspfgbqitm"), S(""), 1, S::npos);
-    test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, 3);
-    test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 1);
-    test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, 1);
-    test(S("hdpkobnsalmcfijregtq"), S(""), 10, S::npos);
-    test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 10);
-    test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 10);
-    test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, 10);
-    test(S("niptglfbosehkamrdqcj"), S(""), 19, S::npos);
-    test(S("copqdhstbingamjfkler"), S("djkqc"), 19, S::npos);
-    test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, 19);
-    test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, 19);
-    test(S("eaintpchlqsbdgrkjofm"), S(""), 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, S::npos);
-    test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, S::npos);
-    test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, S::npos);
-    test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, S::npos);
-    test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), S(""), 0, S::npos);
+  test(S(""), S("laenf"), 0, S::npos);
+  test(S(""), S("pqlnkmbdjo"), 0, S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
+  test(S(""), S(""), 1, S::npos);
+  test(S(""), S("bjaht"), 1, S::npos);
+  test(S(""), S("hjlcmgpket"), 1, S::npos);
+  test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
+  test(S("fodgq"), S(""), 0, S::npos);
+  test(S("qanej"), S("dfkap"), 0, 1);
+  test(S("clbao"), S("ihqrfebgad"), 0, 2);
+  test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, 0);
+  test(S("srdfq"), S(""), 1, S::npos);
+  test(S("oemth"), S("ikcrq"), 1, S::npos);
+  test(S("cdaih"), S("dmajblfhsg"), 1, 1);
+  test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, 1);
+  test(S("cshmd"), S(""), 2, S::npos);
+  test(S("lhcdo"), S("oebqi"), 2, 4);
+  test(S("qnsoh"), S("kojhpmbsfe"), 2, 2);
+  test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, 2);
+  test(S("fmtsp"), S(""), 4, S::npos);
+  test(S("khbpm"), S("aobjd"), 4, S::npos);
+  test(S("pbsji"), S("pcbahntsje"), 4, S::npos);
+  test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, 4);
+  test(S("eqmpa"), S(""), 5, S::npos);
+  test(S("omigs"), S("kocgb"), 5, S::npos);
+  test(S("onmje"), S("fbslrjiqkm"), 5, S::npos);
+  test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, S::npos);
+  test(S("schfa"), S(""), 6, S::npos);
+  test(S("igdsc"), S("qngpd"), 6, S::npos);
+  test(S("brqgo"), S("rodhqklgmb"), 6, S::npos);
+  test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, S::npos);
+  test(S("hcjitbfapl"), S(""), 0, S::npos);
+  test(S("daiprenocl"), S("ashjd"), 0, 0);
+  test(S("litpcfdghe"), S("mgojkldsqh"), 0, 0);
+  test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, 0);
+  test(S("qpghtfbaji"), S(""), 1, S::npos);
+  test(S("gfshlcmdjr"), S("nadkh"), 1, 3);
+  test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 1);
+  test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, 1);
+  test(S("crnklpmegd"), S(""), 5, S::npos);
+  test(S("jsbtafedoc"), S("prqgn"), 5, S::npos);
+  test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 5);
+  test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, 5);
+  test(S("lmofqdhpki"), S(""), 9, S::npos);
+  test(S("hnefkqimca"), S("rtjpa"), 9, 9);
+  test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, S::npos);
+  test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, 9);
+  test(S("elgofjmbrq"), S(""), 10, S::npos);
+  test(S("mjqdgalkpc"), S("dplqa"), 10, S::npos);
+  test(S("kthqnfcerm"), S("dkacjoptns"), 10, S::npos);
+  test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, S::npos);
+  test(S("eqsgalomhb"), S(""), 11, S::npos);
+  test(S("akiteljmoh"), S("lofbc"), 11, S::npos);
+  test(S("hlbdfreqjo"), S("astoegbfpn"), 11, S::npos);
+  test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), S(""), 0, S::npos);
+  test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, 3);
+  test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, 0);
+  test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, 0);
+  test(S("jlnkraeodhcspfgbqitm"), S(""), 1, S::npos);
+  test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, 3);
+  test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 1);
+  test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, 1);
+  test(S("hdpkobnsalmcfijregtq"), S(""), 10, S::npos);
+  test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 10);
+  test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 10);
+  test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, 10);
+  test(S("niptglfbosehkamrdqcj"), S(""), 19, S::npos);
+  test(S("copqdhstbingamjfkler"), S("djkqc"), 19, S::npos);
+  test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, 19);
+  test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, 19);
+  test(S("eaintpchlqsbdgrkjofm"), S(""), 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, S::npos);
+  test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, S::npos);
+  test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, S::npos);
+  test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, S::npos);
+  test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), S(""), S::npos);
-    test(S(""), S("laenf"), S::npos);
-    test(S(""), S("pqlnkmbdjo"), S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
-    test(S("nhmko"), S(""), S::npos);
-    test(S("lahfb"), S("irkhs"), 2);
-    test(S("gmfhd"), S("kantesmpgj"), 0);
-    test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), 0);
-    test(S("eolhfgpjqk"), S(""), S::npos);
-    test(S("nbatdlmekr"), S("bnrpe"), 0);
-    test(S("jdmciepkaq"), S("jtdaefblso"), 0);
-    test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), 0);
-    test(S("gprdcokbnjhlsfmtieqa"), S(""), S::npos);
-    test(S("qjghlnftcaismkropdeb"), S("bjaht"), 1);
-    test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 0);
-    test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), 0);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), S(""), S::npos);
+  test(S(""), S("laenf"), S::npos);
+  test(S(""), S("pqlnkmbdjo"), S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
+  test(S("nhmko"), S(""), S::npos);
+  test(S("lahfb"), S("irkhs"), 2);
+  test(S("gmfhd"), S("kantesmpgj"), 0);
+  test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), 0);
+  test(S("eolhfgpjqk"), S(""), S::npos);
+  test(S("nbatdlmekr"), S("bnrpe"), 0);
+  test(S("jdmciepkaq"), S("jtdaefblso"), 0);
+  test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), 0);
+  test(S("gprdcokbnjhlsfmtieqa"), S(""), S::npos);
+  test(S("qjghlnftcaismkropdeb"), S("bjaht"), 1);
+  test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 0);
+  test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -166,8 +160,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_view_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_view_size.pass.cpp
index 50c6f7373f2200f..250da8e9f05a9be 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_view_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.first.of/string_view_size.pass.cpp
@@ -17,129 +17,123 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(sv, pos));
-    assert(s.find_first_of(sv, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(sv, pos));
+  assert(s.find_first_of(sv, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(sv));
-    assert(s.find_first_of(sv) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(sv));
+  assert(s.find_first_of(sv) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), SV(""), 0, S::npos);
-    test(S(""), SV("laenf"), 0, S::npos);
-    test(S(""), SV("pqlnkmbdjo"), 0, S::npos);
-    test(S(""), SV("qkamfogpnljdcshbreti"), 0, S::npos);
-    test(S(""), SV(""), 1, S::npos);
-    test(S(""), SV("bjaht"), 1, S::npos);
-    test(S(""), SV("hjlcmgpket"), 1, S::npos);
-    test(S(""), SV("htaobedqikfplcgjsmrn"), 1, S::npos);
-    test(S("fodgq"), SV(""), 0, S::npos);
-    test(S("qanej"), SV("dfkap"), 0, 1);
-    test(S("clbao"), SV("ihqrfebgad"), 0, 2);
-    test(S("mekdn"), SV("ngtjfcalbseiqrphmkdo"), 0, 0);
-    test(S("srdfq"), SV(""), 1, S::npos);
-    test(S("oemth"), SV("ikcrq"), 1, S::npos);
-    test(S("cdaih"), SV("dmajblfhsg"), 1, 1);
-    test(S("qohtk"), SV("oqftjhdmkgsblacenirp"), 1, 1);
-    test(S("cshmd"), SV(""), 2, S::npos);
-    test(S("lhcdo"), SV("oebqi"), 2, 4);
-    test(S("qnsoh"), SV("kojhpmbsfe"), 2, 2);
-    test(S("pkrof"), SV("acbsjqogpltdkhinfrem"), 2, 2);
-    test(S("fmtsp"), SV(""), 4, S::npos);
-    test(S("khbpm"), SV("aobjd"), 4, S::npos);
-    test(S("pbsji"), SV("pcbahntsje"), 4, S::npos);
-    test(S("mprdj"), SV("fhepcrntkoagbmldqijs"), 4, 4);
-    test(S("eqmpa"), SV(""), 5, S::npos);
-    test(S("omigs"), SV("kocgb"), 5, S::npos);
-    test(S("onmje"), SV("fbslrjiqkm"), 5, S::npos);
-    test(S("oqmrj"), SV("jeidpcmalhfnqbgtrsko"), 5, S::npos);
-    test(S("schfa"), SV(""), 6, S::npos);
-    test(S("igdsc"), SV("qngpd"), 6, S::npos);
-    test(S("brqgo"), SV("rodhqklgmb"), 6, S::npos);
-    test(S("tnrph"), SV("thdjgafrlbkoiqcspmne"), 6, S::npos);
-    test(S("hcjitbfapl"), SV(""), 0, S::npos);
-    test(S("daiprenocl"), SV("ashjd"), 0, 0);
-    test(S("litpcfdghe"), SV("mgojkldsqh"), 0, 0);
-    test(S("aidjksrolc"), SV("imqnaghkfrdtlopbjesc"), 0, 0);
-    test(S("qpghtfbaji"), SV(""), 1, S::npos);
-    test(S("gfshlcmdjr"), SV("nadkh"), 1, 3);
-    test(S("nkodajteqp"), SV("ofdrqmkebl"), 1, 1);
-    test(S("gbmetiprqd"), SV("bdfjqgatlksriohemnpc"), 1, 1);
-    test(S("crnklpmegd"), SV(""), 5, S::npos);
-    test(S("jsbtafedoc"), SV("prqgn"), 5, S::npos);
-    test(S("qnmodrtkeb"), SV("pejafmnokr"), 5, 5);
-    test(S("cpebqsfmnj"), SV("odnqkgijrhabfmcestlp"), 5, 5);
-    test(S("lmofqdhpki"), SV(""), 9, S::npos);
-    test(S("hnefkqimca"), SV("rtjpa"), 9, 9);
-    test(S("drtasbgmfp"), SV("ktsrmnqagd"), 9, S::npos);
-    test(S("lsaijeqhtr"), SV("rtdhgcisbnmoaqkfpjle"), 9, 9);
-    test(S("elgofjmbrq"), SV(""), 10, S::npos);
-    test(S("mjqdgalkpc"), SV("dplqa"), 10, S::npos);
-    test(S("kthqnfcerm"), SV("dkacjoptns"), 10, S::npos);
-    test(S("dfsjhanorc"), SV("hqfimtrgnbekpdcsjalo"), 10, S::npos);
-    test(S("eqsgalomhb"), SV(""), 11, S::npos);
-    test(S("akiteljmoh"), SV("lofbc"), 11, S::npos);
-    test(S("hlbdfreqjo"), SV("astoegbfpn"), 11, S::npos);
-    test(S("taqobhlerg"), SV("pdgreqomsncafklhtibj"), 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), SV(""), 0, S::npos);
-    test(S("aemtbrgcklhndjisfpoq"), SV("lbtqd"), 0, 3);
-    test(S("pnracgfkjdiholtbqsem"), SV("tboimldpjh"), 0, 0);
-    test(S("dicfltehbsgrmojnpkaq"), SV("slcerthdaiqjfnobgkpm"), 0, 0);
-    test(S("jlnkraeodhcspfgbqitm"), SV(""), 1, S::npos);
-    test(S("lhosrngtmfjikbqpcade"), SV("aqibs"), 1, 3);
-    test(S("rbtaqjhgkneisldpmfoc"), SV("gtfblmqinc"), 1, 1);
-    test(S("gpifsqlrdkbonjtmheca"), SV("mkqpbtdalgniorhfescj"), 1, 1);
-    test(S("hdpkobnsalmcfijregtq"), SV(""), 10, S::npos);
-    test(S("jtlshdgqaiprkbcoenfm"), SV("pblas"), 10, 10);
-    test(S("fkdrbqltsgmcoiphneaj"), SV("arosdhcfme"), 10, 10);
-    test(S("crsplifgtqedjohnabmk"), SV("blkhjeogicatqfnpdmsr"), 10, 10);
-    test(S("niptglfbosehkamrdqcj"), SV(""), 19, S::npos);
-    test(S("copqdhstbingamjfkler"), SV("djkqc"), 19, S::npos);
-    test(S("mrtaefilpdsgocnhqbjk"), SV("lgokshjtpb"), 19, 19);
-    test(S("kojatdhlcmigpbfrqnes"), SV("bqjhtkfepimcnsgrlado"), 19, 19);
-    test(S("eaintpchlqsbdgrkjofm"), SV(""), 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), SV("nocfa"), 20, S::npos);
-    test(S("spocfaktqdbiejlhngmr"), SV("bgtajmiedc"), 20, S::npos);
-    test(S("rphmlekgfscndtaobiqj"), SV("lsckfnqgdahejiopbtmr"), 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), SV(""), 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), SV("gfsrt"), 21, S::npos);
-    test(S("latkmisecnorjbfhqpdg"), SV("pfsocbhjtm"), 21, S::npos);
-    test(S("lecfratdjkhnsmqpoigb"), SV("tpflmdnoicjgkberhqsa"), 21, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), SV(""), 0, S::npos);
+  test(S(""), SV("laenf"), 0, S::npos);
+  test(S(""), SV("pqlnkmbdjo"), 0, S::npos);
+  test(S(""), SV("qkamfogpnljdcshbreti"), 0, S::npos);
+  test(S(""), SV(""), 1, S::npos);
+  test(S(""), SV("bjaht"), 1, S::npos);
+  test(S(""), SV("hjlcmgpket"), 1, S::npos);
+  test(S(""), SV("htaobedqikfplcgjsmrn"), 1, S::npos);
+  test(S("fodgq"), SV(""), 0, S::npos);
+  test(S("qanej"), SV("dfkap"), 0, 1);
+  test(S("clbao"), SV("ihqrfebgad"), 0, 2);
+  test(S("mekdn"), SV("ngtjfcalbseiqrphmkdo"), 0, 0);
+  test(S("srdfq"), SV(""), 1, S::npos);
+  test(S("oemth"), SV("ikcrq"), 1, S::npos);
+  test(S("cdaih"), SV("dmajblfhsg"), 1, 1);
+  test(S("qohtk"), SV("oqftjhdmkgsblacenirp"), 1, 1);
+  test(S("cshmd"), SV(""), 2, S::npos);
+  test(S("lhcdo"), SV("oebqi"), 2, 4);
+  test(S("qnsoh"), SV("kojhpmbsfe"), 2, 2);
+  test(S("pkrof"), SV("acbsjqogpltdkhinfrem"), 2, 2);
+  test(S("fmtsp"), SV(""), 4, S::npos);
+  test(S("khbpm"), SV("aobjd"), 4, S::npos);
+  test(S("pbsji"), SV("pcbahntsje"), 4, S::npos);
+  test(S("mprdj"), SV("fhepcrntkoagbmldqijs"), 4, 4);
+  test(S("eqmpa"), SV(""), 5, S::npos);
+  test(S("omigs"), SV("kocgb"), 5, S::npos);
+  test(S("onmje"), SV("fbslrjiqkm"), 5, S::npos);
+  test(S("oqmrj"), SV("jeidpcmalhfnqbgtrsko"), 5, S::npos);
+  test(S("schfa"), SV(""), 6, S::npos);
+  test(S("igdsc"), SV("qngpd"), 6, S::npos);
+  test(S("brqgo"), SV("rodhqklgmb"), 6, S::npos);
+  test(S("tnrph"), SV("thdjgafrlbkoiqcspmne"), 6, S::npos);
+  test(S("hcjitbfapl"), SV(""), 0, S::npos);
+  test(S("daiprenocl"), SV("ashjd"), 0, 0);
+  test(S("litpcfdghe"), SV("mgojkldsqh"), 0, 0);
+  test(S("aidjksrolc"), SV("imqnaghkfrdtlopbjesc"), 0, 0);
+  test(S("qpghtfbaji"), SV(""), 1, S::npos);
+  test(S("gfshlcmdjr"), SV("nadkh"), 1, 3);
+  test(S("nkodajteqp"), SV("ofdrqmkebl"), 1, 1);
+  test(S("gbmetiprqd"), SV("bdfjqgatlksriohemnpc"), 1, 1);
+  test(S("crnklpmegd"), SV(""), 5, S::npos);
+  test(S("jsbtafedoc"), SV("prqgn"), 5, S::npos);
+  test(S("qnmodrtkeb"), SV("pejafmnokr"), 5, 5);
+  test(S("cpebqsfmnj"), SV("odnqkgijrhabfmcestlp"), 5, 5);
+  test(S("lmofqdhpki"), SV(""), 9, S::npos);
+  test(S("hnefkqimca"), SV("rtjpa"), 9, 9);
+  test(S("drtasbgmfp"), SV("ktsrmnqagd"), 9, S::npos);
+  test(S("lsaijeqhtr"), SV("rtdhgcisbnmoaqkfpjle"), 9, 9);
+  test(S("elgofjmbrq"), SV(""), 10, S::npos);
+  test(S("mjqdgalkpc"), SV("dplqa"), 10, S::npos);
+  test(S("kthqnfcerm"), SV("dkacjoptns"), 10, S::npos);
+  test(S("dfsjhanorc"), SV("hqfimtrgnbekpdcsjalo"), 10, S::npos);
+  test(S("eqsgalomhb"), SV(""), 11, S::npos);
+  test(S("akiteljmoh"), SV("lofbc"), 11, S::npos);
+  test(S("hlbdfreqjo"), SV("astoegbfpn"), 11, S::npos);
+  test(S("taqobhlerg"), SV("pdgreqomsncafklhtibj"), 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), SV(""), 0, S::npos);
+  test(S("aemtbrgcklhndjisfpoq"), SV("lbtqd"), 0, 3);
+  test(S("pnracgfkjdiholtbqsem"), SV("tboimldpjh"), 0, 0);
+  test(S("dicfltehbsgrmojnpkaq"), SV("slcerthdaiqjfnobgkpm"), 0, 0);
+  test(S("jlnkraeodhcspfgbqitm"), SV(""), 1, S::npos);
+  test(S("lhosrngtmfjikbqpcade"), SV("aqibs"), 1, 3);
+  test(S("rbtaqjhgkneisldpmfoc"), SV("gtfblmqinc"), 1, 1);
+  test(S("gpifsqlrdkbonjtmheca"), SV("mkqpbtdalgniorhfescj"), 1, 1);
+  test(S("hdpkobnsalmcfijregtq"), SV(""), 10, S::npos);
+  test(S("jtlshdgqaiprkbcoenfm"), SV("pblas"), 10, 10);
+  test(S("fkdrbqltsgmcoiphneaj"), SV("arosdhcfme"), 10, 10);
+  test(S("crsplifgtqedjohnabmk"), SV("blkhjeogicatqfnpdmsr"), 10, 10);
+  test(S("niptglfbosehkamrdqcj"), SV(""), 19, S::npos);
+  test(S("copqdhstbingamjfkler"), SV("djkqc"), 19, S::npos);
+  test(S("mrtaefilpdsgocnhqbjk"), SV("lgokshjtpb"), 19, 19);
+  test(S("kojatdhlcmigpbfrqnes"), SV("bqjhtkfepimcnsgrlado"), 19, 19);
+  test(S("eaintpchlqsbdgrkjofm"), SV(""), 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), SV("nocfa"), 20, S::npos);
+  test(S("spocfaktqdbiejlhngmr"), SV("bgtajmiedc"), 20, S::npos);
+  test(S("rphmlekgfscndtaobiqj"), SV("lsckfnqgdahejiopbtmr"), 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), SV(""), 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), SV("gfsrt"), 21, S::npos);
+  test(S("latkmisecnorjbfhqpdg"), SV("pfsocbhjtm"), 21, S::npos);
+  test(S("lecfratdjkhnsmqpoigb"), SV("tpflmdnoicjgkberhqsa"), 21, S::npos);
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), SV(""), S::npos);
-    test(S(""), SV("laenf"), S::npos);
-    test(S(""), SV("pqlnkmbdjo"), S::npos);
-    test(S(""), SV("qkamfogpnljdcshbreti"), S::npos);
-    test(S("nhmko"), SV(""), S::npos);
-    test(S("lahfb"), SV("irkhs"), 2);
-    test(S("gmfhd"), SV("kantesmpgj"), 0);
-    test(S("odaft"), SV("oknlrstdpiqmjbaghcfe"), 0);
-    test(S("eolhfgpjqk"), SV(""), S::npos);
-    test(S("nbatdlmekr"), SV("bnrpe"), 0);
-    test(S("jdmciepkaq"), SV("jtdaefblso"), 0);
-    test(S("hkbgspoflt"), SV("oselktgbcapndfjihrmq"), 0);
-    test(S("gprdcokbnjhlsfmtieqa"), SV(""), S::npos);
-    test(S("qjghlnftcaismkropdeb"), SV("bjaht"), 1);
-    test(S("pnalfrdtkqcmojiesbhg"), SV("hjlcmgpket"), 0);
-    test(S("pniotcfrhqsmgdkjbael"), SV("htaobedqikfplcgjsmrn"), 0);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), SV(""), S::npos);
+  test(S(""), SV("laenf"), S::npos);
+  test(S(""), SV("pqlnkmbdjo"), S::npos);
+  test(S(""), SV("qkamfogpnljdcshbreti"), S::npos);
+  test(S("nhmko"), SV(""), S::npos);
+  test(S("lahfb"), SV("irkhs"), 2);
+  test(S("gmfhd"), SV("kantesmpgj"), 0);
+  test(S("odaft"), SV("oknlrstdpiqmjbaghcfe"), 0);
+  test(S("eolhfgpjqk"), SV(""), S::npos);
+  test(S("nbatdlmekr"), SV("bnrpe"), 0);
+  test(S("jdmciepkaq"), SV("jtdaefblso"), 0);
+  test(S("hkbgspoflt"), SV("oselktgbcapndfjihrmq"), 0);
+  test(S("gprdcokbnjhlsfmtieqa"), SV(""), S::npos);
+  test(S("qjghlnftcaismkropdeb"), SV("bjaht"), 1);
+  test(S("pnalfrdtkqcmojiesbhg"), SV("hjlcmgpket"), 0);
+  test(S("pniotcfrhqsmgdkjbael"), SV("htaobedqikfplcgjsmrn"), 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -161,8 +155,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/char_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/char_size.pass.cpp
index 8cd63887b856f77..e4cbe382d7808c1 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/char_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/char_size.pass.cpp
@@ -18,23 +18,19 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::value_type c, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(c, pos));
-    assert(s.find_last_not_of(c, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+test(const S& s, typename S::value_type c, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(c, pos));
+  assert(s.find_last_not_of(c, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::value_type c, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(c));
-    assert(s.find_last_not_of(c) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::value_type c, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(c));
+  assert(s.find_last_not_of(c) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -100,8 +96,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size.pass.cpp
index 0f4f75ef47a87cb..a2bdce68f307304 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size.pass.cpp
@@ -18,129 +18,123 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str, pos));
-    assert(s.find_last_not_of(str, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+test(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str, pos));
+  assert(s.find_last_not_of(str, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str));
-    assert(s.find_last_not_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const typename S::value_type* str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str));
+  assert(s.find_last_not_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), "", 0, S::npos);
-    test(S(""), "laenf", 0, S::npos);
-    test(S(""), "pqlnkmbdjo", 0, S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
-    test(S(""), "", 1, S::npos);
-    test(S(""), "bjaht", 1, S::npos);
-    test(S(""), "hjlcmgpket", 1, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
-    test(S("fodgq"), "", 0, 0);
-    test(S("qanej"), "dfkap", 0, 0);
-    test(S("clbao"), "ihqrfebgad", 0, 0);
-    test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, S::npos);
-    test(S("srdfq"), "", 1, 1);
-    test(S("oemth"), "ikcrq", 1, 1);
-    test(S("cdaih"), "dmajblfhsg", 1, 0);
-    test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, S::npos);
-    test(S("cshmd"), "", 2, 2);
-    test(S("lhcdo"), "oebqi", 2, 2);
-    test(S("qnsoh"), "kojhpmbsfe", 2, 1);
-    test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, S::npos);
-    test(S("fmtsp"), "", 4, 4);
-    test(S("khbpm"), "aobjd", 4, 4);
-    test(S("pbsji"), "pcbahntsje", 4, 4);
-    test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, S::npos);
-    test(S("eqmpa"), "", 5, 4);
-    test(S("omigs"), "kocgb", 5, 4);
-    test(S("onmje"), "fbslrjiqkm", 5, 4);
-    test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, S::npos);
-    test(S("schfa"), "", 6, 4);
-    test(S("igdsc"), "qngpd", 6, 4);
-    test(S("brqgo"), "rodhqklgmb", 6, S::npos);
-    test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, S::npos);
-    test(S("hcjitbfapl"), "", 0, 0);
-    test(S("daiprenocl"), "ashjd", 0, S::npos);
-    test(S("litpcfdghe"), "mgojkldsqh", 0, S::npos);
-    test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, S::npos);
-    test(S("qpghtfbaji"), "", 1, 1);
-    test(S("gfshlcmdjr"), "nadkh", 1, 1);
-    test(S("nkodajteqp"), "ofdrqmkebl", 1, 0);
-    test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, S::npos);
-    test(S("crnklpmegd"), "", 5, 5);
-    test(S("jsbtafedoc"), "prqgn", 5, 5);
-    test(S("qnmodrtkeb"), "pejafmnokr", 5, 4);
-    test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, S::npos);
-    test(S("lmofqdhpki"), "", 9, 9);
-    test(S("hnefkqimca"), "rtjpa", 9, 8);
-    test(S("drtasbgmfp"), "ktsrmnqagd", 9, 9);
-    test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, S::npos);
-    test(S("elgofjmbrq"), "", 10, 9);
-    test(S("mjqdgalkpc"), "dplqa", 10, 9);
-    test(S("kthqnfcerm"), "dkacjoptns", 10, 9);
-    test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, S::npos);
-    test(S("eqsgalomhb"), "", 11, 9);
-    test(S("akiteljmoh"), "lofbc", 11, 9);
-    test(S("hlbdfreqjo"), "astoegbfpn", 11, 8);
-    test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), "", 0, 0);
-    test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, 0);
-    test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, S::npos);
-    test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, S::npos);
-    test(S("jlnkraeodhcspfgbqitm"), "", 1, 1);
-    test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, 1);
-    test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 0);
-    test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, S::npos);
-    test(S("hdpkobnsalmcfijregtq"), "", 10, 10);
-    test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 9);
-    test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 9);
-    test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, S::npos);
-    test(S("niptglfbosehkamrdqcj"), "", 19, 19);
-    test(S("copqdhstbingamjfkler"), "djkqc", 19, 19);
-    test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, 16);
-    test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, S::npos);
-    test(S("eaintpchlqsbdgrkjofm"), "", 20, 19);
-    test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, 18);
-    test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, 19);
-    test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), "", 21, 19);
-    test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, 19);
-    test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, 19);
-    test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), "", 0, S::npos);
+  test(S(""), "laenf", 0, S::npos);
+  test(S(""), "pqlnkmbdjo", 0, S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
+  test(S(""), "", 1, S::npos);
+  test(S(""), "bjaht", 1, S::npos);
+  test(S(""), "hjlcmgpket", 1, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
+  test(S("fodgq"), "", 0, 0);
+  test(S("qanej"), "dfkap", 0, 0);
+  test(S("clbao"), "ihqrfebgad", 0, 0);
+  test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, S::npos);
+  test(S("srdfq"), "", 1, 1);
+  test(S("oemth"), "ikcrq", 1, 1);
+  test(S("cdaih"), "dmajblfhsg", 1, 0);
+  test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, S::npos);
+  test(S("cshmd"), "", 2, 2);
+  test(S("lhcdo"), "oebqi", 2, 2);
+  test(S("qnsoh"), "kojhpmbsfe", 2, 1);
+  test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, S::npos);
+  test(S("fmtsp"), "", 4, 4);
+  test(S("khbpm"), "aobjd", 4, 4);
+  test(S("pbsji"), "pcbahntsje", 4, 4);
+  test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, S::npos);
+  test(S("eqmpa"), "", 5, 4);
+  test(S("omigs"), "kocgb", 5, 4);
+  test(S("onmje"), "fbslrjiqkm", 5, 4);
+  test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, S::npos);
+  test(S("schfa"), "", 6, 4);
+  test(S("igdsc"), "qngpd", 6, 4);
+  test(S("brqgo"), "rodhqklgmb", 6, S::npos);
+  test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, S::npos);
+  test(S("hcjitbfapl"), "", 0, 0);
+  test(S("daiprenocl"), "ashjd", 0, S::npos);
+  test(S("litpcfdghe"), "mgojkldsqh", 0, S::npos);
+  test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, S::npos);
+  test(S("qpghtfbaji"), "", 1, 1);
+  test(S("gfshlcmdjr"), "nadkh", 1, 1);
+  test(S("nkodajteqp"), "ofdrqmkebl", 1, 0);
+  test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, S::npos);
+  test(S("crnklpmegd"), "", 5, 5);
+  test(S("jsbtafedoc"), "prqgn", 5, 5);
+  test(S("qnmodrtkeb"), "pejafmnokr", 5, 4);
+  test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, S::npos);
+  test(S("lmofqdhpki"), "", 9, 9);
+  test(S("hnefkqimca"), "rtjpa", 9, 8);
+  test(S("drtasbgmfp"), "ktsrmnqagd", 9, 9);
+  test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, S::npos);
+  test(S("elgofjmbrq"), "", 10, 9);
+  test(S("mjqdgalkpc"), "dplqa", 10, 9);
+  test(S("kthqnfcerm"), "dkacjoptns", 10, 9);
+  test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, S::npos);
+  test(S("eqsgalomhb"), "", 11, 9);
+  test(S("akiteljmoh"), "lofbc", 11, 9);
+  test(S("hlbdfreqjo"), "astoegbfpn", 11, 8);
+  test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), "", 0, 0);
+  test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, 0);
+  test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, S::npos);
+  test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, S::npos);
+  test(S("jlnkraeodhcspfgbqitm"), "", 1, 1);
+  test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, 1);
+  test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 0);
+  test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, S::npos);
+  test(S("hdpkobnsalmcfijregtq"), "", 10, 10);
+  test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 9);
+  test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 9);
+  test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, S::npos);
+  test(S("niptglfbosehkamrdqcj"), "", 19, 19);
+  test(S("copqdhstbingamjfkler"), "djkqc", 19, 19);
+  test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, 16);
+  test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, S::npos);
+  test(S("eaintpchlqsbdgrkjofm"), "", 20, 19);
+  test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, 18);
+  test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, 19);
+  test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), "", 21, 19);
+  test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, 19);
+  test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, 19);
+  test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), "", S::npos);
-    test(S(""), "laenf", S::npos);
-    test(S(""), "pqlnkmbdjo", S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", S::npos);
-    test(S("nhmko"), "", 4);
-    test(S("lahfb"), "irkhs", 4);
-    test(S("gmfhd"), "kantesmpgj", 4);
-    test(S("odaft"), "oknlrstdpiqmjbaghcfe", S::npos);
-    test(S("eolhfgpjqk"), "", 9);
-    test(S("nbatdlmekr"), "bnrpe", 8);
-    test(S("jdmciepkaq"), "jtdaefblso", 9);
-    test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", S::npos);
-    test(S("gprdcokbnjhlsfmtieqa"), "", 19);
-    test(S("qjghlnftcaismkropdeb"), "bjaht", 18);
-    test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 17);
-    test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", S::npos);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), "", S::npos);
+  test(S(""), "laenf", S::npos);
+  test(S(""), "pqlnkmbdjo", S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", S::npos);
+  test(S("nhmko"), "", 4);
+  test(S("lahfb"), "irkhs", 4);
+  test(S("gmfhd"), "kantesmpgj", 4);
+  test(S("odaft"), "oknlrstdpiqmjbaghcfe", S::npos);
+  test(S("eolhfgpjqk"), "", 9);
+  test(S("nbatdlmekr"), "bnrpe", 8);
+  test(S("jdmciepkaq"), "jtdaefblso", 9);
+  test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", S::npos);
+  test(S("gprdcokbnjhlsfmtieqa"), "", 19);
+  test(S("qjghlnftcaismkropdeb"), "bjaht", 18);
+  test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 17);
+  test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", S::npos);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -160,8 +154,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size_size.pass.cpp
index eb3d825c06db42f..aa3204f9deb61d5 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/pointer_size_size.pass.cpp
@@ -18,353 +18,351 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type n, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str, pos, n));
-    assert(s.find_last_not_of(str, pos, n) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+test(const S& s,
+     const typename S::value_type* str,
+     typename S::size_type pos,
+     typename S::size_type n,
+     typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str, pos, n));
+  assert(s.find_last_not_of(str, pos, n) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), "", 0, 0, S::npos);
-    test(S(""), "irkhs", 0, 0, S::npos);
-    test(S(""), "kante", 0, 1, S::npos);
-    test(S(""), "oknlr", 0, 2, S::npos);
-    test(S(""), "pcdro", 0, 4, S::npos);
-    test(S(""), "bnrpe", 0, 5, S::npos);
-    test(S(""), "jtdaefblso", 0, 0, S::npos);
-    test(S(""), "oselktgbca", 0, 1, S::npos);
-    test(S(""), "eqgaplhckj", 0, 5, S::npos);
-    test(S(""), "bjahtcmnlp", 0, 9, S::npos);
-    test(S(""), "hjlcmgpket", 0, 10, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
-    test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
-    test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
-    test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
-    test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
-    test(S(""), "", 1, 0, S::npos);
-    test(S(""), "lbtqd", 1, 0, S::npos);
-    test(S(""), "tboim", 1, 1, S::npos);
-    test(S(""), "slcer", 1, 2, S::npos);
-    test(S(""), "cbjfs", 1, 4, S::npos);
-    test(S(""), "aqibs", 1, 5, S::npos);
-    test(S(""), "gtfblmqinc", 1, 0, S::npos);
-    test(S(""), "mkqpbtdalg", 1, 1, S::npos);
-    test(S(""), "kphatlimcd", 1, 5, S::npos);
-    test(S(""), "pblasqogic", 1, 9, S::npos);
-    test(S(""), "arosdhcfme", 1, 10, S::npos);
-    test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
-    test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
-    test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
-    test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
-    test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
-    test(S("eaint"), "", 0, 0, 0);
-    test(S("binja"), "gfsrt", 0, 0, 0);
-    test(S("latkm"), "pfsoc", 0, 1, 0);
-    test(S("lecfr"), "tpflm", 0, 2, 0);
-    test(S("eqkst"), "sgkec", 0, 4, S::npos);
-    test(S("cdafr"), "romds", 0, 5, 0);
-    test(S("prbhe"), "qhjistlgmr", 0, 0, 0);
-    test(S("lbisk"), "pedfirsglo", 0, 1, 0);
-    test(S("hrlpd"), "aqcoslgrmk", 0, 5, 0);
-    test(S("ehmja"), "dabckmepqj", 0, 9, S::npos);
-    test(S("mhqgd"), "pqscrjthli", 0, 10, 0);
-    test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, 0);
-    test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, 0);
-    test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, 0);
-    test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, S::npos);
-    test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, S::npos);
-    test(S("clrgb"), "", 1, 0, 1);
-    test(S("tjmek"), "osmia", 1, 0, 1);
-    test(S("bgstp"), "ckonl", 1, 1, 1);
-    test(S("hstrk"), "ilcaj", 1, 2, 1);
-    test(S("kmspj"), "lasiq", 1, 4, 1);
-    test(S("tjboh"), "kfqmr", 1, 5, 1);
-    test(S("ilbcj"), "klnitfaobg", 1, 0, 1);
-    test(S("jkngf"), "gjhmdlqikp", 1, 1, 1);
-    test(S("gfcql"), "skbgtahqej", 1, 5, 1);
-    test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 1);
-    test(S("bthpg"), "bjgfmnlkio", 1, 10, 1);
-    test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, 1);
-    test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, 1);
-    test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, S::npos);
-    test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, S::npos);
-    test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, S::npos);
-    test(S("ndrhl"), "", 2, 0, 2);
-    test(S("mrecp"), "otkgb", 2, 0, 2);
-    test(S("qlasf"), "cqsjl", 2, 1, 2);
-    test(S("smaqd"), "dpifl", 2, 2, 2);
-    test(S("hjeni"), "oapht", 2, 4, 2);
-    test(S("ocmfj"), "cifts", 2, 5, 2);
-    test(S("hmftq"), "nmsckbgalo", 2, 0, 2);
-    test(S("fklad"), "tpksqhamle", 2, 1, 2);
-    test(S("dirnm"), "tpdrchmkji", 2, 5, 1);
-    test(S("hrgdc"), "ijagfkblst", 2, 9, 1);
-    test(S("ifakg"), "kpocsignjb", 2, 10, 2);
-    test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, 2);
-    test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, 2);
-    test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 2);
-    test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, S::npos);
-    test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, S::npos);
-    test(S("cjgao"), "", 4, 0, 4);
-    test(S("kjplq"), "mabns", 4, 0, 4);
-    test(S("herni"), "bdnrp", 4, 1, 4);
-    test(S("tadrb"), "scidp", 4, 2, 4);
-    test(S("pkfeo"), "agbjl", 4, 4, 4);
-    test(S("hoser"), "jfmpr", 4, 5, 3);
-    test(S("kgrsp"), "rbpefghsmj", 4, 0, 4);
-    test(S("pgejb"), "apsfntdoqc", 4, 1, 4);
-    test(S("thlnq"), "ndkjeisgcl", 4, 5, 4);
-    test(S("nbmit"), "rnfpqatdeo", 4, 9, 3);
-    test(S("jgmib"), "bntjlqrfik", 4, 10, 2);
-    test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, 4);
-    test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, 4);
-    test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 3);
-    test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 2);
-    test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, S::npos);
-    test(S("klopi"), "", 5, 0, 4);
-    test(S("dajhn"), "psthd", 5, 0, 4);
-    test(S("jbgno"), "rpmjd", 5, 1, 4);
-    test(S("hkjae"), "dfsmk", 5, 2, 4);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), "", 0, 0, S::npos);
+  test(S(""), "irkhs", 0, 0, S::npos);
+  test(S(""), "kante", 0, 1, S::npos);
+  test(S(""), "oknlr", 0, 2, S::npos);
+  test(S(""), "pcdro", 0, 4, S::npos);
+  test(S(""), "bnrpe", 0, 5, S::npos);
+  test(S(""), "jtdaefblso", 0, 0, S::npos);
+  test(S(""), "oselktgbca", 0, 1, S::npos);
+  test(S(""), "eqgaplhckj", 0, 5, S::npos);
+  test(S(""), "bjahtcmnlp", 0, 9, S::npos);
+  test(S(""), "hjlcmgpket", 0, 10, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
+  test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
+  test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
+  test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
+  test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
+  test(S(""), "", 1, 0, S::npos);
+  test(S(""), "lbtqd", 1, 0, S::npos);
+  test(S(""), "tboim", 1, 1, S::npos);
+  test(S(""), "slcer", 1, 2, S::npos);
+  test(S(""), "cbjfs", 1, 4, S::npos);
+  test(S(""), "aqibs", 1, 5, S::npos);
+  test(S(""), "gtfblmqinc", 1, 0, S::npos);
+  test(S(""), "mkqpbtdalg", 1, 1, S::npos);
+  test(S(""), "kphatlimcd", 1, 5, S::npos);
+  test(S(""), "pblasqogic", 1, 9, S::npos);
+  test(S(""), "arosdhcfme", 1, 10, S::npos);
+  test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
+  test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
+  test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
+  test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
+  test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
+  test(S("eaint"), "", 0, 0, 0);
+  test(S("binja"), "gfsrt", 0, 0, 0);
+  test(S("latkm"), "pfsoc", 0, 1, 0);
+  test(S("lecfr"), "tpflm", 0, 2, 0);
+  test(S("eqkst"), "sgkec", 0, 4, S::npos);
+  test(S("cdafr"), "romds", 0, 5, 0);
+  test(S("prbhe"), "qhjistlgmr", 0, 0, 0);
+  test(S("lbisk"), "pedfirsglo", 0, 1, 0);
+  test(S("hrlpd"), "aqcoslgrmk", 0, 5, 0);
+  test(S("ehmja"), "dabckmepqj", 0, 9, S::npos);
+  test(S("mhqgd"), "pqscrjthli", 0, 10, 0);
+  test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, 0);
+  test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, 0);
+  test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, 0);
+  test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, S::npos);
+  test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, S::npos);
+  test(S("clrgb"), "", 1, 0, 1);
+  test(S("tjmek"), "osmia", 1, 0, 1);
+  test(S("bgstp"), "ckonl", 1, 1, 1);
+  test(S("hstrk"), "ilcaj", 1, 2, 1);
+  test(S("kmspj"), "lasiq", 1, 4, 1);
+  test(S("tjboh"), "kfqmr", 1, 5, 1);
+  test(S("ilbcj"), "klnitfaobg", 1, 0, 1);
+  test(S("jkngf"), "gjhmdlqikp", 1, 1, 1);
+  test(S("gfcql"), "skbgtahqej", 1, 5, 1);
+  test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 1);
+  test(S("bthpg"), "bjgfmnlkio", 1, 10, 1);
+  test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, 1);
+  test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, 1);
+  test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, S::npos);
+  test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, S::npos);
+  test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, S::npos);
+  test(S("ndrhl"), "", 2, 0, 2);
+  test(S("mrecp"), "otkgb", 2, 0, 2);
+  test(S("qlasf"), "cqsjl", 2, 1, 2);
+  test(S("smaqd"), "dpifl", 2, 2, 2);
+  test(S("hjeni"), "oapht", 2, 4, 2);
+  test(S("ocmfj"), "cifts", 2, 5, 2);
+  test(S("hmftq"), "nmsckbgalo", 2, 0, 2);
+  test(S("fklad"), "tpksqhamle", 2, 1, 2);
+  test(S("dirnm"), "tpdrchmkji", 2, 5, 1);
+  test(S("hrgdc"), "ijagfkblst", 2, 9, 1);
+  test(S("ifakg"), "kpocsignjb", 2, 10, 2);
+  test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, 2);
+  test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, 2);
+  test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 2);
+  test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, S::npos);
+  test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, S::npos);
+  test(S("cjgao"), "", 4, 0, 4);
+  test(S("kjplq"), "mabns", 4, 0, 4);
+  test(S("herni"), "bdnrp", 4, 1, 4);
+  test(S("tadrb"), "scidp", 4, 2, 4);
+  test(S("pkfeo"), "agbjl", 4, 4, 4);
+  test(S("hoser"), "jfmpr", 4, 5, 3);
+  test(S("kgrsp"), "rbpefghsmj", 4, 0, 4);
+  test(S("pgejb"), "apsfntdoqc", 4, 1, 4);
+  test(S("thlnq"), "ndkjeisgcl", 4, 5, 4);
+  test(S("nbmit"), "rnfpqatdeo", 4, 9, 3);
+  test(S("jgmib"), "bntjlqrfik", 4, 10, 2);
+  test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, 4);
+  test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, 4);
+  test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 3);
+  test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 2);
+  test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, S::npos);
+  test(S("klopi"), "", 5, 0, 4);
+  test(S("dajhn"), "psthd", 5, 0, 4);
+  test(S("jbgno"), "rpmjd", 5, 1, 4);
+  test(S("hkjae"), "dfsmk", 5, 2, 4);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S("gbhqo"), "skqne", 5, 4, 4);
-    test(S("ktdor"), "kipnf", 5, 5, 4);
-    test(S("ldprn"), "hmrnqdgifl", 5, 0, 4);
-    test(S("egmjk"), "fsmjcdairn", 5, 1, 4);
-    test(S("armql"), "pcdgltbrfj", 5, 5, 3);
-    test(S("cdhjo"), "aekfctpirg", 5, 9, 4);
-    test(S("jcons"), "ledihrsgpf", 5, 10, 3);
-    test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, 4);
-    test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, 4);
-    test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, 1);
-    test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, 2);
-    test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos);
-    test(S("gajqn"), "", 6, 0, 4);
-    test(S("stedk"), "hrnat", 6, 0, 4);
-    test(S("tjkaf"), "gsqdt", 6, 1, 4);
-    test(S("dthpe"), "bspkd", 6, 2, 4);
-    test(S("klhde"), "ohcmb", 6, 4, 4);
-    test(S("bhlki"), "heatr", 6, 5, 4);
-    test(S("lqmoh"), "pmblckedfn", 6, 0, 4);
-    test(S("mtqin"), "aceqmsrbik", 6, 1, 4);
-    test(S("dpqbr"), "lmbtdehjrn", 6, 5, 4);
-    test(S("kdhmo"), "teqmcrlgib", 6, 9, 4);
-    test(S("jblqp"), "njolbmspac", 6, 10, 3);
-    test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, 4);
-    test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, 4);
-    test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, 1);
-    test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos);
-    test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos);
-    test(S("jnkrfhotgl"), "", 0, 0, 0);
-    test(S("dltjfngbko"), "rqegt", 0, 0, 0);
-    test(S("bmjlpkiqde"), "dashm", 0, 1, 0);
-    test(S("skrflobnqm"), "jqirk", 0, 2, 0);
-    test(S("jkpldtshrm"), "rckeg", 0, 4, 0);
-    test(S("ghasdbnjqo"), "jscie", 0, 5, 0);
-    test(S("igrkhpbqjt"), "efsphndliq", 0, 0, 0);
-    test(S("ikthdgcamf"), "gdicosleja", 0, 1, 0);
-    test(S("pcofgeniam"), "qcpjibosfl", 0, 5, S::npos);
-    test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, S::npos);
-    test(S("itphbqsker"), "dtablcrseo", 0, 10, 0);
-    test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, 0);
-    test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, 0);
-    test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 0);
-    test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, S::npos);
-    test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, S::npos);
-    test(S("shbcqnmoar"), "", 1, 0, 1);
-    test(S("bdoshlmfin"), "ontrs", 1, 0, 1);
-    test(S("khfrebnsgq"), "pfkna", 1, 1, 1);
-    test(S("getcrsaoji"), "ekosa", 1, 2, 0);
-    test(S("fjiknedcpq"), "anqhk", 1, 4, 1);
-    test(S("tkejgnafrm"), "jekca", 1, 5, 0);
-    test(S("jnakolqrde"), "ikemsjgacf", 1, 0, 1);
-    test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, 1);
-    test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 0);
-    test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 1);
-    test(S("cigfqkated"), "sqcflrgtim", 1, 10, S::npos);
-    test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, 1);
-    test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, 1);
-    test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, S::npos);
-    test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, S::npos);
-    test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, S::npos);
-    test(S("ectnhskflp"), "", 5, 0, 5);
-    test(S("fgtianblpq"), "pijag", 5, 0, 5);
-    test(S("mfeqklirnh"), "jrckd", 5, 1, 5);
-    test(S("astedncjhk"), "qcloh", 5, 2, 5);
-    test(S("fhlqgcajbr"), "thlmp", 5, 4, 5);
-    test(S("epfhocmdng"), "qidmo", 5, 5, 5);
-    test(S("apcnsibger"), "lnegpsjqrd", 5, 0, 5);
-    test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 4);
-    test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 5);
-    test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 3);
-    test(S("jbhcfposld"), "trfqgmckbe", 5, 10, 5);
-    test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, 5);
-    test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, 5);
-    test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 1);
-    test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, S::npos);
-    test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, S::npos);
-    test(S("shoiedtcjb"), "", 9, 0, 9);
-    test(S("ebcinjgads"), "tqbnh", 9, 0, 9);
-    test(S("dqmregkcfl"), "akmle", 9, 1, 9);
-    test(S("ngcrieqajf"), "iqfkm", 9, 2, 9);
-    test(S("qosmilgnjb"), "tqjsr", 9, 4, 9);
-    test(S("ikabsjtdfl"), "jplqg", 9, 5, 8);
-    test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, 9);
-    test(S("fdnplotmgh"), "morkglpesn", 9, 1, 9);
-    test(S("fdbicojerm"), "dmicerngat", 9, 5, 8);
-    test(S("mbtafndjcq"), "radgeskbtc", 9, 9, 9);
-    test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 9);
-    test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, 9);
-    test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 9);
-    test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 9);
-    test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 3);
-    test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, S::npos);
-    test(S("ncjpmaekbs"), "", 10, 0, 9);
-    test(S("hlbosgmrak"), "hpmsd", 10, 0, 9);
-    test(S("pqfhsgilen"), "qnpor", 10, 1, 9);
-    test(S("gqtjsbdckh"), "otdma", 10, 2, 9);
-    test(S("cfkqpjlegi"), "efhjg", 10, 4, 9);
-    test(S("beanrfodgj"), "odpte", 10, 5, 9);
-    test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, 9);
-    test(S("iomkfthagj"), "oaklidrbqg", 10, 1, 9);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S("gbhqo"), "skqne", 5, 4, 4);
+  test(S("ktdor"), "kipnf", 5, 5, 4);
+  test(S("ldprn"), "hmrnqdgifl", 5, 0, 4);
+  test(S("egmjk"), "fsmjcdairn", 5, 1, 4);
+  test(S("armql"), "pcdgltbrfj", 5, 5, 3);
+  test(S("cdhjo"), "aekfctpirg", 5, 9, 4);
+  test(S("jcons"), "ledihrsgpf", 5, 10, 3);
+  test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, 4);
+  test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, 4);
+  test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, 1);
+  test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, 2);
+  test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos);
+  test(S("gajqn"), "", 6, 0, 4);
+  test(S("stedk"), "hrnat", 6, 0, 4);
+  test(S("tjkaf"), "gsqdt", 6, 1, 4);
+  test(S("dthpe"), "bspkd", 6, 2, 4);
+  test(S("klhde"), "ohcmb", 6, 4, 4);
+  test(S("bhlki"), "heatr", 6, 5, 4);
+  test(S("lqmoh"), "pmblckedfn", 6, 0, 4);
+  test(S("mtqin"), "aceqmsrbik", 6, 1, 4);
+  test(S("dpqbr"), "lmbtdehjrn", 6, 5, 4);
+  test(S("kdhmo"), "teqmcrlgib", 6, 9, 4);
+  test(S("jblqp"), "njolbmspac", 6, 10, 3);
+  test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, 4);
+  test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, 4);
+  test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, 1);
+  test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos);
+  test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos);
+  test(S("jnkrfhotgl"), "", 0, 0, 0);
+  test(S("dltjfngbko"), "rqegt", 0, 0, 0);
+  test(S("bmjlpkiqde"), "dashm", 0, 1, 0);
+  test(S("skrflobnqm"), "jqirk", 0, 2, 0);
+  test(S("jkpldtshrm"), "rckeg", 0, 4, 0);
+  test(S("ghasdbnjqo"), "jscie", 0, 5, 0);
+  test(S("igrkhpbqjt"), "efsphndliq", 0, 0, 0);
+  test(S("ikthdgcamf"), "gdicosleja", 0, 1, 0);
+  test(S("pcofgeniam"), "qcpjibosfl", 0, 5, S::npos);
+  test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, S::npos);
+  test(S("itphbqsker"), "dtablcrseo", 0, 10, 0);
+  test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, 0);
+  test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, 0);
+  test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 0);
+  test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, S::npos);
+  test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, S::npos);
+  test(S("shbcqnmoar"), "", 1, 0, 1);
+  test(S("bdoshlmfin"), "ontrs", 1, 0, 1);
+  test(S("khfrebnsgq"), "pfkna", 1, 1, 1);
+  test(S("getcrsaoji"), "ekosa", 1, 2, 0);
+  test(S("fjiknedcpq"), "anqhk", 1, 4, 1);
+  test(S("tkejgnafrm"), "jekca", 1, 5, 0);
+  test(S("jnakolqrde"), "ikemsjgacf", 1, 0, 1);
+  test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, 1);
+  test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 0);
+  test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 1);
+  test(S("cigfqkated"), "sqcflrgtim", 1, 10, S::npos);
+  test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, 1);
+  test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, 1);
+  test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, S::npos);
+  test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, S::npos);
+  test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, S::npos);
+  test(S("ectnhskflp"), "", 5, 0, 5);
+  test(S("fgtianblpq"), "pijag", 5, 0, 5);
+  test(S("mfeqklirnh"), "jrckd", 5, 1, 5);
+  test(S("astedncjhk"), "qcloh", 5, 2, 5);
+  test(S("fhlqgcajbr"), "thlmp", 5, 4, 5);
+  test(S("epfhocmdng"), "qidmo", 5, 5, 5);
+  test(S("apcnsibger"), "lnegpsjqrd", 5, 0, 5);
+  test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 4);
+  test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 5);
+  test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 3);
+  test(S("jbhcfposld"), "trfqgmckbe", 5, 10, 5);
+  test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, 5);
+  test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, 5);
+  test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 1);
+  test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, S::npos);
+  test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, S::npos);
+  test(S("shoiedtcjb"), "", 9, 0, 9);
+  test(S("ebcinjgads"), "tqbnh", 9, 0, 9);
+  test(S("dqmregkcfl"), "akmle", 9, 1, 9);
+  test(S("ngcrieqajf"), "iqfkm", 9, 2, 9);
+  test(S("qosmilgnjb"), "tqjsr", 9, 4, 9);
+  test(S("ikabsjtdfl"), "jplqg", 9, 5, 8);
+  test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, 9);
+  test(S("fdnplotmgh"), "morkglpesn", 9, 1, 9);
+  test(S("fdbicojerm"), "dmicerngat", 9, 5, 8);
+  test(S("mbtafndjcq"), "radgeskbtc", 9, 9, 9);
+  test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 9);
+  test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, 9);
+  test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 9);
+  test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 9);
+  test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 3);
+  test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, S::npos);
+  test(S("ncjpmaekbs"), "", 10, 0, 9);
+  test(S("hlbosgmrak"), "hpmsd", 10, 0, 9);
+  test(S("pqfhsgilen"), "qnpor", 10, 1, 9);
+  test(S("gqtjsbdckh"), "otdma", 10, 2, 9);
+  test(S("cfkqpjlegi"), "efhjg", 10, 4, 9);
+  test(S("beanrfodgj"), "odpte", 10, 5, 9);
+  test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, 9);
+  test(S("iomkfthagj"), "oaklidrbqg", 10, 1, 9);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test2()
-{
-    test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, 8);
-    test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, 9);
-    test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, 8);
-    test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, 9);
-    test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, 9);
-    test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, 7);
-    test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, 5);
-    test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos);
-    test(S("cqjohampgd"), "", 11, 0, 9);
-    test(S("hobitmpsan"), "aocjb", 11, 0, 9);
-    test(S("tjehkpsalm"), "jbrnk", 11, 1, 9);
-    test(S("ngfbojitcl"), "tqedg", 11, 2, 9);
-    test(S("rcfkdbhgjo"), "nqskp", 11, 4, 9);
-    test(S("qghptonrea"), "eaqkl", 11, 5, 7);
-    test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, 9);
-    test(S("hlmgabenti"), "lsftgajqpm", 11, 1, 9);
-    test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, 9);
-    test(S("jqedtkornm"), "shkncmiaqj", 11, 9, 7);
-    test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, 8);
-    test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, 9);
-    test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, 9);
-    test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, 8);
-    test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos);
-    test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos);
-    test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, 0);
-    test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, 0);
-    test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 0);
-    test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 0);
-    test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 0);
-    test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 0);
-    test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, 0);
-    test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 0);
-    test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 0);
-    test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 0);
-    test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 0);
-    test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, 0);
-    test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 0);
-    test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 0);
-    test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, S::npos);
-    test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, S::npos);
-    test(S("febhmqtjanokscdirpgl"), "", 1, 0, 1);
-    test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, 1);
-    test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 1);
-    test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 0);
-    test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 0);
-    test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 1);
-    test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, 1);
-    test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 1);
-    test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 1);
-    test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 0);
-    test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 0);
-    test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, 1);
-    test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 1);
-    test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 0);
-    test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, S::npos);
-    test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, S::npos);
-    test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, 10);
-    test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, 10);
-    test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 10);
-    test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 10);
-    test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 9);
-    test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 10);
-    test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, 10);
-    test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 10);
-    test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 10);
-    test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 8);
-    test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 10);
-    test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, 10);
-    test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 10);
-    test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 8);
-    test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, S::npos);
-    test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, S::npos);
-    test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, 19);
-    test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, 19);
-    test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 19);
-    test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 19);
-    test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 19);
-    test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 17);
-    test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, 19);
-    test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 19);
-    test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 19);
-    test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 19);
-    test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 19);
-    test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, 19);
-    test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 19);
-    test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 18);
-    test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 7);
-    test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, S::npos);
-    test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, 19);
-    test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, 19);
-    test(S("grkpahljcftesdmonqib"), "odife", 20, 1, 19);
-    test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, 19);
-    test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, 18);
-    test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, 18);
-    test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, 19);
-    test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, 19);
-    test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, 18);
-    test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, 18);
-    test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, 17);
-    test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, 19);
+TEST_CONSTEXPR_CXX20 void test2() {
+  test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, 8);
+  test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, 9);
+  test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, 8);
+  test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, 9);
+  test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, 9);
+  test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, 7);
+  test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, 5);
+  test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos);
+  test(S("cqjohampgd"), "", 11, 0, 9);
+  test(S("hobitmpsan"), "aocjb", 11, 0, 9);
+  test(S("tjehkpsalm"), "jbrnk", 11, 1, 9);
+  test(S("ngfbojitcl"), "tqedg", 11, 2, 9);
+  test(S("rcfkdbhgjo"), "nqskp", 11, 4, 9);
+  test(S("qghptonrea"), "eaqkl", 11, 5, 7);
+  test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, 9);
+  test(S("hlmgabenti"), "lsftgajqpm", 11, 1, 9);
+  test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, 9);
+  test(S("jqedtkornm"), "shkncmiaqj", 11, 9, 7);
+  test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, 8);
+  test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, 9);
+  test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, 9);
+  test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, 8);
+  test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos);
+  test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos);
+  test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, 0);
+  test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, 0);
+  test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 0);
+  test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 0);
+  test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 0);
+  test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 0);
+  test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, 0);
+  test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 0);
+  test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 0);
+  test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 0);
+  test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 0);
+  test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, 0);
+  test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 0);
+  test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 0);
+  test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, S::npos);
+  test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, S::npos);
+  test(S("febhmqtjanokscdirpgl"), "", 1, 0, 1);
+  test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, 1);
+  test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 1);
+  test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 0);
+  test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 0);
+  test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 1);
+  test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, 1);
+  test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 1);
+  test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 1);
+  test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 0);
+  test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 0);
+  test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, 1);
+  test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 1);
+  test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 0);
+  test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, S::npos);
+  test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, S::npos);
+  test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, 10);
+  test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, 10);
+  test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 10);
+  test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 10);
+  test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 9);
+  test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 10);
+  test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, 10);
+  test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 10);
+  test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 10);
+  test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 8);
+  test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 10);
+  test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, 10);
+  test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 10);
+  test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 8);
+  test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, S::npos);
+  test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, S::npos);
+  test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, 19);
+  test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, 19);
+  test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 19);
+  test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 19);
+  test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 19);
+  test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 17);
+  test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, 19);
+  test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 19);
+  test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 19);
+  test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 19);
+  test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 19);
+  test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, 19);
+  test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 19);
+  test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 18);
+  test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 7);
+  test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, S::npos);
+  test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, 19);
+  test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, 19);
+  test(S("grkpahljcftesdmonqib"), "odife", 20, 1, 19);
+  test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, 19);
+  test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, 18);
+  test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, 18);
+  test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, 19);
+  test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, 19);
+  test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, 18);
+  test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, 18);
+  test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, 17);
+  test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, 19);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test3()
-{
-    test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, 19);
-    test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, 19);
-    test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, 1);
-    test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos);
-    test(S("ecgdanriptblhjfqskom"), "", 21, 0, 19);
-    test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, 19);
-    test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, 19);
-    test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, 19);
-    test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, 19);
-    test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, 19);
-    test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, 19);
-    test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, 19);
-    test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, 18);
-    test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, 19);
-    test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, 19);
-    test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, 19);
-    test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, 19);
-    test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, 19);
-    test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, 7);
-    test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos);
+TEST_CONSTEXPR_CXX20 void test3() {
+  test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, 19);
+  test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, 19);
+  test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, 1);
+  test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos);
+  test(S("ecgdanriptblhjfqskom"), "", 21, 0, 19);
+  test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, 19);
+  test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, 19);
+  test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, 19);
+  test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, 19);
+  test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, 19);
+  test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, 19);
+  test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, 19);
+  test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, 18);
+  test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, 19);
+  test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, 19);
+  test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, 19);
+  test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, 19);
+  test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, 19);
+  test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, 7);
+  test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -388,8 +386,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_size.pass.cpp
index b228baa791b5ece..1ced857f0060766 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_size.pass.cpp
@@ -17,129 +17,123 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str, pos));
-    assert(s.find_last_not_of(str, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str, pos));
+  assert(s.find_last_not_of(str, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str));
-    assert(s.find_last_not_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str));
+  assert(s.find_last_not_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), S(""), 0, S::npos);
-    test(S(""), S("laenf"), 0, S::npos);
-    test(S(""), S("pqlnkmbdjo"), 0, S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
-    test(S(""), S(""), 1, S::npos);
-    test(S(""), S("bjaht"), 1, S::npos);
-    test(S(""), S("hjlcmgpket"), 1, S::npos);
-    test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
-    test(S("fodgq"), S(""), 0, 0);
-    test(S("qanej"), S("dfkap"), 0, 0);
-    test(S("clbao"), S("ihqrfebgad"), 0, 0);
-    test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, S::npos);
-    test(S("srdfq"), S(""), 1, 1);
-    test(S("oemth"), S("ikcrq"), 1, 1);
-    test(S("cdaih"), S("dmajblfhsg"), 1, 0);
-    test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, S::npos);
-    test(S("cshmd"), S(""), 2, 2);
-    test(S("lhcdo"), S("oebqi"), 2, 2);
-    test(S("qnsoh"), S("kojhpmbsfe"), 2, 1);
-    test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, S::npos);
-    test(S("fmtsp"), S(""), 4, 4);
-    test(S("khbpm"), S("aobjd"), 4, 4);
-    test(S("pbsji"), S("pcbahntsje"), 4, 4);
-    test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, S::npos);
-    test(S("eqmpa"), S(""), 5, 4);
-    test(S("omigs"), S("kocgb"), 5, 4);
-    test(S("onmje"), S("fbslrjiqkm"), 5, 4);
-    test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, S::npos);
-    test(S("schfa"), S(""), 6, 4);
-    test(S("igdsc"), S("qngpd"), 6, 4);
-    test(S("brqgo"), S("rodhqklgmb"), 6, S::npos);
-    test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, S::npos);
-    test(S("hcjitbfapl"), S(""), 0, 0);
-    test(S("daiprenocl"), S("ashjd"), 0, S::npos);
-    test(S("litpcfdghe"), S("mgojkldsqh"), 0, S::npos);
-    test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, S::npos);
-    test(S("qpghtfbaji"), S(""), 1, 1);
-    test(S("gfshlcmdjr"), S("nadkh"), 1, 1);
-    test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 0);
-    test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, S::npos);
-    test(S("crnklpmegd"), S(""), 5, 5);
-    test(S("jsbtafedoc"), S("prqgn"), 5, 5);
-    test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 4);
-    test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, S::npos);
-    test(S("lmofqdhpki"), S(""), 9, 9);
-    test(S("hnefkqimca"), S("rtjpa"), 9, 8);
-    test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, 9);
-    test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, S::npos);
-    test(S("elgofjmbrq"), S(""), 10, 9);
-    test(S("mjqdgalkpc"), S("dplqa"), 10, 9);
-    test(S("kthqnfcerm"), S("dkacjoptns"), 10, 9);
-    test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, S::npos);
-    test(S("eqsgalomhb"), S(""), 11, 9);
-    test(S("akiteljmoh"), S("lofbc"), 11, 9);
-    test(S("hlbdfreqjo"), S("astoegbfpn"), 11, 8);
-    test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), S(""), 0, 0);
-    test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, 0);
-    test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, S::npos);
-    test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, S::npos);
-    test(S("jlnkraeodhcspfgbqitm"), S(""), 1, 1);
-    test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, 1);
-    test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 0);
-    test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, S::npos);
-    test(S("hdpkobnsalmcfijregtq"), S(""), 10, 10);
-    test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 9);
-    test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 9);
-    test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, S::npos);
-    test(S("niptglfbosehkamrdqcj"), S(""), 19, 19);
-    test(S("copqdhstbingamjfkler"), S("djkqc"), 19, 19);
-    test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, 16);
-    test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, S::npos);
-    test(S("eaintpchlqsbdgrkjofm"), S(""), 20, 19);
-    test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, 18);
-    test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, 19);
-    test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, 19);
-    test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, 19);
-    test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, 19);
-    test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), S(""), 0, S::npos);
+  test(S(""), S("laenf"), 0, S::npos);
+  test(S(""), S("pqlnkmbdjo"), 0, S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
+  test(S(""), S(""), 1, S::npos);
+  test(S(""), S("bjaht"), 1, S::npos);
+  test(S(""), S("hjlcmgpket"), 1, S::npos);
+  test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
+  test(S("fodgq"), S(""), 0, 0);
+  test(S("qanej"), S("dfkap"), 0, 0);
+  test(S("clbao"), S("ihqrfebgad"), 0, 0);
+  test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, S::npos);
+  test(S("srdfq"), S(""), 1, 1);
+  test(S("oemth"), S("ikcrq"), 1, 1);
+  test(S("cdaih"), S("dmajblfhsg"), 1, 0);
+  test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, S::npos);
+  test(S("cshmd"), S(""), 2, 2);
+  test(S("lhcdo"), S("oebqi"), 2, 2);
+  test(S("qnsoh"), S("kojhpmbsfe"), 2, 1);
+  test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, S::npos);
+  test(S("fmtsp"), S(""), 4, 4);
+  test(S("khbpm"), S("aobjd"), 4, 4);
+  test(S("pbsji"), S("pcbahntsje"), 4, 4);
+  test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, S::npos);
+  test(S("eqmpa"), S(""), 5, 4);
+  test(S("omigs"), S("kocgb"), 5, 4);
+  test(S("onmje"), S("fbslrjiqkm"), 5, 4);
+  test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, S::npos);
+  test(S("schfa"), S(""), 6, 4);
+  test(S("igdsc"), S("qngpd"), 6, 4);
+  test(S("brqgo"), S("rodhqklgmb"), 6, S::npos);
+  test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, S::npos);
+  test(S("hcjitbfapl"), S(""), 0, 0);
+  test(S("daiprenocl"), S("ashjd"), 0, S::npos);
+  test(S("litpcfdghe"), S("mgojkldsqh"), 0, S::npos);
+  test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, S::npos);
+  test(S("qpghtfbaji"), S(""), 1, 1);
+  test(S("gfshlcmdjr"), S("nadkh"), 1, 1);
+  test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 0);
+  test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, S::npos);
+  test(S("crnklpmegd"), S(""), 5, 5);
+  test(S("jsbtafedoc"), S("prqgn"), 5, 5);
+  test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 4);
+  test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, S::npos);
+  test(S("lmofqdhpki"), S(""), 9, 9);
+  test(S("hnefkqimca"), S("rtjpa"), 9, 8);
+  test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, 9);
+  test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, S::npos);
+  test(S("elgofjmbrq"), S(""), 10, 9);
+  test(S("mjqdgalkpc"), S("dplqa"), 10, 9);
+  test(S("kthqnfcerm"), S("dkacjoptns"), 10, 9);
+  test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, S::npos);
+  test(S("eqsgalomhb"), S(""), 11, 9);
+  test(S("akiteljmoh"), S("lofbc"), 11, 9);
+  test(S("hlbdfreqjo"), S("astoegbfpn"), 11, 8);
+  test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), S(""), 0, 0);
+  test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, 0);
+  test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, S::npos);
+  test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, S::npos);
+  test(S("jlnkraeodhcspfgbqitm"), S(""), 1, 1);
+  test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, 1);
+  test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 0);
+  test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, S::npos);
+  test(S("hdpkobnsalmcfijregtq"), S(""), 10, 10);
+  test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 9);
+  test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 9);
+  test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, S::npos);
+  test(S("niptglfbosehkamrdqcj"), S(""), 19, 19);
+  test(S("copqdhstbingamjfkler"), S("djkqc"), 19, 19);
+  test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, 16);
+  test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, S::npos);
+  test(S("eaintpchlqsbdgrkjofm"), S(""), 20, 19);
+  test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, 18);
+  test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, 19);
+  test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, 19);
+  test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, 19);
+  test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, 19);
+  test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), S(""), S::npos);
-    test(S(""), S("laenf"), S::npos);
-    test(S(""), S("pqlnkmbdjo"), S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
-    test(S("nhmko"), S(""), 4);
-    test(S("lahfb"), S("irkhs"), 4);
-    test(S("gmfhd"), S("kantesmpgj"), 4);
-    test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), S::npos);
-    test(S("eolhfgpjqk"), S(""), 9);
-    test(S("nbatdlmekr"), S("bnrpe"), 8);
-    test(S("jdmciepkaq"), S("jtdaefblso"), 9);
-    test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), S::npos);
-    test(S("gprdcokbnjhlsfmtieqa"), S(""), 19);
-    test(S("qjghlnftcaismkropdeb"), S("bjaht"), 18);
-    test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 17);
-    test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), S::npos);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), S(""), S::npos);
+  test(S(""), S("laenf"), S::npos);
+  test(S(""), S("pqlnkmbdjo"), S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
+  test(S("nhmko"), S(""), 4);
+  test(S("lahfb"), S("irkhs"), 4);
+  test(S("gmfhd"), S("kantesmpgj"), 4);
+  test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), S::npos);
+  test(S("eolhfgpjqk"), S(""), 9);
+  test(S("nbatdlmekr"), S("bnrpe"), 8);
+  test(S("jdmciepkaq"), S("jtdaefblso"), 9);
+  test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), S::npos);
+  test(S("gprdcokbnjhlsfmtieqa"), S(""), 19);
+  test(S("qjghlnftcaismkropdeb"), S("bjaht"), 18);
+  test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 17);
+  test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), S::npos);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -166,8 +160,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_view_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_view_size.pass.cpp
index 07ab842b86258d6..28584aa573fc4f4 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_view_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.not.of/string_view_size.pass.cpp
@@ -17,129 +17,123 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(sv, pos));
-    assert(s.find_last_not_of(sv, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(sv, pos));
+  assert(s.find_last_not_of(sv, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(sv));
-    assert(s.find_last_not_of(sv) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(sv));
+  assert(s.find_last_not_of(sv) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), SV(""), 0, S::npos);
-    test(S(""), SV("laenf"), 0, S::npos);
-    test(S(""), SV("pqlnkmbdjo"), 0, S::npos);
-    test(S(""), SV("qkamfogpnljdcshbreti"), 0, S::npos);
-    test(S(""), SV(""), 1, S::npos);
-    test(S(""), SV("bjaht"), 1, S::npos);
-    test(S(""), SV("hjlcmgpket"), 1, S::npos);
-    test(S(""), SV("htaobedqikfplcgjsmrn"), 1, S::npos);
-    test(S("fodgq"), SV(""), 0, 0);
-    test(S("qanej"), SV("dfkap"), 0, 0);
-    test(S("clbao"), SV("ihqrfebgad"), 0, 0);
-    test(S("mekdn"), SV("ngtjfcalbseiqrphmkdo"), 0, S::npos);
-    test(S("srdfq"), SV(""), 1, 1);
-    test(S("oemth"), SV("ikcrq"), 1, 1);
-    test(S("cdaih"), SV("dmajblfhsg"), 1, 0);
-    test(S("qohtk"), SV("oqftjhdmkgsblacenirp"), 1, S::npos);
-    test(S("cshmd"), SV(""), 2, 2);
-    test(S("lhcdo"), SV("oebqi"), 2, 2);
-    test(S("qnsoh"), SV("kojhpmbsfe"), 2, 1);
-    test(S("pkrof"), SV("acbsjqogpltdkhinfrem"), 2, S::npos);
-    test(S("fmtsp"), SV(""), 4, 4);
-    test(S("khbpm"), SV("aobjd"), 4, 4);
-    test(S("pbsji"), SV("pcbahntsje"), 4, 4);
-    test(S("mprdj"), SV("fhepcrntkoagbmldqijs"), 4, S::npos);
-    test(S("eqmpa"), SV(""), 5, 4);
-    test(S("omigs"), SV("kocgb"), 5, 4);
-    test(S("onmje"), SV("fbslrjiqkm"), 5, 4);
-    test(S("oqmrj"), SV("jeidpcmalhfnqbgtrsko"), 5, S::npos);
-    test(S("schfa"), SV(""), 6, 4);
-    test(S("igdsc"), SV("qngpd"), 6, 4);
-    test(S("brqgo"), SV("rodhqklgmb"), 6, S::npos);
-    test(S("tnrph"), SV("thdjgafrlbkoiqcspmne"), 6, S::npos);
-    test(S("hcjitbfapl"), SV(""), 0, 0);
-    test(S("daiprenocl"), SV("ashjd"), 0, S::npos);
-    test(S("litpcfdghe"), SV("mgojkldsqh"), 0, S::npos);
-    test(S("aidjksrolc"), SV("imqnaghkfrdtlopbjesc"), 0, S::npos);
-    test(S("qpghtfbaji"), SV(""), 1, 1);
-    test(S("gfshlcmdjr"), SV("nadkh"), 1, 1);
-    test(S("nkodajteqp"), SV("ofdrqmkebl"), 1, 0);
-    test(S("gbmetiprqd"), SV("bdfjqgatlksriohemnpc"), 1, S::npos);
-    test(S("crnklpmegd"), SV(""), 5, 5);
-    test(S("jsbtafedoc"), SV("prqgn"), 5, 5);
-    test(S("qnmodrtkeb"), SV("pejafmnokr"), 5, 4);
-    test(S("cpebqsfmnj"), SV("odnqkgijrhabfmcestlp"), 5, S::npos);
-    test(S("lmofqdhpki"), SV(""), 9, 9);
-    test(S("hnefkqimca"), SV("rtjpa"), 9, 8);
-    test(S("drtasbgmfp"), SV("ktsrmnqagd"), 9, 9);
-    test(S("lsaijeqhtr"), SV("rtdhgcisbnmoaqkfpjle"), 9, S::npos);
-    test(S("elgofjmbrq"), SV(""), 10, 9);
-    test(S("mjqdgalkpc"), SV("dplqa"), 10, 9);
-    test(S("kthqnfcerm"), SV("dkacjoptns"), 10, 9);
-    test(S("dfsjhanorc"), SV("hqfimtrgnbekpdcsjalo"), 10, S::npos);
-    test(S("eqsgalomhb"), SV(""), 11, 9);
-    test(S("akiteljmoh"), SV("lofbc"), 11, 9);
-    test(S("hlbdfreqjo"), SV("astoegbfpn"), 11, 8);
-    test(S("taqobhlerg"), SV("pdgreqomsncafklhtibj"), 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), SV(""), 0, 0);
-    test(S("aemtbrgcklhndjisfpoq"), SV("lbtqd"), 0, 0);
-    test(S("pnracgfkjdiholtbqsem"), SV("tboimldpjh"), 0, S::npos);
-    test(S("dicfltehbsgrmojnpkaq"), SV("slcerthdaiqjfnobgkpm"), 0, S::npos);
-    test(S("jlnkraeodhcspfgbqitm"), SV(""), 1, 1);
-    test(S("lhosrngtmfjikbqpcade"), SV("aqibs"), 1, 1);
-    test(S("rbtaqjhgkneisldpmfoc"), SV("gtfblmqinc"), 1, 0);
-    test(S("gpifsqlrdkbonjtmheca"), SV("mkqpbtdalgniorhfescj"), 1, S::npos);
-    test(S("hdpkobnsalmcfijregtq"), SV(""), 10, 10);
-    test(S("jtlshdgqaiprkbcoenfm"), SV("pblas"), 10, 9);
-    test(S("fkdrbqltsgmcoiphneaj"), SV("arosdhcfme"), 10, 9);
-    test(S("crsplifgtqedjohnabmk"), SV("blkhjeogicatqfnpdmsr"), 10, S::npos);
-    test(S("niptglfbosehkamrdqcj"), SV(""), 19, 19);
-    test(S("copqdhstbingamjfkler"), SV("djkqc"), 19, 19);
-    test(S("mrtaefilpdsgocnhqbjk"), SV("lgokshjtpb"), 19, 16);
-    test(S("kojatdhlcmigpbfrqnes"), SV("bqjhtkfepimcnsgrlado"), 19, S::npos);
-    test(S("eaintpchlqsbdgrkjofm"), SV(""), 20, 19);
-    test(S("gjnhidfsepkrtaqbmclo"), SV("nocfa"), 20, 18);
-    test(S("spocfaktqdbiejlhngmr"), SV("bgtajmiedc"), 20, 19);
-    test(S("rphmlekgfscndtaobiqj"), SV("lsckfnqgdahejiopbtmr"), 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), SV(""), 21, 19);
-    test(S("binjagtfldkrspcomqeh"), SV("gfsrt"), 21, 19);
-    test(S("latkmisecnorjbfhqpdg"), SV("pfsocbhjtm"), 21, 19);
-    test(S("lecfratdjkhnsmqpoigb"), SV("tpflmdnoicjgkberhqsa"), 21, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), SV(""), 0, S::npos);
+  test(S(""), SV("laenf"), 0, S::npos);
+  test(S(""), SV("pqlnkmbdjo"), 0, S::npos);
+  test(S(""), SV("qkamfogpnljdcshbreti"), 0, S::npos);
+  test(S(""), SV(""), 1, S::npos);
+  test(S(""), SV("bjaht"), 1, S::npos);
+  test(S(""), SV("hjlcmgpket"), 1, S::npos);
+  test(S(""), SV("htaobedqikfplcgjsmrn"), 1, S::npos);
+  test(S("fodgq"), SV(""), 0, 0);
+  test(S("qanej"), SV("dfkap"), 0, 0);
+  test(S("clbao"), SV("ihqrfebgad"), 0, 0);
+  test(S("mekdn"), SV("ngtjfcalbseiqrphmkdo"), 0, S::npos);
+  test(S("srdfq"), SV(""), 1, 1);
+  test(S("oemth"), SV("ikcrq"), 1, 1);
+  test(S("cdaih"), SV("dmajblfhsg"), 1, 0);
+  test(S("qohtk"), SV("oqftjhdmkgsblacenirp"), 1, S::npos);
+  test(S("cshmd"), SV(""), 2, 2);
+  test(S("lhcdo"), SV("oebqi"), 2, 2);
+  test(S("qnsoh"), SV("kojhpmbsfe"), 2, 1);
+  test(S("pkrof"), SV("acbsjqogpltdkhinfrem"), 2, S::npos);
+  test(S("fmtsp"), SV(""), 4, 4);
+  test(S("khbpm"), SV("aobjd"), 4, 4);
+  test(S("pbsji"), SV("pcbahntsje"), 4, 4);
+  test(S("mprdj"), SV("fhepcrntkoagbmldqijs"), 4, S::npos);
+  test(S("eqmpa"), SV(""), 5, 4);
+  test(S("omigs"), SV("kocgb"), 5, 4);
+  test(S("onmje"), SV("fbslrjiqkm"), 5, 4);
+  test(S("oqmrj"), SV("jeidpcmalhfnqbgtrsko"), 5, S::npos);
+  test(S("schfa"), SV(""), 6, 4);
+  test(S("igdsc"), SV("qngpd"), 6, 4);
+  test(S("brqgo"), SV("rodhqklgmb"), 6, S::npos);
+  test(S("tnrph"), SV("thdjgafrlbkoiqcspmne"), 6, S::npos);
+  test(S("hcjitbfapl"), SV(""), 0, 0);
+  test(S("daiprenocl"), SV("ashjd"), 0, S::npos);
+  test(S("litpcfdghe"), SV("mgojkldsqh"), 0, S::npos);
+  test(S("aidjksrolc"), SV("imqnaghkfrdtlopbjesc"), 0, S::npos);
+  test(S("qpghtfbaji"), SV(""), 1, 1);
+  test(S("gfshlcmdjr"), SV("nadkh"), 1, 1);
+  test(S("nkodajteqp"), SV("ofdrqmkebl"), 1, 0);
+  test(S("gbmetiprqd"), SV("bdfjqgatlksriohemnpc"), 1, S::npos);
+  test(S("crnklpmegd"), SV(""), 5, 5);
+  test(S("jsbtafedoc"), SV("prqgn"), 5, 5);
+  test(S("qnmodrtkeb"), SV("pejafmnokr"), 5, 4);
+  test(S("cpebqsfmnj"), SV("odnqkgijrhabfmcestlp"), 5, S::npos);
+  test(S("lmofqdhpki"), SV(""), 9, 9);
+  test(S("hnefkqimca"), SV("rtjpa"), 9, 8);
+  test(S("drtasbgmfp"), SV("ktsrmnqagd"), 9, 9);
+  test(S("lsaijeqhtr"), SV("rtdhgcisbnmoaqkfpjle"), 9, S::npos);
+  test(S("elgofjmbrq"), SV(""), 10, 9);
+  test(S("mjqdgalkpc"), SV("dplqa"), 10, 9);
+  test(S("kthqnfcerm"), SV("dkacjoptns"), 10, 9);
+  test(S("dfsjhanorc"), SV("hqfimtrgnbekpdcsjalo"), 10, S::npos);
+  test(S("eqsgalomhb"), SV(""), 11, 9);
+  test(S("akiteljmoh"), SV("lofbc"), 11, 9);
+  test(S("hlbdfreqjo"), SV("astoegbfpn"), 11, 8);
+  test(S("taqobhlerg"), SV("pdgreqomsncafklhtibj"), 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), SV(""), 0, 0);
+  test(S("aemtbrgcklhndjisfpoq"), SV("lbtqd"), 0, 0);
+  test(S("pnracgfkjdiholtbqsem"), SV("tboimldpjh"), 0, S::npos);
+  test(S("dicfltehbsgrmojnpkaq"), SV("slcerthdaiqjfnobgkpm"), 0, S::npos);
+  test(S("jlnkraeodhcspfgbqitm"), SV(""), 1, 1);
+  test(S("lhosrngtmfjikbqpcade"), SV("aqibs"), 1, 1);
+  test(S("rbtaqjhgkneisldpmfoc"), SV("gtfblmqinc"), 1, 0);
+  test(S("gpifsqlrdkbonjtmheca"), SV("mkqpbtdalgniorhfescj"), 1, S::npos);
+  test(S("hdpkobnsalmcfijregtq"), SV(""), 10, 10);
+  test(S("jtlshdgqaiprkbcoenfm"), SV("pblas"), 10, 9);
+  test(S("fkdrbqltsgmcoiphneaj"), SV("arosdhcfme"), 10, 9);
+  test(S("crsplifgtqedjohnabmk"), SV("blkhjeogicatqfnpdmsr"), 10, S::npos);
+  test(S("niptglfbosehkamrdqcj"), SV(""), 19, 19);
+  test(S("copqdhstbingamjfkler"), SV("djkqc"), 19, 19);
+  test(S("mrtaefilpdsgocnhqbjk"), SV("lgokshjtpb"), 19, 16);
+  test(S("kojatdhlcmigpbfrqnes"), SV("bqjhtkfepimcnsgrlado"), 19, S::npos);
+  test(S("eaintpchlqsbdgrkjofm"), SV(""), 20, 19);
+  test(S("gjnhidfsepkrtaqbmclo"), SV("nocfa"), 20, 18);
+  test(S("spocfaktqdbiejlhngmr"), SV("bgtajmiedc"), 20, 19);
+  test(S("rphmlekgfscndtaobiqj"), SV("lsckfnqgdahejiopbtmr"), 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), SV(""), 21, 19);
+  test(S("binjagtfldkrspcomqeh"), SV("gfsrt"), 21, 19);
+  test(S("latkmisecnorjbfhqpdg"), SV("pfsocbhjtm"), 21, 19);
+  test(S("lecfratdjkhnsmqpoigb"), SV("tpflmdnoicjgkberhqsa"), 21, S::npos);
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), SV(""), S::npos);
-    test(S(""), SV("laenf"), S::npos);
-    test(S(""), SV("pqlnkmbdjo"), S::npos);
-    test(S(""), SV("qkamfogpnljdcshbreti"), S::npos);
-    test(S("nhmko"), SV(""), 4);
-    test(S("lahfb"), SV("irkhs"), 4);
-    test(S("gmfhd"), SV("kantesmpgj"), 4);
-    test(S("odaft"), SV("oknlrstdpiqmjbaghcfe"), S::npos);
-    test(S("eolhfgpjqk"), SV(""), 9);
-    test(S("nbatdlmekr"), SV("bnrpe"), 8);
-    test(S("jdmciepkaq"), SV("jtdaefblso"), 9);
-    test(S("hkbgspoflt"), SV("oselktgbcapndfjihrmq"), S::npos);
-    test(S("gprdcokbnjhlsfmtieqa"), SV(""), 19);
-    test(S("qjghlnftcaismkropdeb"), SV("bjaht"), 18);
-    test(S("pnalfrdtkqcmojiesbhg"), SV("hjlcmgpket"), 17);
-    test(S("pniotcfrhqsmgdkjbael"), SV("htaobedqikfplcgjsmrn"), S::npos);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), SV(""), S::npos);
+  test(S(""), SV("laenf"), S::npos);
+  test(S(""), SV("pqlnkmbdjo"), S::npos);
+  test(S(""), SV("qkamfogpnljdcshbreti"), S::npos);
+  test(S("nhmko"), SV(""), 4);
+  test(S("lahfb"), SV("irkhs"), 4);
+  test(S("gmfhd"), SV("kantesmpgj"), 4);
+  test(S("odaft"), SV("oknlrstdpiqmjbaghcfe"), S::npos);
+  test(S("eolhfgpjqk"), SV(""), 9);
+  test(S("nbatdlmekr"), SV("bnrpe"), 8);
+  test(S("jdmciepkaq"), SV("jtdaefblso"), 9);
+  test(S("hkbgspoflt"), SV("oselktgbcapndfjihrmq"), S::npos);
+  test(S("gprdcokbnjhlsfmtieqa"), SV(""), 19);
+  test(S("qjghlnftcaismkropdeb"), SV("bjaht"), 18);
+  test(S("pnalfrdtkqcmojiesbhg"), SV("hjlcmgpket"), 17);
+  test(S("pniotcfrhqsmgdkjbael"), SV("htaobedqikfplcgjsmrn"), S::npos);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -151,18 +145,17 @@ TEST_CONSTEXPR_CXX20 bool test() {
   }
 #if TEST_STD_VER >= 11
   {
-     typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
-     typedef std::string_view SV;
-     test0<S, SV>();
-     test1<S, SV>();
+    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
+    typedef std::string_view SV;
+    test0<S, SV>();
+    test1<S, SV>();
   }
 #endif
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/char_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/char_size.pass.cpp
index ee7283311dff988..50b90b9f392abb8 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/char_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/char_size.pass.cpp
@@ -18,23 +18,19 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::value_type c, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(c, pos));
-    assert(s.find_last_of(c, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+test(const S& s, typename S::value_type c, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(c, pos));
+  assert(s.find_last_of(c, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::value_type c, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(c));
-    assert(s.find_last_of(c) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::value_type c, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(c));
+  assert(s.find_last_of(c) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -100,8 +96,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size.pass.cpp
index 3a09beb719b552f..d3b843998e27b3f 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size.pass.cpp
@@ -18,129 +18,123 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str, pos));
-    assert(s.find_last_of(str, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+test(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str, pos));
+  assert(s.find_last_of(str, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str));
-    assert(s.find_last_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const typename S::value_type* str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str));
+  assert(s.find_last_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), "", 0, S::npos);
-    test(S(""), "laenf", 0, S::npos);
-    test(S(""), "pqlnkmbdjo", 0, S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
-    test(S(""), "", 1, S::npos);
-    test(S(""), "bjaht", 1, S::npos);
-    test(S(""), "hjlcmgpket", 1, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
-    test(S("fodgq"), "", 0, S::npos);
-    test(S("qanej"), "dfkap", 0, S::npos);
-    test(S("clbao"), "ihqrfebgad", 0, S::npos);
-    test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, 0);
-    test(S("srdfq"), "", 1, S::npos);
-    test(S("oemth"), "ikcrq", 1, S::npos);
-    test(S("cdaih"), "dmajblfhsg", 1, 1);
-    test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, 1);
-    test(S("cshmd"), "", 2, S::npos);
-    test(S("lhcdo"), "oebqi", 2, S::npos);
-    test(S("qnsoh"), "kojhpmbsfe", 2, 2);
-    test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, 2);
-    test(S("fmtsp"), "", 4, S::npos);
-    test(S("khbpm"), "aobjd", 4, 2);
-    test(S("pbsji"), "pcbahntsje", 4, 3);
-    test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, 4);
-    test(S("eqmpa"), "", 5, S::npos);
-    test(S("omigs"), "kocgb", 5, 3);
-    test(S("onmje"), "fbslrjiqkm", 5, 3);
-    test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, 4);
-    test(S("schfa"), "", 6, S::npos);
-    test(S("igdsc"), "qngpd", 6, 2);
-    test(S("brqgo"), "rodhqklgmb", 6, 4);
-    test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, 4);
-    test(S("hcjitbfapl"), "", 0, S::npos);
-    test(S("daiprenocl"), "ashjd", 0, 0);
-    test(S("litpcfdghe"), "mgojkldsqh", 0, 0);
-    test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, 0);
-    test(S("qpghtfbaji"), "", 1, S::npos);
-    test(S("gfshlcmdjr"), "nadkh", 1, S::npos);
-    test(S("nkodajteqp"), "ofdrqmkebl", 1, 1);
-    test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, 1);
-    test(S("crnklpmegd"), "", 5, S::npos);
-    test(S("jsbtafedoc"), "prqgn", 5, S::npos);
-    test(S("qnmodrtkeb"), "pejafmnokr", 5, 5);
-    test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, 5);
-    test(S("lmofqdhpki"), "", 9, S::npos);
-    test(S("hnefkqimca"), "rtjpa", 9, 9);
-    test(S("drtasbgmfp"), "ktsrmnqagd", 9, 7);
-    test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, 9);
-    test(S("elgofjmbrq"), "", 10, S::npos);
-    test(S("mjqdgalkpc"), "dplqa", 10, 8);
-    test(S("kthqnfcerm"), "dkacjoptns", 10, 6);
-    test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, 9);
-    test(S("eqsgalomhb"), "", 11, S::npos);
-    test(S("akiteljmoh"), "lofbc", 11, 8);
-    test(S("hlbdfreqjo"), "astoegbfpn", 11, 9);
-    test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, 9);
-    test(S("snafbdlghrjkpqtoceim"), "", 0, S::npos);
-    test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, S::npos);
-    test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, 0);
-    test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, 0);
-    test(S("jlnkraeodhcspfgbqitm"), "", 1, S::npos);
-    test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, S::npos);
-    test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 1);
-    test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, 1);
-    test(S("hdpkobnsalmcfijregtq"), "", 10, S::npos);
-    test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 10);
-    test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 10);
-    test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, 10);
-    test(S("niptglfbosehkamrdqcj"), "", 19, S::npos);
-    test(S("copqdhstbingamjfkler"), "djkqc", 19, 16);
-    test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, 19);
-    test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, 19);
-    test(S("eaintpchlqsbdgrkjofm"), "", 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, 19);
-    test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, 18);
-    test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, 19);
-    test(S("liatsqdoegkmfcnbhrpj"), "", 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, 12);
-    test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, 17);
-    test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, 19);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), "", 0, S::npos);
+  test(S(""), "laenf", 0, S::npos);
+  test(S(""), "pqlnkmbdjo", 0, S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
+  test(S(""), "", 1, S::npos);
+  test(S(""), "bjaht", 1, S::npos);
+  test(S(""), "hjlcmgpket", 1, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
+  test(S("fodgq"), "", 0, S::npos);
+  test(S("qanej"), "dfkap", 0, S::npos);
+  test(S("clbao"), "ihqrfebgad", 0, S::npos);
+  test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, 0);
+  test(S("srdfq"), "", 1, S::npos);
+  test(S("oemth"), "ikcrq", 1, S::npos);
+  test(S("cdaih"), "dmajblfhsg", 1, 1);
+  test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, 1);
+  test(S("cshmd"), "", 2, S::npos);
+  test(S("lhcdo"), "oebqi", 2, S::npos);
+  test(S("qnsoh"), "kojhpmbsfe", 2, 2);
+  test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, 2);
+  test(S("fmtsp"), "", 4, S::npos);
+  test(S("khbpm"), "aobjd", 4, 2);
+  test(S("pbsji"), "pcbahntsje", 4, 3);
+  test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, 4);
+  test(S("eqmpa"), "", 5, S::npos);
+  test(S("omigs"), "kocgb", 5, 3);
+  test(S("onmje"), "fbslrjiqkm", 5, 3);
+  test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, 4);
+  test(S("schfa"), "", 6, S::npos);
+  test(S("igdsc"), "qngpd", 6, 2);
+  test(S("brqgo"), "rodhqklgmb", 6, 4);
+  test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, 4);
+  test(S("hcjitbfapl"), "", 0, S::npos);
+  test(S("daiprenocl"), "ashjd", 0, 0);
+  test(S("litpcfdghe"), "mgojkldsqh", 0, 0);
+  test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, 0);
+  test(S("qpghtfbaji"), "", 1, S::npos);
+  test(S("gfshlcmdjr"), "nadkh", 1, S::npos);
+  test(S("nkodajteqp"), "ofdrqmkebl", 1, 1);
+  test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, 1);
+  test(S("crnklpmegd"), "", 5, S::npos);
+  test(S("jsbtafedoc"), "prqgn", 5, S::npos);
+  test(S("qnmodrtkeb"), "pejafmnokr", 5, 5);
+  test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, 5);
+  test(S("lmofqdhpki"), "", 9, S::npos);
+  test(S("hnefkqimca"), "rtjpa", 9, 9);
+  test(S("drtasbgmfp"), "ktsrmnqagd", 9, 7);
+  test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, 9);
+  test(S("elgofjmbrq"), "", 10, S::npos);
+  test(S("mjqdgalkpc"), "dplqa", 10, 8);
+  test(S("kthqnfcerm"), "dkacjoptns", 10, 6);
+  test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, 9);
+  test(S("eqsgalomhb"), "", 11, S::npos);
+  test(S("akiteljmoh"), "lofbc", 11, 8);
+  test(S("hlbdfreqjo"), "astoegbfpn", 11, 9);
+  test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, 9);
+  test(S("snafbdlghrjkpqtoceim"), "", 0, S::npos);
+  test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, S::npos);
+  test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, 0);
+  test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, 0);
+  test(S("jlnkraeodhcspfgbqitm"), "", 1, S::npos);
+  test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, S::npos);
+  test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 1);
+  test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, 1);
+  test(S("hdpkobnsalmcfijregtq"), "", 10, S::npos);
+  test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 10);
+  test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 10);
+  test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, 10);
+  test(S("niptglfbosehkamrdqcj"), "", 19, S::npos);
+  test(S("copqdhstbingamjfkler"), "djkqc", 19, 16);
+  test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, 19);
+  test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, 19);
+  test(S("eaintpchlqsbdgrkjofm"), "", 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, 19);
+  test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, 18);
+  test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, 19);
+  test(S("liatsqdoegkmfcnbhrpj"), "", 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, 12);
+  test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, 17);
+  test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, 19);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), "", S::npos);
-    test(S(""), "laenf", S::npos);
-    test(S(""), "pqlnkmbdjo", S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", S::npos);
-    test(S("nhmko"), "", S::npos);
-    test(S("lahfb"), "irkhs", 2);
-    test(S("gmfhd"), "kantesmpgj", 1);
-    test(S("odaft"), "oknlrstdpiqmjbaghcfe", 4);
-    test(S("eolhfgpjqk"), "", S::npos);
-    test(S("nbatdlmekr"), "bnrpe", 9);
-    test(S("jdmciepkaq"), "jtdaefblso", 8);
-    test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", 9);
-    test(S("gprdcokbnjhlsfmtieqa"), "", S::npos);
-    test(S("qjghlnftcaismkropdeb"), "bjaht", 19);
-    test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 19);
-    test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", 19);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), "", S::npos);
+  test(S(""), "laenf", S::npos);
+  test(S(""), "pqlnkmbdjo", S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", S::npos);
+  test(S("nhmko"), "", S::npos);
+  test(S("lahfb"), "irkhs", 2);
+  test(S("gmfhd"), "kantesmpgj", 1);
+  test(S("odaft"), "oknlrstdpiqmjbaghcfe", 4);
+  test(S("eolhfgpjqk"), "", S::npos);
+  test(S("nbatdlmekr"), "bnrpe", 9);
+  test(S("jdmciepkaq"), "jtdaefblso", 8);
+  test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", 9);
+  test(S("gprdcokbnjhlsfmtieqa"), "", S::npos);
+  test(S("qjghlnftcaismkropdeb"), "bjaht", 19);
+  test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 19);
+  test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", 19);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -160,8 +154,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size_size.pass.cpp
index 5ab9ed57ccd0221..2c015bf17231a03 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/pointer_size_size.pass.cpp
@@ -18,353 +18,351 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type n, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str, pos, n));
-    assert(s.find_last_of(str, pos, n) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+test(const S& s,
+     const typename S::value_type* str,
+     typename S::size_type pos,
+     typename S::size_type n,
+     typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str, pos, n));
+  assert(s.find_last_of(str, pos, n) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), "", 0, 0, S::npos);
-    test(S(""), "irkhs", 0, 0, S::npos);
-    test(S(""), "kante", 0, 1, S::npos);
-    test(S(""), "oknlr", 0, 2, S::npos);
-    test(S(""), "pcdro", 0, 4, S::npos);
-    test(S(""), "bnrpe", 0, 5, S::npos);
-    test(S(""), "jtdaefblso", 0, 0, S::npos);
-    test(S(""), "oselktgbca", 0, 1, S::npos);
-    test(S(""), "eqgaplhckj", 0, 5, S::npos);
-    test(S(""), "bjahtcmnlp", 0, 9, S::npos);
-    test(S(""), "hjlcmgpket", 0, 10, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
-    test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
-    test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
-    test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
-    test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
-    test(S(""), "", 1, 0, S::npos);
-    test(S(""), "lbtqd", 1, 0, S::npos);
-    test(S(""), "tboim", 1, 1, S::npos);
-    test(S(""), "slcer", 1, 2, S::npos);
-    test(S(""), "cbjfs", 1, 4, S::npos);
-    test(S(""), "aqibs", 1, 5, S::npos);
-    test(S(""), "gtfblmqinc", 1, 0, S::npos);
-    test(S(""), "mkqpbtdalg", 1, 1, S::npos);
-    test(S(""), "kphatlimcd", 1, 5, S::npos);
-    test(S(""), "pblasqogic", 1, 9, S::npos);
-    test(S(""), "arosdhcfme", 1, 10, S::npos);
-    test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
-    test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
-    test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
-    test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
-    test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
-    test(S("eaint"), "", 0, 0, S::npos);
-    test(S("binja"), "gfsrt", 0, 0, S::npos);
-    test(S("latkm"), "pfsoc", 0, 1, S::npos);
-    test(S("lecfr"), "tpflm", 0, 2, S::npos);
-    test(S("eqkst"), "sgkec", 0, 4, 0);
-    test(S("cdafr"), "romds", 0, 5, S::npos);
-    test(S("prbhe"), "qhjistlgmr", 0, 0, S::npos);
-    test(S("lbisk"), "pedfirsglo", 0, 1, S::npos);
-    test(S("hrlpd"), "aqcoslgrmk", 0, 5, S::npos);
-    test(S("ehmja"), "dabckmepqj", 0, 9, 0);
-    test(S("mhqgd"), "pqscrjthli", 0, 10, S::npos);
-    test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, S::npos);
-    test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, S::npos);
-    test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, S::npos);
-    test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, 0);
-    test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, 0);
-    test(S("clrgb"), "", 1, 0, S::npos);
-    test(S("tjmek"), "osmia", 1, 0, S::npos);
-    test(S("bgstp"), "ckonl", 1, 1, S::npos);
-    test(S("hstrk"), "ilcaj", 1, 2, S::npos);
-    test(S("kmspj"), "lasiq", 1, 4, S::npos);
-    test(S("tjboh"), "kfqmr", 1, 5, S::npos);
-    test(S("ilbcj"), "klnitfaobg", 1, 0, S::npos);
-    test(S("jkngf"), "gjhmdlqikp", 1, 1, S::npos);
-    test(S("gfcql"), "skbgtahqej", 1, 5, 0);
-    test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 0);
-    test(S("bthpg"), "bjgfmnlkio", 1, 10, 0);
-    test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, S::npos);
-    test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, S::npos);
-    test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 1);
-    test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, 1);
-    test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, 1);
-    test(S("ndrhl"), "", 2, 0, S::npos);
-    test(S("mrecp"), "otkgb", 2, 0, S::npos);
-    test(S("qlasf"), "cqsjl", 2, 1, S::npos);
-    test(S("smaqd"), "dpifl", 2, 2, S::npos);
-    test(S("hjeni"), "oapht", 2, 4, 0);
-    test(S("ocmfj"), "cifts", 2, 5, 1);
-    test(S("hmftq"), "nmsckbgalo", 2, 0, S::npos);
-    test(S("fklad"), "tpksqhamle", 2, 1, S::npos);
-    test(S("dirnm"), "tpdrchmkji", 2, 5, 2);
-    test(S("hrgdc"), "ijagfkblst", 2, 9, 2);
-    test(S("ifakg"), "kpocsignjb", 2, 10, 0);
-    test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, S::npos);
-    test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, S::npos);
-    test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 1);
-    test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, 2);
-    test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, 2);
-    test(S("cjgao"), "", 4, 0, S::npos);
-    test(S("kjplq"), "mabns", 4, 0, S::npos);
-    test(S("herni"), "bdnrp", 4, 1, S::npos);
-    test(S("tadrb"), "scidp", 4, 2, S::npos);
-    test(S("pkfeo"), "agbjl", 4, 4, S::npos);
-    test(S("hoser"), "jfmpr", 4, 5, 4);
-    test(S("kgrsp"), "rbpefghsmj", 4, 0, S::npos);
-    test(S("pgejb"), "apsfntdoqc", 4, 1, S::npos);
-    test(S("thlnq"), "ndkjeisgcl", 4, 5, 3);
-    test(S("nbmit"), "rnfpqatdeo", 4, 9, 4);
-    test(S("jgmib"), "bntjlqrfik", 4, 10, 4);
-    test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, S::npos);
-    test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, S::npos);
-    test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 4);
-    test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 4);
-    test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, 4);
-    test(S("klopi"), "", 5, 0, S::npos);
-    test(S("dajhn"), "psthd", 5, 0, S::npos);
-    test(S("jbgno"), "rpmjd", 5, 1, S::npos);
-    test(S("hkjae"), "dfsmk", 5, 2, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), "", 0, 0, S::npos);
+  test(S(""), "irkhs", 0, 0, S::npos);
+  test(S(""), "kante", 0, 1, S::npos);
+  test(S(""), "oknlr", 0, 2, S::npos);
+  test(S(""), "pcdro", 0, 4, S::npos);
+  test(S(""), "bnrpe", 0, 5, S::npos);
+  test(S(""), "jtdaefblso", 0, 0, S::npos);
+  test(S(""), "oselktgbca", 0, 1, S::npos);
+  test(S(""), "eqgaplhckj", 0, 5, S::npos);
+  test(S(""), "bjahtcmnlp", 0, 9, S::npos);
+  test(S(""), "hjlcmgpket", 0, 10, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
+  test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
+  test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
+  test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
+  test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
+  test(S(""), "", 1, 0, S::npos);
+  test(S(""), "lbtqd", 1, 0, S::npos);
+  test(S(""), "tboim", 1, 1, S::npos);
+  test(S(""), "slcer", 1, 2, S::npos);
+  test(S(""), "cbjfs", 1, 4, S::npos);
+  test(S(""), "aqibs", 1, 5, S::npos);
+  test(S(""), "gtfblmqinc", 1, 0, S::npos);
+  test(S(""), "mkqpbtdalg", 1, 1, S::npos);
+  test(S(""), "kphatlimcd", 1, 5, S::npos);
+  test(S(""), "pblasqogic", 1, 9, S::npos);
+  test(S(""), "arosdhcfme", 1, 10, S::npos);
+  test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
+  test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
+  test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
+  test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
+  test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
+  test(S("eaint"), "", 0, 0, S::npos);
+  test(S("binja"), "gfsrt", 0, 0, S::npos);
+  test(S("latkm"), "pfsoc", 0, 1, S::npos);
+  test(S("lecfr"), "tpflm", 0, 2, S::npos);
+  test(S("eqkst"), "sgkec", 0, 4, 0);
+  test(S("cdafr"), "romds", 0, 5, S::npos);
+  test(S("prbhe"), "qhjistlgmr", 0, 0, S::npos);
+  test(S("lbisk"), "pedfirsglo", 0, 1, S::npos);
+  test(S("hrlpd"), "aqcoslgrmk", 0, 5, S::npos);
+  test(S("ehmja"), "dabckmepqj", 0, 9, 0);
+  test(S("mhqgd"), "pqscrjthli", 0, 10, S::npos);
+  test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, S::npos);
+  test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, S::npos);
+  test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, S::npos);
+  test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, 0);
+  test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, 0);
+  test(S("clrgb"), "", 1, 0, S::npos);
+  test(S("tjmek"), "osmia", 1, 0, S::npos);
+  test(S("bgstp"), "ckonl", 1, 1, S::npos);
+  test(S("hstrk"), "ilcaj", 1, 2, S::npos);
+  test(S("kmspj"), "lasiq", 1, 4, S::npos);
+  test(S("tjboh"), "kfqmr", 1, 5, S::npos);
+  test(S("ilbcj"), "klnitfaobg", 1, 0, S::npos);
+  test(S("jkngf"), "gjhmdlqikp", 1, 1, S::npos);
+  test(S("gfcql"), "skbgtahqej", 1, 5, 0);
+  test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 0);
+  test(S("bthpg"), "bjgfmnlkio", 1, 10, 0);
+  test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, S::npos);
+  test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, S::npos);
+  test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 1);
+  test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, 1);
+  test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, 1);
+  test(S("ndrhl"), "", 2, 0, S::npos);
+  test(S("mrecp"), "otkgb", 2, 0, S::npos);
+  test(S("qlasf"), "cqsjl", 2, 1, S::npos);
+  test(S("smaqd"), "dpifl", 2, 2, S::npos);
+  test(S("hjeni"), "oapht", 2, 4, 0);
+  test(S("ocmfj"), "cifts", 2, 5, 1);
+  test(S("hmftq"), "nmsckbgalo", 2, 0, S::npos);
+  test(S("fklad"), "tpksqhamle", 2, 1, S::npos);
+  test(S("dirnm"), "tpdrchmkji", 2, 5, 2);
+  test(S("hrgdc"), "ijagfkblst", 2, 9, 2);
+  test(S("ifakg"), "kpocsignjb", 2, 10, 0);
+  test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, S::npos);
+  test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, S::npos);
+  test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 1);
+  test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, 2);
+  test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, 2);
+  test(S("cjgao"), "", 4, 0, S::npos);
+  test(S("kjplq"), "mabns", 4, 0, S::npos);
+  test(S("herni"), "bdnrp", 4, 1, S::npos);
+  test(S("tadrb"), "scidp", 4, 2, S::npos);
+  test(S("pkfeo"), "agbjl", 4, 4, S::npos);
+  test(S("hoser"), "jfmpr", 4, 5, 4);
+  test(S("kgrsp"), "rbpefghsmj", 4, 0, S::npos);
+  test(S("pgejb"), "apsfntdoqc", 4, 1, S::npos);
+  test(S("thlnq"), "ndkjeisgcl", 4, 5, 3);
+  test(S("nbmit"), "rnfpqatdeo", 4, 9, 4);
+  test(S("jgmib"), "bntjlqrfik", 4, 10, 4);
+  test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, S::npos);
+  test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, S::npos);
+  test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 4);
+  test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 4);
+  test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, 4);
+  test(S("klopi"), "", 5, 0, S::npos);
+  test(S("dajhn"), "psthd", 5, 0, S::npos);
+  test(S("jbgno"), "rpmjd", 5, 1, S::npos);
+  test(S("hkjae"), "dfsmk", 5, 2, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S("gbhqo"), "skqne", 5, 4, 3);
-    test(S("ktdor"), "kipnf", 5, 5, 0);
-    test(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos);
-    test(S("egmjk"), "fsmjcdairn", 5, 1, S::npos);
-    test(S("armql"), "pcdgltbrfj", 5, 5, 4);
-    test(S("cdhjo"), "aekfctpirg", 5, 9, 0);
-    test(S("jcons"), "ledihrsgpf", 5, 10, 4);
-    test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos);
-    test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos);
-    test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, 4);
-    test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, 4);
-    test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, 4);
-    test(S("gajqn"), "", 6, 0, S::npos);
-    test(S("stedk"), "hrnat", 6, 0, S::npos);
-    test(S("tjkaf"), "gsqdt", 6, 1, S::npos);
-    test(S("dthpe"), "bspkd", 6, 2, S::npos);
-    test(S("klhde"), "ohcmb", 6, 4, 2);
-    test(S("bhlki"), "heatr", 6, 5, 1);
-    test(S("lqmoh"), "pmblckedfn", 6, 0, S::npos);
-    test(S("mtqin"), "aceqmsrbik", 6, 1, S::npos);
-    test(S("dpqbr"), "lmbtdehjrn", 6, 5, 3);
-    test(S("kdhmo"), "teqmcrlgib", 6, 9, 3);
-    test(S("jblqp"), "njolbmspac", 6, 10, 4);
-    test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos);
-    test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos);
-    test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, 4);
-    test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, 4);
-    test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, 4);
-    test(S("jnkrfhotgl"), "", 0, 0, S::npos);
-    test(S("dltjfngbko"), "rqegt", 0, 0, S::npos);
-    test(S("bmjlpkiqde"), "dashm", 0, 1, S::npos);
-    test(S("skrflobnqm"), "jqirk", 0, 2, S::npos);
-    test(S("jkpldtshrm"), "rckeg", 0, 4, S::npos);
-    test(S("ghasdbnjqo"), "jscie", 0, 5, S::npos);
-    test(S("igrkhpbqjt"), "efsphndliq", 0, 0, S::npos);
-    test(S("ikthdgcamf"), "gdicosleja", 0, 1, S::npos);
-    test(S("pcofgeniam"), "qcpjibosfl", 0, 5, 0);
-    test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 0);
-    test(S("itphbqsker"), "dtablcrseo", 0, 10, S::npos);
-    test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, S::npos);
-    test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, S::npos);
-    test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, S::npos);
-    test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 0);
-    test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, 0);
-    test(S("shbcqnmoar"), "", 1, 0, S::npos);
-    test(S("bdoshlmfin"), "ontrs", 1, 0, S::npos);
-    test(S("khfrebnsgq"), "pfkna", 1, 1, S::npos);
-    test(S("getcrsaoji"), "ekosa", 1, 2, 1);
-    test(S("fjiknedcpq"), "anqhk", 1, 4, S::npos);
-    test(S("tkejgnafrm"), "jekca", 1, 5, 1);
-    test(S("jnakolqrde"), "ikemsjgacf", 1, 0, S::npos);
-    test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, S::npos);
-    test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 1);
-    test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 0);
-    test(S("cigfqkated"), "sqcflrgtim", 1, 10, 1);
-    test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, S::npos);
-    test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, S::npos);
-    test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 1);
-    test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 1);
-    test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, 1);
-    test(S("ectnhskflp"), "", 5, 0, S::npos);
-    test(S("fgtianblpq"), "pijag", 5, 0, S::npos);
-    test(S("mfeqklirnh"), "jrckd", 5, 1, S::npos);
-    test(S("astedncjhk"), "qcloh", 5, 2, S::npos);
-    test(S("fhlqgcajbr"), "thlmp", 5, 4, 2);
-    test(S("epfhocmdng"), "qidmo", 5, 5, 4);
-    test(S("apcnsibger"), "lnegpsjqrd", 5, 0, S::npos);
-    test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 5);
-    test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, S::npos);
-    test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 5);
-    test(S("jbhcfposld"), "trfqgmckbe", 5, 10, 4);
-    test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, S::npos);
-    test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, S::npos);
-    test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 5);
-    test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 5);
-    test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, 5);
-    test(S("shoiedtcjb"), "", 9, 0, S::npos);
-    test(S("ebcinjgads"), "tqbnh", 9, 0, S::npos);
-    test(S("dqmregkcfl"), "akmle", 9, 1, S::npos);
-    test(S("ngcrieqajf"), "iqfkm", 9, 2, 6);
-    test(S("qosmilgnjb"), "tqjsr", 9, 4, 8);
-    test(S("ikabsjtdfl"), "jplqg", 9, 5, 9);
-    test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, S::npos);
-    test(S("fdnplotmgh"), "morkglpesn", 9, 1, 7);
-    test(S("fdbicojerm"), "dmicerngat", 9, 5, 9);
-    test(S("mbtafndjcq"), "radgeskbtc", 9, 9, 6);
-    test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 5);
-    test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, S::npos);
-    test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 6);
-    test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 7);
-    test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 9);
-    test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, 9);
-    test(S("ncjpmaekbs"), "", 10, 0, S::npos);
-    test(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos);
-    test(S("pqfhsgilen"), "qnpor", 10, 1, 1);
-    test(S("gqtjsbdckh"), "otdma", 10, 2, 2);
-    test(S("cfkqpjlegi"), "efhjg", 10, 4, 7);
-    test(S("beanrfodgj"), "odpte", 10, 5, 7);
-    test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos);
-    test(S("iomkfthagj"), "oaklidrbqg", 10, 1, 1);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S("gbhqo"), "skqne", 5, 4, 3);
+  test(S("ktdor"), "kipnf", 5, 5, 0);
+  test(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos);
+  test(S("egmjk"), "fsmjcdairn", 5, 1, S::npos);
+  test(S("armql"), "pcdgltbrfj", 5, 5, 4);
+  test(S("cdhjo"), "aekfctpirg", 5, 9, 0);
+  test(S("jcons"), "ledihrsgpf", 5, 10, 4);
+  test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos);
+  test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos);
+  test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, 4);
+  test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, 4);
+  test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, 4);
+  test(S("gajqn"), "", 6, 0, S::npos);
+  test(S("stedk"), "hrnat", 6, 0, S::npos);
+  test(S("tjkaf"), "gsqdt", 6, 1, S::npos);
+  test(S("dthpe"), "bspkd", 6, 2, S::npos);
+  test(S("klhde"), "ohcmb", 6, 4, 2);
+  test(S("bhlki"), "heatr", 6, 5, 1);
+  test(S("lqmoh"), "pmblckedfn", 6, 0, S::npos);
+  test(S("mtqin"), "aceqmsrbik", 6, 1, S::npos);
+  test(S("dpqbr"), "lmbtdehjrn", 6, 5, 3);
+  test(S("kdhmo"), "teqmcrlgib", 6, 9, 3);
+  test(S("jblqp"), "njolbmspac", 6, 10, 4);
+  test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos);
+  test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos);
+  test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, 4);
+  test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, 4);
+  test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, 4);
+  test(S("jnkrfhotgl"), "", 0, 0, S::npos);
+  test(S("dltjfngbko"), "rqegt", 0, 0, S::npos);
+  test(S("bmjlpkiqde"), "dashm", 0, 1, S::npos);
+  test(S("skrflobnqm"), "jqirk", 0, 2, S::npos);
+  test(S("jkpldtshrm"), "rckeg", 0, 4, S::npos);
+  test(S("ghasdbnjqo"), "jscie", 0, 5, S::npos);
+  test(S("igrkhpbqjt"), "efsphndliq", 0, 0, S::npos);
+  test(S("ikthdgcamf"), "gdicosleja", 0, 1, S::npos);
+  test(S("pcofgeniam"), "qcpjibosfl", 0, 5, 0);
+  test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 0);
+  test(S("itphbqsker"), "dtablcrseo", 0, 10, S::npos);
+  test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, S::npos);
+  test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, S::npos);
+  test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, S::npos);
+  test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 0);
+  test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, 0);
+  test(S("shbcqnmoar"), "", 1, 0, S::npos);
+  test(S("bdoshlmfin"), "ontrs", 1, 0, S::npos);
+  test(S("khfrebnsgq"), "pfkna", 1, 1, S::npos);
+  test(S("getcrsaoji"), "ekosa", 1, 2, 1);
+  test(S("fjiknedcpq"), "anqhk", 1, 4, S::npos);
+  test(S("tkejgnafrm"), "jekca", 1, 5, 1);
+  test(S("jnakolqrde"), "ikemsjgacf", 1, 0, S::npos);
+  test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, S::npos);
+  test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 1);
+  test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 0);
+  test(S("cigfqkated"), "sqcflrgtim", 1, 10, 1);
+  test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, S::npos);
+  test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, S::npos);
+  test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 1);
+  test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 1);
+  test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, 1);
+  test(S("ectnhskflp"), "", 5, 0, S::npos);
+  test(S("fgtianblpq"), "pijag", 5, 0, S::npos);
+  test(S("mfeqklirnh"), "jrckd", 5, 1, S::npos);
+  test(S("astedncjhk"), "qcloh", 5, 2, S::npos);
+  test(S("fhlqgcajbr"), "thlmp", 5, 4, 2);
+  test(S("epfhocmdng"), "qidmo", 5, 5, 4);
+  test(S("apcnsibger"), "lnegpsjqrd", 5, 0, S::npos);
+  test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 5);
+  test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, S::npos);
+  test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 5);
+  test(S("jbhcfposld"), "trfqgmckbe", 5, 10, 4);
+  test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, S::npos);
+  test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, S::npos);
+  test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 5);
+  test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 5);
+  test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, 5);
+  test(S("shoiedtcjb"), "", 9, 0, S::npos);
+  test(S("ebcinjgads"), "tqbnh", 9, 0, S::npos);
+  test(S("dqmregkcfl"), "akmle", 9, 1, S::npos);
+  test(S("ngcrieqajf"), "iqfkm", 9, 2, 6);
+  test(S("qosmilgnjb"), "tqjsr", 9, 4, 8);
+  test(S("ikabsjtdfl"), "jplqg", 9, 5, 9);
+  test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, S::npos);
+  test(S("fdnplotmgh"), "morkglpesn", 9, 1, 7);
+  test(S("fdbicojerm"), "dmicerngat", 9, 5, 9);
+  test(S("mbtafndjcq"), "radgeskbtc", 9, 9, 6);
+  test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 5);
+  test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, S::npos);
+  test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 6);
+  test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 7);
+  test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 9);
+  test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, 9);
+  test(S("ncjpmaekbs"), "", 10, 0, S::npos);
+  test(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos);
+  test(S("pqfhsgilen"), "qnpor", 10, 1, 1);
+  test(S("gqtjsbdckh"), "otdma", 10, 2, 2);
+  test(S("cfkqpjlegi"), "efhjg", 10, 4, 7);
+  test(S("beanrfodgj"), "odpte", 10, 5, 7);
+  test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos);
+  test(S("iomkfthagj"), "oaklidrbqg", 10, 1, 1);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test2()
-{
-    test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, 9);
-    test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, 8);
-    test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, 9);
-    test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos);
-    test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, 8);
-    test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, 9);
-    test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, 9);
-    test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, 9);
-    test(S("cqjohampgd"), "", 11, 0, S::npos);
-    test(S("hobitmpsan"), "aocjb", 11, 0, S::npos);
-    test(S("tjehkpsalm"), "jbrnk", 11, 1, 1);
-    test(S("ngfbojitcl"), "tqedg", 11, 2, 7);
-    test(S("rcfkdbhgjo"), "nqskp", 11, 4, 3);
-    test(S("qghptonrea"), "eaqkl", 11, 5, 9);
-    test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos);
-    test(S("hlmgabenti"), "lsftgajqpm", 11, 1, 1);
-    test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, 7);
-    test(S("jqedtkornm"), "shkncmiaqj", 11, 9, 9);
-    test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, 9);
-    test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos);
-    test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos);
-    test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, 9);
-    test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, 9);
-    test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, 9);
-    test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, S::npos);
-    test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, S::npos);
-    test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, S::npos);
-    test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, S::npos);
-    test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, S::npos);
-    test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, S::npos);
-    test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, S::npos);
-    test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, S::npos);
-    test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, S::npos);
-    test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, S::npos);
-    test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, S::npos);
-    test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, S::npos);
-    test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, S::npos);
-    test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, S::npos);
-    test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 0);
-    test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, 0);
-    test(S("febhmqtjanokscdirpgl"), "", 1, 0, S::npos);
-    test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, S::npos);
-    test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, S::npos);
-    test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 1);
-    test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 1);
-    test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, S::npos);
-    test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, S::npos);
-    test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, S::npos);
-    test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, S::npos);
-    test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 1);
-    test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 1);
-    test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, S::npos);
-    test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, S::npos);
-    test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 1);
-    test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 1);
-    test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, 1);
-    test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, S::npos);
-    test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, S::npos);
-    test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, S::npos);
-    test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 7);
-    test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 10);
-    test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 6);
-    test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, S::npos);
-    test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 9);
-    test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 5);
-    test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 10);
-    test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 9);
-    test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, S::npos);
-    test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, S::npos);
-    test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 10);
-    test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 10);
-    test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, 10);
-    test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, S::npos);
-    test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, S::npos);
-    test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 16);
-    test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 7);
-    test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 16);
-    test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 19);
-    test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, S::npos);
-    test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 15);
-    test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 17);
-    test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 16);
-    test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 16);
-    test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, S::npos);
-    test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 10);
-    test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 19);
-    test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 19);
-    test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, 19);
-    test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos);
-    test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos);
-    test(S("grkpahljcftesdmonqib"), "odife", 20, 1, 15);
-    test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, 12);
-    test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, 19);
-    test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, 19);
-    test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos);
-    test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, 3);
-    test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, 19);
-    test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, 19);
-    test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, 19);
-    test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos);
+TEST_CONSTEXPR_CXX20 void test2() {
+  test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, 9);
+  test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, 8);
+  test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, 9);
+  test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos);
+  test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, 8);
+  test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, 9);
+  test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, 9);
+  test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, 9);
+  test(S("cqjohampgd"), "", 11, 0, S::npos);
+  test(S("hobitmpsan"), "aocjb", 11, 0, S::npos);
+  test(S("tjehkpsalm"), "jbrnk", 11, 1, 1);
+  test(S("ngfbojitcl"), "tqedg", 11, 2, 7);
+  test(S("rcfkdbhgjo"), "nqskp", 11, 4, 3);
+  test(S("qghptonrea"), "eaqkl", 11, 5, 9);
+  test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos);
+  test(S("hlmgabenti"), "lsftgajqpm", 11, 1, 1);
+  test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, 7);
+  test(S("jqedtkornm"), "shkncmiaqj", 11, 9, 9);
+  test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, 9);
+  test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos);
+  test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos);
+  test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, 9);
+  test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, 9);
+  test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, 9);
+  test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, S::npos);
+  test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, S::npos);
+  test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, S::npos);
+  test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, S::npos);
+  test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, S::npos);
+  test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, S::npos);
+  test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, S::npos);
+  test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, S::npos);
+  test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, S::npos);
+  test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, S::npos);
+  test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, S::npos);
+  test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, S::npos);
+  test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, S::npos);
+  test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, S::npos);
+  test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 0);
+  test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, 0);
+  test(S("febhmqtjanokscdirpgl"), "", 1, 0, S::npos);
+  test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, S::npos);
+  test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, S::npos);
+  test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 1);
+  test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 1);
+  test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, S::npos);
+  test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, S::npos);
+  test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, S::npos);
+  test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, S::npos);
+  test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 1);
+  test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 1);
+  test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, S::npos);
+  test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, S::npos);
+  test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 1);
+  test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 1);
+  test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, 1);
+  test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, S::npos);
+  test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, S::npos);
+  test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, S::npos);
+  test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 7);
+  test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 10);
+  test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 6);
+  test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, S::npos);
+  test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 9);
+  test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 5);
+  test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 10);
+  test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 9);
+  test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, S::npos);
+  test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, S::npos);
+  test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 10);
+  test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 10);
+  test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, 10);
+  test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, S::npos);
+  test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, S::npos);
+  test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 16);
+  test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 7);
+  test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 16);
+  test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 19);
+  test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, S::npos);
+  test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 15);
+  test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 17);
+  test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 16);
+  test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 16);
+  test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, S::npos);
+  test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 10);
+  test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 19);
+  test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 19);
+  test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, 19);
+  test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos);
+  test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos);
+  test(S("grkpahljcftesdmonqib"), "odife", 20, 1, 15);
+  test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, 12);
+  test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, 19);
+  test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, 19);
+  test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos);
+  test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, 3);
+  test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, 19);
+  test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, 19);
+  test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, 19);
+  test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test3()
-{
-    test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, 4);
-    test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, 17);
-    test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, 19);
-    test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, 19);
-    test(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos);
-    test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos);
-    test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, 6);
-    test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, 13);
-    test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, 10);
-    test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, 17);
-    test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos);
-    test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, 14);
-    test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, 19);
-    test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, 14);
-    test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, 16);
-    test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos);
-    test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, 17);
-    test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, 17);
-    test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, 19);
-    test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, 19);
+TEST_CONSTEXPR_CXX20 void test3() {
+  test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, 4);
+  test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, 17);
+  test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, 19);
+  test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, 19);
+  test(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos);
+  test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos);
+  test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, 6);
+  test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, 13);
+  test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, 10);
+  test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, 17);
+  test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos);
+  test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, 14);
+  test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, 19);
+  test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, 14);
+  test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, 16);
+  test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos);
+  test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, 17);
+  test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, 17);
+  test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, 19);
+  test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, 19);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -388,8 +386,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_size.pass.cpp
index 5d0d63091a28a75..e12bcd7b1bb1bc6 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_size.pass.cpp
@@ -17,129 +17,123 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str, pos));
-    assert(s.find_last_of(str, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str, pos));
+  assert(s.find_last_of(str, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str));
-    assert(s.find_last_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str));
+  assert(s.find_last_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), S(""), 0, S::npos);
-    test(S(""), S("laenf"), 0, S::npos);
-    test(S(""), S("pqlnkmbdjo"), 0, S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
-    test(S(""), S(""), 1, S::npos);
-    test(S(""), S("bjaht"), 1, S::npos);
-    test(S(""), S("hjlcmgpket"), 1, S::npos);
-    test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
-    test(S("fodgq"), S(""), 0, S::npos);
-    test(S("qanej"), S("dfkap"), 0, S::npos);
-    test(S("clbao"), S("ihqrfebgad"), 0, S::npos);
-    test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, 0);
-    test(S("srdfq"), S(""), 1, S::npos);
-    test(S("oemth"), S("ikcrq"), 1, S::npos);
-    test(S("cdaih"), S("dmajblfhsg"), 1, 1);
-    test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, 1);
-    test(S("cshmd"), S(""), 2, S::npos);
-    test(S("lhcdo"), S("oebqi"), 2, S::npos);
-    test(S("qnsoh"), S("kojhpmbsfe"), 2, 2);
-    test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, 2);
-    test(S("fmtsp"), S(""), 4, S::npos);
-    test(S("khbpm"), S("aobjd"), 4, 2);
-    test(S("pbsji"), S("pcbahntsje"), 4, 3);
-    test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, 4);
-    test(S("eqmpa"), S(""), 5, S::npos);
-    test(S("omigs"), S("kocgb"), 5, 3);
-    test(S("onmje"), S("fbslrjiqkm"), 5, 3);
-    test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, 4);
-    test(S("schfa"), S(""), 6, S::npos);
-    test(S("igdsc"), S("qngpd"), 6, 2);
-    test(S("brqgo"), S("rodhqklgmb"), 6, 4);
-    test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, 4);
-    test(S("hcjitbfapl"), S(""), 0, S::npos);
-    test(S("daiprenocl"), S("ashjd"), 0, 0);
-    test(S("litpcfdghe"), S("mgojkldsqh"), 0, 0);
-    test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, 0);
-    test(S("qpghtfbaji"), S(""), 1, S::npos);
-    test(S("gfshlcmdjr"), S("nadkh"), 1, S::npos);
-    test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 1);
-    test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, 1);
-    test(S("crnklpmegd"), S(""), 5, S::npos);
-    test(S("jsbtafedoc"), S("prqgn"), 5, S::npos);
-    test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 5);
-    test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, 5);
-    test(S("lmofqdhpki"), S(""), 9, S::npos);
-    test(S("hnefkqimca"), S("rtjpa"), 9, 9);
-    test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, 7);
-    test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, 9);
-    test(S("elgofjmbrq"), S(""), 10, S::npos);
-    test(S("mjqdgalkpc"), S("dplqa"), 10, 8);
-    test(S("kthqnfcerm"), S("dkacjoptns"), 10, 6);
-    test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, 9);
-    test(S("eqsgalomhb"), S(""), 11, S::npos);
-    test(S("akiteljmoh"), S("lofbc"), 11, 8);
-    test(S("hlbdfreqjo"), S("astoegbfpn"), 11, 9);
-    test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, 9);
-    test(S("snafbdlghrjkpqtoceim"), S(""), 0, S::npos);
-    test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, S::npos);
-    test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, 0);
-    test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, 0);
-    test(S("jlnkraeodhcspfgbqitm"), S(""), 1, S::npos);
-    test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, S::npos);
-    test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 1);
-    test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, 1);
-    test(S("hdpkobnsalmcfijregtq"), S(""), 10, S::npos);
-    test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 10);
-    test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 10);
-    test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, 10);
-    test(S("niptglfbosehkamrdqcj"), S(""), 19, S::npos);
-    test(S("copqdhstbingamjfkler"), S("djkqc"), 19, 16);
-    test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, 19);
-    test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, 19);
-    test(S("eaintpchlqsbdgrkjofm"), S(""), 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, 19);
-    test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, 18);
-    test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, 19);
-    test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, 12);
-    test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, 17);
-    test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, 19);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), S(""), 0, S::npos);
+  test(S(""), S("laenf"), 0, S::npos);
+  test(S(""), S("pqlnkmbdjo"), 0, S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
+  test(S(""), S(""), 1, S::npos);
+  test(S(""), S("bjaht"), 1, S::npos);
+  test(S(""), S("hjlcmgpket"), 1, S::npos);
+  test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
+  test(S("fodgq"), S(""), 0, S::npos);
+  test(S("qanej"), S("dfkap"), 0, S::npos);
+  test(S("clbao"), S("ihqrfebgad"), 0, S::npos);
+  test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, 0);
+  test(S("srdfq"), S(""), 1, S::npos);
+  test(S("oemth"), S("ikcrq"), 1, S::npos);
+  test(S("cdaih"), S("dmajblfhsg"), 1, 1);
+  test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, 1);
+  test(S("cshmd"), S(""), 2, S::npos);
+  test(S("lhcdo"), S("oebqi"), 2, S::npos);
+  test(S("qnsoh"), S("kojhpmbsfe"), 2, 2);
+  test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, 2);
+  test(S("fmtsp"), S(""), 4, S::npos);
+  test(S("khbpm"), S("aobjd"), 4, 2);
+  test(S("pbsji"), S("pcbahntsje"), 4, 3);
+  test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, 4);
+  test(S("eqmpa"), S(""), 5, S::npos);
+  test(S("omigs"), S("kocgb"), 5, 3);
+  test(S("onmje"), S("fbslrjiqkm"), 5, 3);
+  test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, 4);
+  test(S("schfa"), S(""), 6, S::npos);
+  test(S("igdsc"), S("qngpd"), 6, 2);
+  test(S("brqgo"), S("rodhqklgmb"), 6, 4);
+  test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, 4);
+  test(S("hcjitbfapl"), S(""), 0, S::npos);
+  test(S("daiprenocl"), S("ashjd"), 0, 0);
+  test(S("litpcfdghe"), S("mgojkldsqh"), 0, 0);
+  test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, 0);
+  test(S("qpghtfbaji"), S(""), 1, S::npos);
+  test(S("gfshlcmdjr"), S("nadkh"), 1, S::npos);
+  test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 1);
+  test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, 1);
+  test(S("crnklpmegd"), S(""), 5, S::npos);
+  test(S("jsbtafedoc"), S("prqgn"), 5, S::npos);
+  test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 5);
+  test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, 5);
+  test(S("lmofqdhpki"), S(""), 9, S::npos);
+  test(S("hnefkqimca"), S("rtjpa"), 9, 9);
+  test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, 7);
+  test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, 9);
+  test(S("elgofjmbrq"), S(""), 10, S::npos);
+  test(S("mjqdgalkpc"), S("dplqa"), 10, 8);
+  test(S("kthqnfcerm"), S("dkacjoptns"), 10, 6);
+  test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, 9);
+  test(S("eqsgalomhb"), S(""), 11, S::npos);
+  test(S("akiteljmoh"), S("lofbc"), 11, 8);
+  test(S("hlbdfreqjo"), S("astoegbfpn"), 11, 9);
+  test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, 9);
+  test(S("snafbdlghrjkpqtoceim"), S(""), 0, S::npos);
+  test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, S::npos);
+  test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, 0);
+  test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, 0);
+  test(S("jlnkraeodhcspfgbqitm"), S(""), 1, S::npos);
+  test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, S::npos);
+  test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 1);
+  test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, 1);
+  test(S("hdpkobnsalmcfijregtq"), S(""), 10, S::npos);
+  test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 10);
+  test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 10);
+  test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, 10);
+  test(S("niptglfbosehkamrdqcj"), S(""), 19, S::npos);
+  test(S("copqdhstbingamjfkler"), S("djkqc"), 19, 16);
+  test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, 19);
+  test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, 19);
+  test(S("eaintpchlqsbdgrkjofm"), S(""), 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, 19);
+  test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, 18);
+  test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, 19);
+  test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, 12);
+  test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, 17);
+  test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, 19);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), S(""), S::npos);
-    test(S(""), S("laenf"), S::npos);
-    test(S(""), S("pqlnkmbdjo"), S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
-    test(S("nhmko"), S(""), S::npos);
-    test(S("lahfb"), S("irkhs"), 2);
-    test(S("gmfhd"), S("kantesmpgj"), 1);
-    test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), 4);
-    test(S("eolhfgpjqk"), S(""), S::npos);
-    test(S("nbatdlmekr"), S("bnrpe"), 9);
-    test(S("jdmciepkaq"), S("jtdaefblso"), 8);
-    test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), 9);
-    test(S("gprdcokbnjhlsfmtieqa"), S(""), S::npos);
-    test(S("qjghlnftcaismkropdeb"), S("bjaht"), 19);
-    test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 19);
-    test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), 19);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), S(""), S::npos);
+  test(S(""), S("laenf"), S::npos);
+  test(S(""), S("pqlnkmbdjo"), S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
+  test(S("nhmko"), S(""), S::npos);
+  test(S("lahfb"), S("irkhs"), 2);
+  test(S("gmfhd"), S("kantesmpgj"), 1);
+  test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), 4);
+  test(S("eolhfgpjqk"), S(""), S::npos);
+  test(S("nbatdlmekr"), S("bnrpe"), 9);
+  test(S("jdmciepkaq"), S("jtdaefblso"), 8);
+  test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), 9);
+  test(S("gprdcokbnjhlsfmtieqa"), S(""), S::npos);
+  test(S("qjghlnftcaismkropdeb"), S("bjaht"), 19);
+  test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 19);
+  test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), 19);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -166,8 +160,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_view_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_view_size.pass.cpp
index 24d85bc072e284b..a2b4fb1311166ba 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_view_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find.last.of/string_view_size.pass.cpp
@@ -17,129 +17,123 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(sv, pos));
-    assert(s.find_last_of(sv, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(sv, pos));
+  assert(s.find_last_of(sv, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(sv));
-    assert(s.find_last_of(sv) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(sv));
+  assert(s.find_last_of(sv) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), SV(""), 0, S::npos);
-    test(S(""), SV("laenf"), 0, S::npos);
-    test(S(""), SV("pqlnkmbdjo"), 0, S::npos);
-    test(S(""), SV("qkamfogpnljdcshbreti"), 0, S::npos);
-    test(S(""), SV(""), 1, S::npos);
-    test(S(""), SV("bjaht"), 1, S::npos);
-    test(S(""), SV("hjlcmgpket"), 1, S::npos);
-    test(S(""), SV("htaobedqikfplcgjsmrn"), 1, S::npos);
-    test(S("fodgq"), SV(""), 0, S::npos);
-    test(S("qanej"), SV("dfkap"), 0, S::npos);
-    test(S("clbao"), SV("ihqrfebgad"), 0, S::npos);
-    test(S("mekdn"), SV("ngtjfcalbseiqrphmkdo"), 0, 0);
-    test(S("srdfq"), SV(""), 1, S::npos);
-    test(S("oemth"), SV("ikcrq"), 1, S::npos);
-    test(S("cdaih"), SV("dmajblfhsg"), 1, 1);
-    test(S("qohtk"), SV("oqftjhdmkgsblacenirp"), 1, 1);
-    test(S("cshmd"), SV(""), 2, S::npos);
-    test(S("lhcdo"), SV("oebqi"), 2, S::npos);
-    test(S("qnsoh"), SV("kojhpmbsfe"), 2, 2);
-    test(S("pkrof"), SV("acbsjqogpltdkhinfrem"), 2, 2);
-    test(S("fmtsp"), SV(""), 4, S::npos);
-    test(S("khbpm"), SV("aobjd"), 4, 2);
-    test(S("pbsji"), SV("pcbahntsje"), 4, 3);
-    test(S("mprdj"), SV("fhepcrntkoagbmldqijs"), 4, 4);
-    test(S("eqmpa"), SV(""), 5, S::npos);
-    test(S("omigs"), SV("kocgb"), 5, 3);
-    test(S("onmje"), SV("fbslrjiqkm"), 5, 3);
-    test(S("oqmrj"), SV("jeidpcmalhfnqbgtrsko"), 5, 4);
-    test(S("schfa"), SV(""), 6, S::npos);
-    test(S("igdsc"), SV("qngpd"), 6, 2);
-    test(S("brqgo"), SV("rodhqklgmb"), 6, 4);
-    test(S("tnrph"), SV("thdjgafrlbkoiqcspmne"), 6, 4);
-    test(S("hcjitbfapl"), SV(""), 0, S::npos);
-    test(S("daiprenocl"), SV("ashjd"), 0, 0);
-    test(S("litpcfdghe"), SV("mgojkldsqh"), 0, 0);
-    test(S("aidjksrolc"), SV("imqnaghkfrdtlopbjesc"), 0, 0);
-    test(S("qpghtfbaji"), SV(""), 1, S::npos);
-    test(S("gfshlcmdjr"), SV("nadkh"), 1, S::npos);
-    test(S("nkodajteqp"), SV("ofdrqmkebl"), 1, 1);
-    test(S("gbmetiprqd"), SV("bdfjqgatlksriohemnpc"), 1, 1);
-    test(S("crnklpmegd"), SV(""), 5, S::npos);
-    test(S("jsbtafedoc"), SV("prqgn"), 5, S::npos);
-    test(S("qnmodrtkeb"), SV("pejafmnokr"), 5, 5);
-    test(S("cpebqsfmnj"), SV("odnqkgijrhabfmcestlp"), 5, 5);
-    test(S("lmofqdhpki"), SV(""), 9, S::npos);
-    test(S("hnefkqimca"), SV("rtjpa"), 9, 9);
-    test(S("drtasbgmfp"), SV("ktsrmnqagd"), 9, 7);
-    test(S("lsaijeqhtr"), SV("rtdhgcisbnmoaqkfpjle"), 9, 9);
-    test(S("elgofjmbrq"), SV(""), 10, S::npos);
-    test(S("mjqdgalkpc"), SV("dplqa"), 10, 8);
-    test(S("kthqnfcerm"), SV("dkacjoptns"), 10, 6);
-    test(S("dfsjhanorc"), SV("hqfimtrgnbekpdcsjalo"), 10, 9);
-    test(S("eqsgalomhb"), SV(""), 11, S::npos);
-    test(S("akiteljmoh"), SV("lofbc"), 11, 8);
-    test(S("hlbdfreqjo"), SV("astoegbfpn"), 11, 9);
-    test(S("taqobhlerg"), SV("pdgreqomsncafklhtibj"), 11, 9);
-    test(S("snafbdlghrjkpqtoceim"), SV(""), 0, S::npos);
-    test(S("aemtbrgcklhndjisfpoq"), SV("lbtqd"), 0, S::npos);
-    test(S("pnracgfkjdiholtbqsem"), SV("tboimldpjh"), 0, 0);
-    test(S("dicfltehbsgrmojnpkaq"), SV("slcerthdaiqjfnobgkpm"), 0, 0);
-    test(S("jlnkraeodhcspfgbqitm"), SV(""), 1, S::npos);
-    test(S("lhosrngtmfjikbqpcade"), SV("aqibs"), 1, S::npos);
-    test(S("rbtaqjhgkneisldpmfoc"), SV("gtfblmqinc"), 1, 1);
-    test(S("gpifsqlrdkbonjtmheca"), SV("mkqpbtdalgniorhfescj"), 1, 1);
-    test(S("hdpkobnsalmcfijregtq"), SV(""), 10, S::npos);
-    test(S("jtlshdgqaiprkbcoenfm"), SV("pblas"), 10, 10);
-    test(S("fkdrbqltsgmcoiphneaj"), SV("arosdhcfme"), 10, 10);
-    test(S("crsplifgtqedjohnabmk"), SV("blkhjeogicatqfnpdmsr"), 10, 10);
-    test(S("niptglfbosehkamrdqcj"), SV(""), 19, S::npos);
-    test(S("copqdhstbingamjfkler"), SV("djkqc"), 19, 16);
-    test(S("mrtaefilpdsgocnhqbjk"), SV("lgokshjtpb"), 19, 19);
-    test(S("kojatdhlcmigpbfrqnes"), SV("bqjhtkfepimcnsgrlado"), 19, 19);
-    test(S("eaintpchlqsbdgrkjofm"), SV(""), 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), SV("nocfa"), 20, 19);
-    test(S("spocfaktqdbiejlhngmr"), SV("bgtajmiedc"), 20, 18);
-    test(S("rphmlekgfscndtaobiqj"), SV("lsckfnqgdahejiopbtmr"), 20, 19);
-    test(S("liatsqdoegkmfcnbhrpj"), SV(""), 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), SV("gfsrt"), 21, 12);
-    test(S("latkmisecnorjbfhqpdg"), SV("pfsocbhjtm"), 21, 17);
-    test(S("lecfratdjkhnsmqpoigb"), SV("tpflmdnoicjgkberhqsa"), 21, 19);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), SV(""), 0, S::npos);
+  test(S(""), SV("laenf"), 0, S::npos);
+  test(S(""), SV("pqlnkmbdjo"), 0, S::npos);
+  test(S(""), SV("qkamfogpnljdcshbreti"), 0, S::npos);
+  test(S(""), SV(""), 1, S::npos);
+  test(S(""), SV("bjaht"), 1, S::npos);
+  test(S(""), SV("hjlcmgpket"), 1, S::npos);
+  test(S(""), SV("htaobedqikfplcgjsmrn"), 1, S::npos);
+  test(S("fodgq"), SV(""), 0, S::npos);
+  test(S("qanej"), SV("dfkap"), 0, S::npos);
+  test(S("clbao"), SV("ihqrfebgad"), 0, S::npos);
+  test(S("mekdn"), SV("ngtjfcalbseiqrphmkdo"), 0, 0);
+  test(S("srdfq"), SV(""), 1, S::npos);
+  test(S("oemth"), SV("ikcrq"), 1, S::npos);
+  test(S("cdaih"), SV("dmajblfhsg"), 1, 1);
+  test(S("qohtk"), SV("oqftjhdmkgsblacenirp"), 1, 1);
+  test(S("cshmd"), SV(""), 2, S::npos);
+  test(S("lhcdo"), SV("oebqi"), 2, S::npos);
+  test(S("qnsoh"), SV("kojhpmbsfe"), 2, 2);
+  test(S("pkrof"), SV("acbsjqogpltdkhinfrem"), 2, 2);
+  test(S("fmtsp"), SV(""), 4, S::npos);
+  test(S("khbpm"), SV("aobjd"), 4, 2);
+  test(S("pbsji"), SV("pcbahntsje"), 4, 3);
+  test(S("mprdj"), SV("fhepcrntkoagbmldqijs"), 4, 4);
+  test(S("eqmpa"), SV(""), 5, S::npos);
+  test(S("omigs"), SV("kocgb"), 5, 3);
+  test(S("onmje"), SV("fbslrjiqkm"), 5, 3);
+  test(S("oqmrj"), SV("jeidpcmalhfnqbgtrsko"), 5, 4);
+  test(S("schfa"), SV(""), 6, S::npos);
+  test(S("igdsc"), SV("qngpd"), 6, 2);
+  test(S("brqgo"), SV("rodhqklgmb"), 6, 4);
+  test(S("tnrph"), SV("thdjgafrlbkoiqcspmne"), 6, 4);
+  test(S("hcjitbfapl"), SV(""), 0, S::npos);
+  test(S("daiprenocl"), SV("ashjd"), 0, 0);
+  test(S("litpcfdghe"), SV("mgojkldsqh"), 0, 0);
+  test(S("aidjksrolc"), SV("imqnaghkfrdtlopbjesc"), 0, 0);
+  test(S("qpghtfbaji"), SV(""), 1, S::npos);
+  test(S("gfshlcmdjr"), SV("nadkh"), 1, S::npos);
+  test(S("nkodajteqp"), SV("ofdrqmkebl"), 1, 1);
+  test(S("gbmetiprqd"), SV("bdfjqgatlksriohemnpc"), 1, 1);
+  test(S("crnklpmegd"), SV(""), 5, S::npos);
+  test(S("jsbtafedoc"), SV("prqgn"), 5, S::npos);
+  test(S("qnmodrtkeb"), SV("pejafmnokr"), 5, 5);
+  test(S("cpebqsfmnj"), SV("odnqkgijrhabfmcestlp"), 5, 5);
+  test(S("lmofqdhpki"), SV(""), 9, S::npos);
+  test(S("hnefkqimca"), SV("rtjpa"), 9, 9);
+  test(S("drtasbgmfp"), SV("ktsrmnqagd"), 9, 7);
+  test(S("lsaijeqhtr"), SV("rtdhgcisbnmoaqkfpjle"), 9, 9);
+  test(S("elgofjmbrq"), SV(""), 10, S::npos);
+  test(S("mjqdgalkpc"), SV("dplqa"), 10, 8);
+  test(S("kthqnfcerm"), SV("dkacjoptns"), 10, 6);
+  test(S("dfsjhanorc"), SV("hqfimtrgnbekpdcsjalo"), 10, 9);
+  test(S("eqsgalomhb"), SV(""), 11, S::npos);
+  test(S("akiteljmoh"), SV("lofbc"), 11, 8);
+  test(S("hlbdfreqjo"), SV("astoegbfpn"), 11, 9);
+  test(S("taqobhlerg"), SV("pdgreqomsncafklhtibj"), 11, 9);
+  test(S("snafbdlghrjkpqtoceim"), SV(""), 0, S::npos);
+  test(S("aemtbrgcklhndjisfpoq"), SV("lbtqd"), 0, S::npos);
+  test(S("pnracgfkjdiholtbqsem"), SV("tboimldpjh"), 0, 0);
+  test(S("dicfltehbsgrmojnpkaq"), SV("slcerthdaiqjfnobgkpm"), 0, 0);
+  test(S("jlnkraeodhcspfgbqitm"), SV(""), 1, S::npos);
+  test(S("lhosrngtmfjikbqpcade"), SV("aqibs"), 1, S::npos);
+  test(S("rbtaqjhgkneisldpmfoc"), SV("gtfblmqinc"), 1, 1);
+  test(S("gpifsqlrdkbonjtmheca"), SV("mkqpbtdalgniorhfescj"), 1, 1);
+  test(S("hdpkobnsalmcfijregtq"), SV(""), 10, S::npos);
+  test(S("jtlshdgqaiprkbcoenfm"), SV("pblas"), 10, 10);
+  test(S("fkdrbqltsgmcoiphneaj"), SV("arosdhcfme"), 10, 10);
+  test(S("crsplifgtqedjohnabmk"), SV("blkhjeogicatqfnpdmsr"), 10, 10);
+  test(S("niptglfbosehkamrdqcj"), SV(""), 19, S::npos);
+  test(S("copqdhstbingamjfkler"), SV("djkqc"), 19, 16);
+  test(S("mrtaefilpdsgocnhqbjk"), SV("lgokshjtpb"), 19, 19);
+  test(S("kojatdhlcmigpbfrqnes"), SV("bqjhtkfepimcnsgrlado"), 19, 19);
+  test(S("eaintpchlqsbdgrkjofm"), SV(""), 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), SV("nocfa"), 20, 19);
+  test(S("spocfaktqdbiejlhngmr"), SV("bgtajmiedc"), 20, 18);
+  test(S("rphmlekgfscndtaobiqj"), SV("lsckfnqgdahejiopbtmr"), 20, 19);
+  test(S("liatsqdoegkmfcnbhrpj"), SV(""), 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), SV("gfsrt"), 21, 12);
+  test(S("latkmisecnorjbfhqpdg"), SV("pfsocbhjtm"), 21, 17);
+  test(S("lecfratdjkhnsmqpoigb"), SV("tpflmdnoicjgkberhqsa"), 21, 19);
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), SV(""), S::npos);
-    test(S(""), SV("laenf"), S::npos);
-    test(S(""), SV("pqlnkmbdjo"), S::npos);
-    test(S(""), SV("qkamfogpnljdcshbreti"), S::npos);
-    test(S("nhmko"), SV(""), S::npos);
-    test(S("lahfb"), SV("irkhs"), 2);
-    test(S("gmfhd"), SV("kantesmpgj"), 1);
-    test(S("odaft"), SV("oknlrstdpiqmjbaghcfe"), 4);
-    test(S("eolhfgpjqk"), SV(""), S::npos);
-    test(S("nbatdlmekr"), SV("bnrpe"), 9);
-    test(S("jdmciepkaq"), SV("jtdaefblso"), 8);
-    test(S("hkbgspoflt"), SV("oselktgbcapndfjihrmq"), 9);
-    test(S("gprdcokbnjhlsfmtieqa"), SV(""), S::npos);
-    test(S("qjghlnftcaismkropdeb"), SV("bjaht"), 19);
-    test(S("pnalfrdtkqcmojiesbhg"), SV("hjlcmgpket"), 19);
-    test(S("pniotcfrhqsmgdkjbael"), SV("htaobedqikfplcgjsmrn"), 19);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), SV(""), S::npos);
+  test(S(""), SV("laenf"), S::npos);
+  test(S(""), SV("pqlnkmbdjo"), S::npos);
+  test(S(""), SV("qkamfogpnljdcshbreti"), S::npos);
+  test(S("nhmko"), SV(""), S::npos);
+  test(S("lahfb"), SV("irkhs"), 2);
+  test(S("gmfhd"), SV("kantesmpgj"), 1);
+  test(S("odaft"), SV("oknlrstdpiqmjbaghcfe"), 4);
+  test(S("eolhfgpjqk"), SV(""), S::npos);
+  test(S("nbatdlmekr"), SV("bnrpe"), 9);
+  test(S("jdmciepkaq"), SV("jtdaefblso"), 8);
+  test(S("hkbgspoflt"), SV("oselktgbcapndfjihrmq"), 9);
+  test(S("gprdcokbnjhlsfmtieqa"), SV(""), S::npos);
+  test(S("qjghlnftcaismkropdeb"), SV("bjaht"), 19);
+  test(S("pnalfrdtkqcmojiesbhg"), SV("hjlcmgpket"), 19);
+  test(S("pniotcfrhqsmgdkjbael"), SV("htaobedqikfplcgjsmrn"), 19);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -161,8 +155,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find/char_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find/char_size.pass.cpp
index d7a0a9a8f95112d..8ff6406257c8c86 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find/char_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find/char_size.pass.cpp
@@ -18,23 +18,19 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::value_type c, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(c, pos));
-    assert(s.find(c, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x + 1 <= s.size());
+test(const S& s, typename S::value_type c, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(c, pos));
+  assert(s.find(c, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x + 1 <= s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::value_type c, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(c));
-    assert(s.find(c) == x);
-    if (x != S::npos)
-        assert(0 <= x && x + 1 <= s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::value_type c, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(c));
+  assert(s.find(c) == x);
+  if (x != S::npos)
+    assert(0 <= x && x + 1 <= s.size());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -100,8 +96,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size.pass.cpp
index ecfb54a8fa6d092..54e76831ed9e44d 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size.pass.cpp
@@ -18,135 +18,127 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos));
-    assert(s.find(str, pos) == x);
-    if (x != S::npos)
-    {
-        typename S::size_type n = S::traits_type::length(str);
-        assert(pos <= x && x + n <= s.size());
-    }
+test(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos));
+  assert(s.find(str, pos) == x);
+  if (x != S::npos) {
+    typename S::size_type n = S::traits_type::length(str);
+    assert(pos <= x && x + n <= s.size());
+  }
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(str));
-    assert(s.find(str) == x);
-    if (x != S::npos)
-    {
-        typename S::size_type n = S::traits_type::length(str);
-        assert(0 <= x && x + n <= s.size());
-    }
+TEST_CONSTEXPR_CXX20 void test(const S& s, const typename S::value_type* str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(str));
+  assert(s.find(str) == x);
+  if (x != S::npos) {
+    typename S::size_type n = S::traits_type::length(str);
+    assert(0 <= x && x + n <= s.size());
+  }
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), "", 0, 0);
-    test(S(""), "abcde", 0, S::npos);
-    test(S(""), "abcdeabcde", 0, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, S::npos);
-    test(S(""), "", 1, S::npos);
-    test(S(""), "abcde", 1, S::npos);
-    test(S(""), "abcdeabcde", 1, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcde"), "", 0, 0);
-    test(S("abcde"), "abcde", 0, 0);
-    test(S("abcde"), "abcdeabcde", 0, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
-    test(S("abcde"), "", 1, 1);
-    test(S("abcde"), "abcde", 1, S::npos);
-    test(S("abcde"), "abcdeabcde", 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcde"), "", 2, 2);
-    test(S("abcde"), "abcde", 2, S::npos);
-    test(S("abcde"), "abcdeabcde", 2, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, S::npos);
-    test(S("abcde"), "", 4, 4);
-    test(S("abcde"), "abcde", 4, S::npos);
-    test(S("abcde"), "abcdeabcde", 4, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, S::npos);
-    test(S("abcde"), "", 5, 5);
-    test(S("abcde"), "abcde", 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 5, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
-    test(S("abcde"), "", 6, S::npos);
-    test(S("abcde"), "abcde", 6, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, S::npos);
-    test(S("abcdeabcde"), "", 0, 0);
-    test(S("abcdeabcde"), "abcde", 0, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
-    test(S("abcdeabcde"), "", 1, 1);
-    test(S("abcdeabcde"), "abcde", 1, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 1, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcdeabcde"), "", 5, 5);
-    test(S("abcdeabcde"), "abcde", 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
-    test(S("abcdeabcde"), "", 9, 9);
-    test(S("abcdeabcde"), "abcde", 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, S::npos);
-    test(S("abcdeabcde"), "", 10, 10);
-    test(S("abcdeabcde"), "abcde", 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, S::npos);
-    test(S("abcdeabcde"), "", 11, S::npos);
-    test(S("abcdeabcde"), "abcde", 11, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 11, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 1, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 19, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 20, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), "", 0, 0);
+  test(S(""), "abcde", 0, S::npos);
+  test(S(""), "abcdeabcde", 0, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, S::npos);
+  test(S(""), "", 1, S::npos);
+  test(S(""), "abcde", 1, S::npos);
+  test(S(""), "abcdeabcde", 1, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcde"), "", 0, 0);
+  test(S("abcde"), "abcde", 0, 0);
+  test(S("abcde"), "abcdeabcde", 0, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
+  test(S("abcde"), "", 1, 1);
+  test(S("abcde"), "abcde", 1, S::npos);
+  test(S("abcde"), "abcdeabcde", 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcde"), "", 2, 2);
+  test(S("abcde"), "abcde", 2, S::npos);
+  test(S("abcde"), "abcdeabcde", 2, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, S::npos);
+  test(S("abcde"), "", 4, 4);
+  test(S("abcde"), "abcde", 4, S::npos);
+  test(S("abcde"), "abcdeabcde", 4, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, S::npos);
+  test(S("abcde"), "", 5, 5);
+  test(S("abcde"), "abcde", 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 5, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
+  test(S("abcde"), "", 6, S::npos);
+  test(S("abcde"), "abcde", 6, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, S::npos);
+  test(S("abcdeabcde"), "", 0, 0);
+  test(S("abcdeabcde"), "abcde", 0, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
+  test(S("abcdeabcde"), "", 1, 1);
+  test(S("abcdeabcde"), "abcde", 1, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 1, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcdeabcde"), "", 5, 5);
+  test(S("abcdeabcde"), "abcde", 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
+  test(S("abcdeabcde"), "", 9, 9);
+  test(S("abcdeabcde"), "abcde", 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, S::npos);
+  test(S("abcdeabcde"), "", 10, 10);
+  test(S("abcdeabcde"), "abcde", 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, S::npos);
+  test(S("abcdeabcde"), "", 11, S::npos);
+  test(S("abcdeabcde"), "abcde", 11, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 11, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 1, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 19, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 20, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), "", 0);
-    test(S(""), "abcde", S::npos);
-    test(S(""), "abcdeabcde", S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", S::npos);
-    test(S("abcde"), "", 0);
-    test(S("abcde"), "abcde", 0);
-    test(S("abcde"), "abcdeabcde", S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", S::npos);
-    test(S("abcdeabcde"), "", 0);
-    test(S("abcdeabcde"), "abcde", 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), "", 0);
+  test(S(""), "abcde", S::npos);
+  test(S(""), "abcdeabcde", S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", S::npos);
+  test(S("abcde"), "", 0);
+  test(S("abcde"), "abcde", 0);
+  test(S("abcde"), "abcdeabcde", S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", S::npos);
+  test(S("abcdeabcde"), "", 0);
+  test(S("abcdeabcde"), "abcde", 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -166,8 +158,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size_size.pass.cpp
index 98b09ff6d895d8e..47179c17756c652 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find/pointer_size_size.pass.cpp
@@ -18,353 +18,351 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type n, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos, n));
-    assert(s.find(str, pos, n) == x);
-    if (x != S::npos)
-        assert(pos <= x && x + n <= s.size());
+test(const S& s,
+     const typename S::value_type* str,
+     typename S::size_type pos,
+     typename S::size_type n,
+     typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos, n));
+  assert(s.find(str, pos, n) == x);
+  if (x != S::npos)
+    assert(pos <= x && x + n <= s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), "", 0, 0, 0);
-    test(S(""), "abcde", 0, 0, 0);
-    test(S(""), "abcde", 0, 1, S::npos);
-    test(S(""), "abcde", 0, 2, S::npos);
-    test(S(""), "abcde", 0, 4, S::npos);
-    test(S(""), "abcde", 0, 5, S::npos);
-    test(S(""), "abcdeabcde", 0, 0, 0);
-    test(S(""), "abcdeabcde", 0, 1, S::npos);
-    test(S(""), "abcdeabcde", 0, 5, S::npos);
-    test(S(""), "abcdeabcde", 0, 9, S::npos);
-    test(S(""), "abcdeabcde", 0, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
-    test(S(""), "", 1, 0, S::npos);
-    test(S(""), "abcde", 1, 0, S::npos);
-    test(S(""), "abcde", 1, 1, S::npos);
-    test(S(""), "abcde", 1, 2, S::npos);
-    test(S(""), "abcde", 1, 4, S::npos);
-    test(S(""), "abcde", 1, 5, S::npos);
-    test(S(""), "abcdeabcde", 1, 0, S::npos);
-    test(S(""), "abcdeabcde", 1, 1, S::npos);
-    test(S(""), "abcdeabcde", 1, 5, S::npos);
-    test(S(""), "abcdeabcde", 1, 9, S::npos);
-    test(S(""), "abcdeabcde", 1, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 0, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcde"), "", 0, 0, 0);
-    test(S("abcde"), "abcde", 0, 0, 0);
-    test(S("abcde"), "abcde", 0, 1, 0);
-    test(S("abcde"), "abcde", 0, 2, 0);
-    test(S("abcde"), "abcde", 0, 4, 0);
-    test(S("abcde"), "abcde", 0, 5, 0);
-    test(S("abcde"), "abcdeabcde", 0, 0, 0);
-    test(S("abcde"), "abcdeabcde", 0, 1, 0);
-    test(S("abcde"), "abcdeabcde", 0, 5, 0);
-    test(S("abcde"), "abcdeabcde", 0, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 0, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
-    test(S("abcde"), "", 1, 0, 1);
-    test(S("abcde"), "abcde", 1, 0, 1);
-    test(S("abcde"), "abcde", 1, 1, S::npos);
-    test(S("abcde"), "abcde", 1, 2, S::npos);
-    test(S("abcde"), "abcde", 1, 4, S::npos);
-    test(S("abcde"), "abcde", 1, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 1, 0, 1);
-    test(S("abcde"), "abcdeabcde", 1, 1, S::npos);
-    test(S("abcde"), "abcdeabcde", 1, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 1, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 1, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcde"), "", 2, 0, 2);
-    test(S("abcde"), "abcde", 2, 0, 2);
-    test(S("abcde"), "abcde", 2, 1, S::npos);
-    test(S("abcde"), "abcde", 2, 2, S::npos);
-    test(S("abcde"), "abcde", 2, 4, S::npos);
-    test(S("abcde"), "abcde", 2, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 2, 0, 2);
-    test(S("abcde"), "abcdeabcde", 2, 1, S::npos);
-    test(S("abcde"), "abcdeabcde", 2, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 2, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 2, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos);
-    test(S("abcde"), "", 4, 0, 4);
-    test(S("abcde"), "abcde", 4, 0, 4);
-    test(S("abcde"), "abcde", 4, 1, S::npos);
-    test(S("abcde"), "abcde", 4, 2, S::npos);
-    test(S("abcde"), "abcde", 4, 4, S::npos);
-    test(S("abcde"), "abcde", 4, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 4, 0, 4);
-    test(S("abcde"), "abcdeabcde", 4, 1, S::npos);
-    test(S("abcde"), "abcdeabcde", 4, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 4, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 4, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos);
-    test(S("abcde"), "", 5, 0, 5);
-    test(S("abcde"), "abcde", 5, 0, 5);
-    test(S("abcde"), "abcde", 5, 1, S::npos);
-    test(S("abcde"), "abcde", 5, 2, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), "", 0, 0, 0);
+  test(S(""), "abcde", 0, 0, 0);
+  test(S(""), "abcde", 0, 1, S::npos);
+  test(S(""), "abcde", 0, 2, S::npos);
+  test(S(""), "abcde", 0, 4, S::npos);
+  test(S(""), "abcde", 0, 5, S::npos);
+  test(S(""), "abcdeabcde", 0, 0, 0);
+  test(S(""), "abcdeabcde", 0, 1, S::npos);
+  test(S(""), "abcdeabcde", 0, 5, S::npos);
+  test(S(""), "abcdeabcde", 0, 9, S::npos);
+  test(S(""), "abcdeabcde", 0, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
+  test(S(""), "", 1, 0, S::npos);
+  test(S(""), "abcde", 1, 0, S::npos);
+  test(S(""), "abcde", 1, 1, S::npos);
+  test(S(""), "abcde", 1, 2, S::npos);
+  test(S(""), "abcde", 1, 4, S::npos);
+  test(S(""), "abcde", 1, 5, S::npos);
+  test(S(""), "abcdeabcde", 1, 0, S::npos);
+  test(S(""), "abcdeabcde", 1, 1, S::npos);
+  test(S(""), "abcdeabcde", 1, 5, S::npos);
+  test(S(""), "abcdeabcde", 1, 9, S::npos);
+  test(S(""), "abcdeabcde", 1, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 0, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcde"), "", 0, 0, 0);
+  test(S("abcde"), "abcde", 0, 0, 0);
+  test(S("abcde"), "abcde", 0, 1, 0);
+  test(S("abcde"), "abcde", 0, 2, 0);
+  test(S("abcde"), "abcde", 0, 4, 0);
+  test(S("abcde"), "abcde", 0, 5, 0);
+  test(S("abcde"), "abcdeabcde", 0, 0, 0);
+  test(S("abcde"), "abcdeabcde", 0, 1, 0);
+  test(S("abcde"), "abcdeabcde", 0, 5, 0);
+  test(S("abcde"), "abcdeabcde", 0, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 0, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
+  test(S("abcde"), "", 1, 0, 1);
+  test(S("abcde"), "abcde", 1, 0, 1);
+  test(S("abcde"), "abcde", 1, 1, S::npos);
+  test(S("abcde"), "abcde", 1, 2, S::npos);
+  test(S("abcde"), "abcde", 1, 4, S::npos);
+  test(S("abcde"), "abcde", 1, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 1, 0, 1);
+  test(S("abcde"), "abcdeabcde", 1, 1, S::npos);
+  test(S("abcde"), "abcdeabcde", 1, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 1, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 1, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcde"), "", 2, 0, 2);
+  test(S("abcde"), "abcde", 2, 0, 2);
+  test(S("abcde"), "abcde", 2, 1, S::npos);
+  test(S("abcde"), "abcde", 2, 2, S::npos);
+  test(S("abcde"), "abcde", 2, 4, S::npos);
+  test(S("abcde"), "abcde", 2, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 2, 0, 2);
+  test(S("abcde"), "abcdeabcde", 2, 1, S::npos);
+  test(S("abcde"), "abcdeabcde", 2, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 2, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 2, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos);
+  test(S("abcde"), "", 4, 0, 4);
+  test(S("abcde"), "abcde", 4, 0, 4);
+  test(S("abcde"), "abcde", 4, 1, S::npos);
+  test(S("abcde"), "abcde", 4, 2, S::npos);
+  test(S("abcde"), "abcde", 4, 4, S::npos);
+  test(S("abcde"), "abcde", 4, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 4, 0, 4);
+  test(S("abcde"), "abcdeabcde", 4, 1, S::npos);
+  test(S("abcde"), "abcdeabcde", 4, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 4, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 4, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos);
+  test(S("abcde"), "", 5, 0, 5);
+  test(S("abcde"), "abcde", 5, 0, 5);
+  test(S("abcde"), "abcde", 5, 1, S::npos);
+  test(S("abcde"), "abcde", 5, 2, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S("abcde"), "abcde", 5, 4, S::npos);
-    test(S("abcde"), "abcde", 5, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 5, 0, 5);
-    test(S("abcde"), "abcdeabcde", 5, 1, S::npos);
-    test(S("abcde"), "abcdeabcde", 5, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 5, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 5, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
-    test(S("abcde"), "", 6, 0, S::npos);
-    test(S("abcde"), "abcde", 6, 0, S::npos);
-    test(S("abcde"), "abcde", 6, 1, S::npos);
-    test(S("abcde"), "abcde", 6, 2, S::npos);
-    test(S("abcde"), "abcde", 6, 4, S::npos);
-    test(S("abcde"), "abcde", 6, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, 0, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, 1, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos);
-    test(S("abcdeabcde"), "", 0, 0, 0);
-    test(S("abcdeabcde"), "abcde", 0, 0, 0);
-    test(S("abcdeabcde"), "abcde", 0, 1, 0);
-    test(S("abcdeabcde"), "abcde", 0, 2, 0);
-    test(S("abcdeabcde"), "abcde", 0, 4, 0);
-    test(S("abcdeabcde"), "abcde", 0, 5, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 0, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 1, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 5, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
-    test(S("abcdeabcde"), "", 1, 0, 1);
-    test(S("abcdeabcde"), "abcde", 1, 0, 1);
-    test(S("abcdeabcde"), "abcde", 1, 1, 5);
-    test(S("abcdeabcde"), "abcde", 1, 2, 5);
-    test(S("abcdeabcde"), "abcde", 1, 4, 5);
-    test(S("abcdeabcde"), "abcde", 1, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 0, 1);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcdeabcde"), "", 5, 0, 5);
-    test(S("abcdeabcde"), "abcde", 5, 0, 5);
-    test(S("abcdeabcde"), "abcde", 5, 1, 5);
-    test(S("abcdeabcde"), "abcde", 5, 2, 5);
-    test(S("abcdeabcde"), "abcde", 5, 4, 5);
-    test(S("abcdeabcde"), "abcde", 5, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 0, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
-    test(S("abcdeabcde"), "", 9, 0, 9);
-    test(S("abcdeabcde"), "abcde", 9, 0, 9);
-    test(S("abcdeabcde"), "abcde", 9, 1, S::npos);
-    test(S("abcdeabcde"), "abcde", 9, 2, S::npos);
-    test(S("abcdeabcde"), "abcde", 9, 4, S::npos);
-    test(S("abcdeabcde"), "abcde", 9, 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 0, 9);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 1, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos);
-    test(S("abcdeabcde"), "", 10, 0, 10);
-    test(S("abcdeabcde"), "abcde", 10, 0, 10);
-    test(S("abcdeabcde"), "abcde", 10, 1, S::npos);
-    test(S("abcdeabcde"), "abcde", 10, 2, S::npos);
-    test(S("abcdeabcde"), "abcde", 10, 4, S::npos);
-    test(S("abcdeabcde"), "abcde", 10, 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 0, 10);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 1, S::npos);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S("abcde"), "abcde", 5, 4, S::npos);
+  test(S("abcde"), "abcde", 5, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 5, 0, 5);
+  test(S("abcde"), "abcdeabcde", 5, 1, S::npos);
+  test(S("abcde"), "abcdeabcde", 5, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 5, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 5, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
+  test(S("abcde"), "", 6, 0, S::npos);
+  test(S("abcde"), "abcde", 6, 0, S::npos);
+  test(S("abcde"), "abcde", 6, 1, S::npos);
+  test(S("abcde"), "abcde", 6, 2, S::npos);
+  test(S("abcde"), "abcde", 6, 4, S::npos);
+  test(S("abcde"), "abcde", 6, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, 0, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, 1, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos);
+  test(S("abcdeabcde"), "", 0, 0, 0);
+  test(S("abcdeabcde"), "abcde", 0, 0, 0);
+  test(S("abcdeabcde"), "abcde", 0, 1, 0);
+  test(S("abcdeabcde"), "abcde", 0, 2, 0);
+  test(S("abcdeabcde"), "abcde", 0, 4, 0);
+  test(S("abcdeabcde"), "abcde", 0, 5, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 0, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 1, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 5, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
+  test(S("abcdeabcde"), "", 1, 0, 1);
+  test(S("abcdeabcde"), "abcde", 1, 0, 1);
+  test(S("abcdeabcde"), "abcde", 1, 1, 5);
+  test(S("abcdeabcde"), "abcde", 1, 2, 5);
+  test(S("abcdeabcde"), "abcde", 1, 4, 5);
+  test(S("abcdeabcde"), "abcde", 1, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 0, 1);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcdeabcde"), "", 5, 0, 5);
+  test(S("abcdeabcde"), "abcde", 5, 0, 5);
+  test(S("abcdeabcde"), "abcde", 5, 1, 5);
+  test(S("abcdeabcde"), "abcde", 5, 2, 5);
+  test(S("abcdeabcde"), "abcde", 5, 4, 5);
+  test(S("abcdeabcde"), "abcde", 5, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 0, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
+  test(S("abcdeabcde"), "", 9, 0, 9);
+  test(S("abcdeabcde"), "abcde", 9, 0, 9);
+  test(S("abcdeabcde"), "abcde", 9, 1, S::npos);
+  test(S("abcdeabcde"), "abcde", 9, 2, S::npos);
+  test(S("abcdeabcde"), "abcde", 9, 4, S::npos);
+  test(S("abcdeabcde"), "abcde", 9, 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 0, 9);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 1, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos);
+  test(S("abcdeabcde"), "", 10, 0, 10);
+  test(S("abcdeabcde"), "abcde", 10, 0, 10);
+  test(S("abcdeabcde"), "abcde", 10, 1, S::npos);
+  test(S("abcdeabcde"), "abcde", 10, 2, S::npos);
+  test(S("abcdeabcde"), "abcde", 10, 4, S::npos);
+  test(S("abcdeabcde"), "abcde", 10, 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 0, 10);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 1, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test2()
-{
-    test(S("abcdeabcde"), "abcdeabcde", 10, 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
-    test(S("abcdeabcde"), "", 11, 0, S::npos);
-    test(S("abcdeabcde"), "abcde", 11, 0, S::npos);
-    test(S("abcdeabcde"), "abcde", 11, 1, S::npos);
-    test(S("abcdeabcde"), "abcde", 11, 2, S::npos);
-    test(S("abcdeabcde"), "abcde", 11, 4, S::npos);
-    test(S("abcdeabcde"), "abcde", 11, 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 0, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 1, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20);
+TEST_CONSTEXPR_CXX20 void test2() {
+  test(S("abcdeabcde"), "abcdeabcde", 10, 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
+  test(S("abcdeabcde"), "", 11, 0, S::npos);
+  test(S("abcdeabcde"), "abcde", 11, 0, S::npos);
+  test(S("abcdeabcde"), "abcde", 11, 1, S::npos);
+  test(S("abcdeabcde"), "abcde", 11, 2, S::npos);
+  test(S("abcdeabcde"), "abcde", 11, 4, S::npos);
+  test(S("abcdeabcde"), "abcde", 11, 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 0, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 1, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test3()
-{
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 21, 0, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 0, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 2, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 4, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 5, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 0, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 5, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 9, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 20, S::npos);
+TEST_CONSTEXPR_CXX20 void test3() {
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 21, 0, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 0, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 2, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 4, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 5, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 0, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 5, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 9, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 20, S::npos);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -388,8 +386,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find/string_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find/string_size.pass.cpp
index af0fdd3340cec76..08d4ae24d1e90bf 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find/string_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find/string_size.pass.cpp
@@ -17,129 +17,123 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos));
-    assert(s.find(str, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x + str.size() <= s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos));
+  assert(s.find(str, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x + str.size() <= s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(str));
-    assert(s.find(str) == x);
-    if (x != S::npos)
-        assert(0 <= x && x + str.size() <= s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(str));
+  assert(s.find(str) == x);
+  if (x != S::npos)
+    assert(0 <= x && x + str.size() <= s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), S(""), 0, 0);
-    test(S(""), S("abcde"), 0, S::npos);
-    test(S(""), S("abcdeabcde"), 0, S::npos);
-    test(S(""), S("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S(""), S(""), 1, S::npos);
-    test(S(""), S("abcde"), 1, S::npos);
-    test(S(""), S("abcdeabcde"), 1, S::npos);
-    test(S(""), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcde"), S(""), 0, 0);
-    test(S("abcde"), S("abcde"), 0, 0);
-    test(S("abcde"), S("abcdeabcde"), 0, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S("abcde"), S(""), 1, 1);
-    test(S("abcde"), S("abcde"), 1, S::npos);
-    test(S("abcde"), S("abcdeabcde"), 1, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcde"), S(""), 2, 2);
-    test(S("abcde"), S("abcde"), 2, S::npos);
-    test(S("abcde"), S("abcdeabcde"), 2, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 2, S::npos);
-    test(S("abcde"), S(""), 4, 4);
-    test(S("abcde"), S("abcde"), 4, S::npos);
-    test(S("abcde"), S("abcdeabcde"), 4, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 4, S::npos);
-    test(S("abcde"), S(""), 5, 5);
-    test(S("abcde"), S("abcde"), 5, S::npos);
-    test(S("abcde"), S("abcdeabcde"), 5, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
-    test(S("abcde"), S(""), 6, S::npos);
-    test(S("abcde"), S("abcde"), 6, S::npos);
-    test(S("abcde"), S("abcdeabcde"), 6, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 6, S::npos);
-    test(S("abcdeabcde"), S(""), 0, 0);
-    test(S("abcdeabcde"), S("abcde"), 0, 0);
-    test(S("abcdeabcde"), S("abcdeabcde"), 0, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S("abcdeabcde"), S(""), 1, 1);
-    test(S("abcdeabcde"), S("abcde"), 1, 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 1, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcdeabcde"), S(""), 5, 5);
-    test(S("abcdeabcde"), S("abcde"), 5, 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 5, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
-    test(S("abcdeabcde"), S(""), 9, 9);
-    test(S("abcdeabcde"), S("abcde"), 9, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcde"), 9, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 9, S::npos);
-    test(S("abcdeabcde"), S(""), 10, 10);
-    test(S("abcdeabcde"), S("abcde"), 10, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcde"), 10, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos);
-    test(S("abcdeabcde"), S(""), 11, S::npos);
-    test(S("abcdeabcde"), S("abcde"), 11, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcde"), 11, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 11, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 1, 1);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 19, 19);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 20, 20);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 21, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), S(""), 0, 0);
+  test(S(""), S("abcde"), 0, S::npos);
+  test(S(""), S("abcdeabcde"), 0, S::npos);
+  test(S(""), S("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S(""), S(""), 1, S::npos);
+  test(S(""), S("abcde"), 1, S::npos);
+  test(S(""), S("abcdeabcde"), 1, S::npos);
+  test(S(""), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcde"), S(""), 0, 0);
+  test(S("abcde"), S("abcde"), 0, 0);
+  test(S("abcde"), S("abcdeabcde"), 0, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S("abcde"), S(""), 1, 1);
+  test(S("abcde"), S("abcde"), 1, S::npos);
+  test(S("abcde"), S("abcdeabcde"), 1, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcde"), S(""), 2, 2);
+  test(S("abcde"), S("abcde"), 2, S::npos);
+  test(S("abcde"), S("abcdeabcde"), 2, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 2, S::npos);
+  test(S("abcde"), S(""), 4, 4);
+  test(S("abcde"), S("abcde"), 4, S::npos);
+  test(S("abcde"), S("abcdeabcde"), 4, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 4, S::npos);
+  test(S("abcde"), S(""), 5, 5);
+  test(S("abcde"), S("abcde"), 5, S::npos);
+  test(S("abcde"), S("abcdeabcde"), 5, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
+  test(S("abcde"), S(""), 6, S::npos);
+  test(S("abcde"), S("abcde"), 6, S::npos);
+  test(S("abcde"), S("abcdeabcde"), 6, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 6, S::npos);
+  test(S("abcdeabcde"), S(""), 0, 0);
+  test(S("abcdeabcde"), S("abcde"), 0, 0);
+  test(S("abcdeabcde"), S("abcdeabcde"), 0, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S("abcdeabcde"), S(""), 1, 1);
+  test(S("abcdeabcde"), S("abcde"), 1, 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 1, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcdeabcde"), S(""), 5, 5);
+  test(S("abcdeabcde"), S("abcde"), 5, 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 5, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
+  test(S("abcdeabcde"), S(""), 9, 9);
+  test(S("abcdeabcde"), S("abcde"), 9, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcde"), 9, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 9, S::npos);
+  test(S("abcdeabcde"), S(""), 10, 10);
+  test(S("abcdeabcde"), S("abcde"), 10, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcde"), 10, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos);
+  test(S("abcdeabcde"), S(""), 11, S::npos);
+  test(S("abcdeabcde"), S("abcde"), 11, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcde"), 11, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 11, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 1, 1);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 19, 19);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 20, 20);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 21, S::npos);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), S(""), 0);
-    test(S(""), S("abcde"), S::npos);
-    test(S(""), S("abcdeabcde"), S::npos);
-    test(S(""), S("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcde"), S(""), 0);
-    test(S("abcde"), S("abcde"), 0);
-    test(S("abcde"), S("abcdeabcde"), S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcdeabcde"), S(""), 0);
-    test(S("abcdeabcde"), S("abcde"), 0);
-    test(S("abcdeabcde"), S("abcdeabcde"), 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), S(""), 0);
+  test(S(""), S("abcde"), S::npos);
+  test(S(""), S("abcdeabcde"), S::npos);
+  test(S(""), S("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcde"), S(""), 0);
+  test(S("abcde"), S("abcde"), 0);
+  test(S("abcde"), S("abcdeabcde"), S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcdeabcde"), S(""), 0);
+  test(S("abcdeabcde"), S("abcde"), 0);
+  test(S("abcdeabcde"), S("abcdeabcde"), 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -166,8 +160,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_find/string_view_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_find/string_view_size.pass.cpp
index a32a1568bc0ee9d..34d7302b40cc12b 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_find/string_view_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_find/string_view_size.pass.cpp
@@ -17,129 +17,123 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(sv, pos));
-    assert(s.find(sv, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x + sv.size() <= s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(sv, pos));
+  assert(s.find(sv, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x + sv.size() <= s.size());
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(sv));
-    assert(s.find(sv) == x);
-    if (x != S::npos)
-        assert(0 <= x && x + sv.size() <= s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(sv));
+  assert(s.find(sv) == x);
+  if (x != S::npos)
+    assert(0 <= x && x + sv.size() <= s.size());
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), SV(""), 0, 0);
-    test(S(""), SV("abcde"), 0, S::npos);
-    test(S(""), SV("abcdeabcde"), 0, S::npos);
-    test(S(""), SV("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S(""), SV(""), 1, S::npos);
-    test(S(""), SV("abcde"), 1, S::npos);
-    test(S(""), SV("abcdeabcde"), 1, S::npos);
-    test(S(""), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcde"), SV(""), 0, 0);
-    test(S("abcde"), SV("abcde"), 0, 0);
-    test(S("abcde"), SV("abcdeabcde"), 0, S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S("abcde"), SV(""), 1, 1);
-    test(S("abcde"), SV("abcde"), 1, S::npos);
-    test(S("abcde"), SV("abcdeabcde"), 1, S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcde"), SV(""), 2, 2);
-    test(S("abcde"), SV("abcde"), 2, S::npos);
-    test(S("abcde"), SV("abcdeabcde"), 2, S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 2, S::npos);
-    test(S("abcde"), SV(""), 4, 4);
-    test(S("abcde"), SV("abcde"), 4, S::npos);
-    test(S("abcde"), SV("abcdeabcde"), 4, S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 4, S::npos);
-    test(S("abcde"), SV(""), 5, 5);
-    test(S("abcde"), SV("abcde"), 5, S::npos);
-    test(S("abcde"), SV("abcdeabcde"), 5, S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 5, S::npos);
-    test(S("abcde"), SV(""), 6, S::npos);
-    test(S("abcde"), SV("abcde"), 6, S::npos);
-    test(S("abcde"), SV("abcdeabcde"), 6, S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 6, S::npos);
-    test(S("abcdeabcde"), SV(""), 0, 0);
-    test(S("abcdeabcde"), SV("abcde"), 0, 0);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 0, 0);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S("abcdeabcde"), SV(""), 1, 1);
-    test(S("abcdeabcde"), SV("abcde"), 1, 5);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 1, S::npos);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcdeabcde"), SV(""), 5, 5);
-    test(S("abcdeabcde"), SV("abcde"), 5, 5);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 5, S::npos);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 5, S::npos);
-    test(S("abcdeabcde"), SV(""), 9, 9);
-    test(S("abcdeabcde"), SV("abcde"), 9, S::npos);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 9, S::npos);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 9, S::npos);
-    test(S("abcdeabcde"), SV(""), 10, 10);
-    test(S("abcdeabcde"), SV("abcde"), 10, S::npos);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 10, S::npos);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 10, S::npos);
-    test(S("abcdeabcde"), SV(""), 11, S::npos);
-    test(S("abcdeabcde"), SV("abcde"), 11, S::npos);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 11, S::npos);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 11, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 1, 1);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 19, 19);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 20, 20);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 21, S::npos);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), SV(""), 0, 0);
+  test(S(""), SV("abcde"), 0, S::npos);
+  test(S(""), SV("abcdeabcde"), 0, S::npos);
+  test(S(""), SV("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S(""), SV(""), 1, S::npos);
+  test(S(""), SV("abcde"), 1, S::npos);
+  test(S(""), SV("abcdeabcde"), 1, S::npos);
+  test(S(""), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcde"), SV(""), 0, 0);
+  test(S("abcde"), SV("abcde"), 0, 0);
+  test(S("abcde"), SV("abcdeabcde"), 0, S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S("abcde"), SV(""), 1, 1);
+  test(S("abcde"), SV("abcde"), 1, S::npos);
+  test(S("abcde"), SV("abcdeabcde"), 1, S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcde"), SV(""), 2, 2);
+  test(S("abcde"), SV("abcde"), 2, S::npos);
+  test(S("abcde"), SV("abcdeabcde"), 2, S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 2, S::npos);
+  test(S("abcde"), SV(""), 4, 4);
+  test(S("abcde"), SV("abcde"), 4, S::npos);
+  test(S("abcde"), SV("abcdeabcde"), 4, S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 4, S::npos);
+  test(S("abcde"), SV(""), 5, 5);
+  test(S("abcde"), SV("abcde"), 5, S::npos);
+  test(S("abcde"), SV("abcdeabcde"), 5, S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 5, S::npos);
+  test(S("abcde"), SV(""), 6, S::npos);
+  test(S("abcde"), SV("abcde"), 6, S::npos);
+  test(S("abcde"), SV("abcdeabcde"), 6, S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 6, S::npos);
+  test(S("abcdeabcde"), SV(""), 0, 0);
+  test(S("abcdeabcde"), SV("abcde"), 0, 0);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 0, 0);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S("abcdeabcde"), SV(""), 1, 1);
+  test(S("abcdeabcde"), SV("abcde"), 1, 5);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 1, S::npos);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcdeabcde"), SV(""), 5, 5);
+  test(S("abcdeabcde"), SV("abcde"), 5, 5);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 5, S::npos);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 5, S::npos);
+  test(S("abcdeabcde"), SV(""), 9, 9);
+  test(S("abcdeabcde"), SV("abcde"), 9, S::npos);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 9, S::npos);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 9, S::npos);
+  test(S("abcdeabcde"), SV(""), 10, 10);
+  test(S("abcdeabcde"), SV("abcde"), 10, S::npos);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 10, S::npos);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 10, S::npos);
+  test(S("abcdeabcde"), SV(""), 11, S::npos);
+  test(S("abcdeabcde"), SV("abcde"), 11, S::npos);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 11, S::npos);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 11, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 1, 1);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 19, 19);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 20, 20);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 21, S::npos);
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), SV(""), 0);
-    test(S(""), SV("abcde"), S::npos);
-    test(S(""), SV("abcdeabcde"), S::npos);
-    test(S(""), SV("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcde"), SV(""), 0);
-    test(S("abcde"), SV("abcde"), 0);
-    test(S("abcde"), SV("abcdeabcde"), S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcdeabcde"), SV(""), 0);
-    test(S("abcdeabcde"), SV("abcde"), 0);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 0);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 0);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 0);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 0);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 0);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), SV(""), 0);
+  test(S(""), SV("abcde"), S::npos);
+  test(S(""), SV("abcdeabcde"), S::npos);
+  test(S(""), SV("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcde"), SV(""), 0);
+  test(S("abcde"), SV("abcde"), 0);
+  test(S("abcde"), SV("abcdeabcde"), S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcdeabcde"), SV(""), 0);
+  test(S("abcdeabcde"), SV("abcde"), 0);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 0);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 0);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 0);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 0);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -161,8 +155,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/char_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/char_size.pass.cpp
index b83fab0a1661da1..a31da1a1dbc9b3c 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/char_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/char_size.pass.cpp
@@ -18,23 +18,19 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::value_type c, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(c, pos));
-    assert(s.rfind(c, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x + 1 <= s.size());
+test(const S& s, typename S::value_type c, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(c, pos));
+  assert(s.rfind(c, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x + 1 <= s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::value_type c, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(c));
-    assert(s.rfind(c) == x);
-    if (x != S::npos)
-        assert(x + 1 <= s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::value_type c, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(c));
+  assert(s.rfind(c) == x);
+  if (x != S::npos)
+    assert(x + 1 <= s.size());
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -100,8 +96,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size.pass.cpp
index e44e02ed98a2b39..30b1ce73380e5d4 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size.pass.cpp
@@ -18,136 +18,128 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(str, pos));
-    assert(s.rfind(str, pos) == x);
-    if (x != S::npos)
-    {
-        typename S::size_type n = S::traits_type::length(str);
-        assert(x <= pos && x + n <= s.size());
-    }
+test(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(str, pos));
+  assert(s.rfind(str, pos) == x);
+  if (x != S::npos) {
+    typename S::size_type n = S::traits_type::length(str);
+    assert(x <= pos && x + n <= s.size());
+  }
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(str));
-    assert(s.rfind(str) == x);
-    if (x != S::npos)
-    {
-        typename S::size_type pos = s.size();
-        typename S::size_type n = S::traits_type::length(str);
-        assert(x <= pos && x + n <= s.size());
-    }
+TEST_CONSTEXPR_CXX20 void test(const S& s, const typename S::value_type* str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(str));
+  assert(s.rfind(str) == x);
+  if (x != S::npos) {
+    typename S::size_type pos = s.size();
+    typename S::size_type n   = S::traits_type::length(str);
+    assert(x <= pos && x + n <= s.size());
+  }
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), "", 0, 0);
-    test(S(""), "abcde", 0, S::npos);
-    test(S(""), "abcdeabcde", 0, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, S::npos);
-    test(S(""), "", 1, 0);
-    test(S(""), "abcde", 1, S::npos);
-    test(S(""), "abcdeabcde", 1, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcde"), "", 0, 0);
-    test(S("abcde"), "abcde", 0, 0);
-    test(S("abcde"), "abcdeabcde", 0, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
-    test(S("abcde"), "", 1, 1);
-    test(S("abcde"), "abcde", 1, 0);
-    test(S("abcde"), "abcdeabcde", 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcde"), "", 2, 2);
-    test(S("abcde"), "abcde", 2, 0);
-    test(S("abcde"), "abcdeabcde", 2, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, S::npos);
-    test(S("abcde"), "", 4, 4);
-    test(S("abcde"), "abcde", 4, 0);
-    test(S("abcde"), "abcdeabcde", 4, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, S::npos);
-    test(S("abcde"), "", 5, 5);
-    test(S("abcde"), "abcde", 5, 0);
-    test(S("abcde"), "abcdeabcde", 5, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
-    test(S("abcde"), "", 6, 5);
-    test(S("abcde"), "abcde", 6, 0);
-    test(S("abcde"), "abcdeabcde", 6, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, S::npos);
-    test(S("abcdeabcde"), "", 0, 0);
-    test(S("abcdeabcde"), "abcde", 0, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
-    test(S("abcdeabcde"), "", 1, 1);
-    test(S("abcdeabcde"), "abcde", 1, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcdeabcde"), "", 5, 5);
-    test(S("abcdeabcde"), "abcde", 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
-    test(S("abcdeabcde"), "", 9, 9);
-    test(S("abcdeabcde"), "abcde", 9, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, S::npos);
-    test(S("abcdeabcde"), "", 10, 10);
-    test(S("abcdeabcde"), "abcde", 10, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, S::npos);
-    test(S("abcdeabcde"), "", 11, 10);
-    test(S("abcdeabcde"), "abcde", 11, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 1, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 19, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 20, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 21, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), "", 0, 0);
+  test(S(""), "abcde", 0, S::npos);
+  test(S(""), "abcdeabcde", 0, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, S::npos);
+  test(S(""), "", 1, 0);
+  test(S(""), "abcde", 1, S::npos);
+  test(S(""), "abcdeabcde", 1, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcde"), "", 0, 0);
+  test(S("abcde"), "abcde", 0, 0);
+  test(S("abcde"), "abcdeabcde", 0, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
+  test(S("abcde"), "", 1, 1);
+  test(S("abcde"), "abcde", 1, 0);
+  test(S("abcde"), "abcdeabcde", 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcde"), "", 2, 2);
+  test(S("abcde"), "abcde", 2, 0);
+  test(S("abcde"), "abcdeabcde", 2, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, S::npos);
+  test(S("abcde"), "", 4, 4);
+  test(S("abcde"), "abcde", 4, 0);
+  test(S("abcde"), "abcdeabcde", 4, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, S::npos);
+  test(S("abcde"), "", 5, 5);
+  test(S("abcde"), "abcde", 5, 0);
+  test(S("abcde"), "abcdeabcde", 5, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
+  test(S("abcde"), "", 6, 5);
+  test(S("abcde"), "abcde", 6, 0);
+  test(S("abcde"), "abcdeabcde", 6, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, S::npos);
+  test(S("abcdeabcde"), "", 0, 0);
+  test(S("abcdeabcde"), "abcde", 0, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
+  test(S("abcdeabcde"), "", 1, 1);
+  test(S("abcdeabcde"), "abcde", 1, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcdeabcde"), "", 5, 5);
+  test(S("abcdeabcde"), "abcde", 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
+  test(S("abcdeabcde"), "", 9, 9);
+  test(S("abcdeabcde"), "abcde", 9, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, S::npos);
+  test(S("abcdeabcde"), "", 10, 10);
+  test(S("abcdeabcde"), "abcde", 10, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, S::npos);
+  test(S("abcdeabcde"), "", 11, 10);
+  test(S("abcdeabcde"), "abcde", 11, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 1, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 19, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 20, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 21, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), "", 0);
-    test(S(""), "abcde", S::npos);
-    test(S(""), "abcdeabcde", S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", S::npos);
-    test(S("abcde"), "", 5);
-    test(S("abcde"), "abcde", 0);
-    test(S("abcde"), "abcdeabcde", S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", S::npos);
-    test(S("abcdeabcde"), "", 10);
-    test(S("abcdeabcde"), "abcde", 5);
-    test(S("abcdeabcde"), "abcdeabcde", 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), "", 0);
+  test(S(""), "abcde", S::npos);
+  test(S(""), "abcdeabcde", S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", S::npos);
+  test(S("abcde"), "", 5);
+  test(S("abcde"), "abcde", 0);
+  test(S("abcde"), "abcdeabcde", S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", S::npos);
+  test(S("abcdeabcde"), "", 10);
+  test(S("abcdeabcde"), "abcde", 5);
+  test(S("abcdeabcde"), "abcdeabcde", 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -167,8 +159,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size_size.pass.cpp
index 1e40fbc943aeeb1..0c050f7596e0587 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/pointer_size_size.pass.cpp
@@ -18,353 +18,351 @@
 
 template <class S>
 TEST_CONSTEXPR_CXX20 void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-      typename S::size_type n, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(str, pos, n));
-    assert(s.rfind(str, pos, n) == x);
-    if (x != S::npos)
-        assert(x <= pos && x + n <= s.size());
+test(const S& s,
+     const typename S::value_type* str,
+     typename S::size_type pos,
+     typename S::size_type n,
+     typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(str, pos, n));
+  assert(s.rfind(str, pos, n) == x);
+  if (x != S::npos)
+    assert(x <= pos && x + n <= s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), "", 0, 0, 0);
-    test(S(""), "abcde", 0, 0, 0);
-    test(S(""), "abcde", 0, 1, S::npos);
-    test(S(""), "abcde", 0, 2, S::npos);
-    test(S(""), "abcde", 0, 4, S::npos);
-    test(S(""), "abcde", 0, 5, S::npos);
-    test(S(""), "abcdeabcde", 0, 0, 0);
-    test(S(""), "abcdeabcde", 0, 1, S::npos);
-    test(S(""), "abcdeabcde", 0, 5, S::npos);
-    test(S(""), "abcdeabcde", 0, 9, S::npos);
-    test(S(""), "abcdeabcde", 0, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
-    test(S(""), "", 1, 0, 0);
-    test(S(""), "abcde", 1, 0, 0);
-    test(S(""), "abcde", 1, 1, S::npos);
-    test(S(""), "abcde", 1, 2, S::npos);
-    test(S(""), "abcde", 1, 4, S::npos);
-    test(S(""), "abcde", 1, 5, S::npos);
-    test(S(""), "abcdeabcde", 1, 0, 0);
-    test(S(""), "abcdeabcde", 1, 1, S::npos);
-    test(S(""), "abcdeabcde", 1, 5, S::npos);
-    test(S(""), "abcdeabcde", 1, 9, S::npos);
-    test(S(""), "abcdeabcde", 1, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 0, 0);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcde"), "", 0, 0, 0);
-    test(S("abcde"), "abcde", 0, 0, 0);
-    test(S("abcde"), "abcde", 0, 1, 0);
-    test(S("abcde"), "abcde", 0, 2, 0);
-    test(S("abcde"), "abcde", 0, 4, 0);
-    test(S("abcde"), "abcde", 0, 5, 0);
-    test(S("abcde"), "abcdeabcde", 0, 0, 0);
-    test(S("abcde"), "abcdeabcde", 0, 1, 0);
-    test(S("abcde"), "abcdeabcde", 0, 5, 0);
-    test(S("abcde"), "abcdeabcde", 0, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 0, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
-    test(S("abcde"), "", 1, 0, 1);
-    test(S("abcde"), "abcde", 1, 0, 1);
-    test(S("abcde"), "abcde", 1, 1, 0);
-    test(S("abcde"), "abcde", 1, 2, 0);
-    test(S("abcde"), "abcde", 1, 4, 0);
-    test(S("abcde"), "abcde", 1, 5, 0);
-    test(S("abcde"), "abcdeabcde", 1, 0, 1);
-    test(S("abcde"), "abcdeabcde", 1, 1, 0);
-    test(S("abcde"), "abcdeabcde", 1, 5, 0);
-    test(S("abcde"), "abcdeabcde", 1, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 1, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcde"), "", 2, 0, 2);
-    test(S("abcde"), "abcde", 2, 0, 2);
-    test(S("abcde"), "abcde", 2, 1, 0);
-    test(S("abcde"), "abcde", 2, 2, 0);
-    test(S("abcde"), "abcde", 2, 4, 0);
-    test(S("abcde"), "abcde", 2, 5, 0);
-    test(S("abcde"), "abcdeabcde", 2, 0, 2);
-    test(S("abcde"), "abcdeabcde", 2, 1, 0);
-    test(S("abcde"), "abcdeabcde", 2, 5, 0);
-    test(S("abcde"), "abcdeabcde", 2, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 2, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos);
-    test(S("abcde"), "", 4, 0, 4);
-    test(S("abcde"), "abcde", 4, 0, 4);
-    test(S("abcde"), "abcde", 4, 1, 0);
-    test(S("abcde"), "abcde", 4, 2, 0);
-    test(S("abcde"), "abcde", 4, 4, 0);
-    test(S("abcde"), "abcde", 4, 5, 0);
-    test(S("abcde"), "abcdeabcde", 4, 0, 4);
-    test(S("abcde"), "abcdeabcde", 4, 1, 0);
-    test(S("abcde"), "abcdeabcde", 4, 5, 0);
-    test(S("abcde"), "abcdeabcde", 4, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 4, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos);
-    test(S("abcde"), "", 5, 0, 5);
-    test(S("abcde"), "abcde", 5, 0, 5);
-    test(S("abcde"), "abcde", 5, 1, 0);
-    test(S("abcde"), "abcde", 5, 2, 0);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), "", 0, 0, 0);
+  test(S(""), "abcde", 0, 0, 0);
+  test(S(""), "abcde", 0, 1, S::npos);
+  test(S(""), "abcde", 0, 2, S::npos);
+  test(S(""), "abcde", 0, 4, S::npos);
+  test(S(""), "abcde", 0, 5, S::npos);
+  test(S(""), "abcdeabcde", 0, 0, 0);
+  test(S(""), "abcdeabcde", 0, 1, S::npos);
+  test(S(""), "abcdeabcde", 0, 5, S::npos);
+  test(S(""), "abcdeabcde", 0, 9, S::npos);
+  test(S(""), "abcdeabcde", 0, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
+  test(S(""), "", 1, 0, 0);
+  test(S(""), "abcde", 1, 0, 0);
+  test(S(""), "abcde", 1, 1, S::npos);
+  test(S(""), "abcde", 1, 2, S::npos);
+  test(S(""), "abcde", 1, 4, S::npos);
+  test(S(""), "abcde", 1, 5, S::npos);
+  test(S(""), "abcdeabcde", 1, 0, 0);
+  test(S(""), "abcdeabcde", 1, 1, S::npos);
+  test(S(""), "abcdeabcde", 1, 5, S::npos);
+  test(S(""), "abcdeabcde", 1, 9, S::npos);
+  test(S(""), "abcdeabcde", 1, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 0, 0);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcde"), "", 0, 0, 0);
+  test(S("abcde"), "abcde", 0, 0, 0);
+  test(S("abcde"), "abcde", 0, 1, 0);
+  test(S("abcde"), "abcde", 0, 2, 0);
+  test(S("abcde"), "abcde", 0, 4, 0);
+  test(S("abcde"), "abcde", 0, 5, 0);
+  test(S("abcde"), "abcdeabcde", 0, 0, 0);
+  test(S("abcde"), "abcdeabcde", 0, 1, 0);
+  test(S("abcde"), "abcdeabcde", 0, 5, 0);
+  test(S("abcde"), "abcdeabcde", 0, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 0, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
+  test(S("abcde"), "", 1, 0, 1);
+  test(S("abcde"), "abcde", 1, 0, 1);
+  test(S("abcde"), "abcde", 1, 1, 0);
+  test(S("abcde"), "abcde", 1, 2, 0);
+  test(S("abcde"), "abcde", 1, 4, 0);
+  test(S("abcde"), "abcde", 1, 5, 0);
+  test(S("abcde"), "abcdeabcde", 1, 0, 1);
+  test(S("abcde"), "abcdeabcde", 1, 1, 0);
+  test(S("abcde"), "abcdeabcde", 1, 5, 0);
+  test(S("abcde"), "abcdeabcde", 1, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 1, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcde"), "", 2, 0, 2);
+  test(S("abcde"), "abcde", 2, 0, 2);
+  test(S("abcde"), "abcde", 2, 1, 0);
+  test(S("abcde"), "abcde", 2, 2, 0);
+  test(S("abcde"), "abcde", 2, 4, 0);
+  test(S("abcde"), "abcde", 2, 5, 0);
+  test(S("abcde"), "abcdeabcde", 2, 0, 2);
+  test(S("abcde"), "abcdeabcde", 2, 1, 0);
+  test(S("abcde"), "abcdeabcde", 2, 5, 0);
+  test(S("abcde"), "abcdeabcde", 2, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 2, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos);
+  test(S("abcde"), "", 4, 0, 4);
+  test(S("abcde"), "abcde", 4, 0, 4);
+  test(S("abcde"), "abcde", 4, 1, 0);
+  test(S("abcde"), "abcde", 4, 2, 0);
+  test(S("abcde"), "abcde", 4, 4, 0);
+  test(S("abcde"), "abcde", 4, 5, 0);
+  test(S("abcde"), "abcdeabcde", 4, 0, 4);
+  test(S("abcde"), "abcdeabcde", 4, 1, 0);
+  test(S("abcde"), "abcdeabcde", 4, 5, 0);
+  test(S("abcde"), "abcdeabcde", 4, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 4, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos);
+  test(S("abcde"), "", 5, 0, 5);
+  test(S("abcde"), "abcde", 5, 0, 5);
+  test(S("abcde"), "abcde", 5, 1, 0);
+  test(S("abcde"), "abcde", 5, 2, 0);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S("abcde"), "abcde", 5, 4, 0);
-    test(S("abcde"), "abcde", 5, 5, 0);
-    test(S("abcde"), "abcdeabcde", 5, 0, 5);
-    test(S("abcde"), "abcdeabcde", 5, 1, 0);
-    test(S("abcde"), "abcdeabcde", 5, 5, 0);
-    test(S("abcde"), "abcdeabcde", 5, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 5, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
-    test(S("abcde"), "", 6, 0, 5);
-    test(S("abcde"), "abcde", 6, 0, 5);
-    test(S("abcde"), "abcde", 6, 1, 0);
-    test(S("abcde"), "abcde", 6, 2, 0);
-    test(S("abcde"), "abcde", 6, 4, 0);
-    test(S("abcde"), "abcde", 6, 5, 0);
-    test(S("abcde"), "abcdeabcde", 6, 0, 5);
-    test(S("abcde"), "abcdeabcde", 6, 1, 0);
-    test(S("abcde"), "abcdeabcde", 6, 5, 0);
-    test(S("abcde"), "abcdeabcde", 6, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, 5);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos);
-    test(S("abcdeabcde"), "", 0, 0, 0);
-    test(S("abcdeabcde"), "abcde", 0, 0, 0);
-    test(S("abcdeabcde"), "abcde", 0, 1, 0);
-    test(S("abcdeabcde"), "abcde", 0, 2, 0);
-    test(S("abcdeabcde"), "abcde", 0, 4, 0);
-    test(S("abcdeabcde"), "abcde", 0, 5, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 0, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 1, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 5, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
-    test(S("abcdeabcde"), "", 1, 0, 1);
-    test(S("abcdeabcde"), "abcde", 1, 0, 1);
-    test(S("abcdeabcde"), "abcde", 1, 1, 0);
-    test(S("abcdeabcde"), "abcde", 1, 2, 0);
-    test(S("abcdeabcde"), "abcde", 1, 4, 0);
-    test(S("abcdeabcde"), "abcde", 1, 5, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 0, 1);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 1, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 5, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcdeabcde"), "", 5, 0, 5);
-    test(S("abcdeabcde"), "abcde", 5, 0, 5);
-    test(S("abcdeabcde"), "abcde", 5, 1, 5);
-    test(S("abcdeabcde"), "abcde", 5, 2, 5);
-    test(S("abcdeabcde"), "abcde", 5, 4, 5);
-    test(S("abcdeabcde"), "abcde", 5, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 0, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
-    test(S("abcdeabcde"), "", 9, 0, 9);
-    test(S("abcdeabcde"), "abcde", 9, 0, 9);
-    test(S("abcdeabcde"), "abcde", 9, 1, 5);
-    test(S("abcdeabcde"), "abcde", 9, 2, 5);
-    test(S("abcdeabcde"), "abcde", 9, 4, 5);
-    test(S("abcdeabcde"), "abcde", 9, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 0, 9);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos);
-    test(S("abcdeabcde"), "", 10, 0, 10);
-    test(S("abcdeabcde"), "abcde", 10, 0, 10);
-    test(S("abcdeabcde"), "abcde", 10, 1, 5);
-    test(S("abcdeabcde"), "abcde", 10, 2, 5);
-    test(S("abcdeabcde"), "abcde", 10, 4, 5);
-    test(S("abcdeabcde"), "abcde", 10, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 0, 10);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 1, 5);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S("abcde"), "abcde", 5, 4, 0);
+  test(S("abcde"), "abcde", 5, 5, 0);
+  test(S("abcde"), "abcdeabcde", 5, 0, 5);
+  test(S("abcde"), "abcdeabcde", 5, 1, 0);
+  test(S("abcde"), "abcdeabcde", 5, 5, 0);
+  test(S("abcde"), "abcdeabcde", 5, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 5, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
+  test(S("abcde"), "", 6, 0, 5);
+  test(S("abcde"), "abcde", 6, 0, 5);
+  test(S("abcde"), "abcde", 6, 1, 0);
+  test(S("abcde"), "abcde", 6, 2, 0);
+  test(S("abcde"), "abcde", 6, 4, 0);
+  test(S("abcde"), "abcde", 6, 5, 0);
+  test(S("abcde"), "abcdeabcde", 6, 0, 5);
+  test(S("abcde"), "abcdeabcde", 6, 1, 0);
+  test(S("abcde"), "abcdeabcde", 6, 5, 0);
+  test(S("abcde"), "abcdeabcde", 6, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, 5);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos);
+  test(S("abcdeabcde"), "", 0, 0, 0);
+  test(S("abcdeabcde"), "abcde", 0, 0, 0);
+  test(S("abcdeabcde"), "abcde", 0, 1, 0);
+  test(S("abcdeabcde"), "abcde", 0, 2, 0);
+  test(S("abcdeabcde"), "abcde", 0, 4, 0);
+  test(S("abcdeabcde"), "abcde", 0, 5, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 0, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 1, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 5, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
+  test(S("abcdeabcde"), "", 1, 0, 1);
+  test(S("abcdeabcde"), "abcde", 1, 0, 1);
+  test(S("abcdeabcde"), "abcde", 1, 1, 0);
+  test(S("abcdeabcde"), "abcde", 1, 2, 0);
+  test(S("abcdeabcde"), "abcde", 1, 4, 0);
+  test(S("abcdeabcde"), "abcde", 1, 5, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 0, 1);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 1, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 5, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcdeabcde"), "", 5, 0, 5);
+  test(S("abcdeabcde"), "abcde", 5, 0, 5);
+  test(S("abcdeabcde"), "abcde", 5, 1, 5);
+  test(S("abcdeabcde"), "abcde", 5, 2, 5);
+  test(S("abcdeabcde"), "abcde", 5, 4, 5);
+  test(S("abcdeabcde"), "abcde", 5, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 0, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
+  test(S("abcdeabcde"), "", 9, 0, 9);
+  test(S("abcdeabcde"), "abcde", 9, 0, 9);
+  test(S("abcdeabcde"), "abcde", 9, 1, 5);
+  test(S("abcdeabcde"), "abcde", 9, 2, 5);
+  test(S("abcdeabcde"), "abcde", 9, 4, 5);
+  test(S("abcdeabcde"), "abcde", 9, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 0, 9);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos);
+  test(S("abcdeabcde"), "", 10, 0, 10);
+  test(S("abcdeabcde"), "abcde", 10, 0, 10);
+  test(S("abcdeabcde"), "abcde", 10, 1, 5);
+  test(S("abcdeabcde"), "abcde", 10, 2, 5);
+  test(S("abcdeabcde"), "abcde", 10, 4, 5);
+  test(S("abcdeabcde"), "abcde", 10, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 0, 10);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 1, 5);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test2()
-{
-    test(S("abcdeabcde"), "abcdeabcde", 10, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
-    test(S("abcdeabcde"), "", 11, 0, 10);
-    test(S("abcdeabcde"), "abcde", 11, 0, 10);
-    test(S("abcdeabcde"), "abcde", 11, 1, 5);
-    test(S("abcdeabcde"), "abcde", 11, 2, 5);
-    test(S("abcdeabcde"), "abcde", 11, 4, 5);
-    test(S("abcdeabcde"), "abcde", 11, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 0, 10);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, 10);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20);
+TEST_CONSTEXPR_CXX20 void test2() {
+  test(S("abcdeabcde"), "abcdeabcde", 10, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
+  test(S("abcdeabcde"), "", 11, 0, 10);
+  test(S("abcdeabcde"), "abcde", 11, 0, 10);
+  test(S("abcdeabcde"), "abcde", 11, 1, 5);
+  test(S("abcdeabcde"), "abcde", 11, 2, 5);
+  test(S("abcdeabcde"), "abcde", 11, 4, 5);
+  test(S("abcdeabcde"), "abcde", 11, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 0, 10);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, 10);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test3()
-{
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 21, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 2, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 4, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 5, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 5, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 9, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 20, 0);
+TEST_CONSTEXPR_CXX20 void test3() {
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 21, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 2, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 4, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 5, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 5, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 9, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 20, 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -388,8 +386,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_size.pass.cpp
index 45d8a24b9738826..576f908655d6d70 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_size.pass.cpp
@@ -17,129 +17,123 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(str, pos));
-    assert(s.rfind(str, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x + str.size() <= s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(str, pos));
+  assert(s.rfind(str, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x + str.size() <= s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, const S& str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(str));
-    assert(s.rfind(str) == x);
-    if (x != S::npos)
-        assert(0 <= x && x + str.size() <= s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, const S& str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(str));
+  assert(s.rfind(str) == x);
+  if (x != S::npos)
+    assert(0 <= x && x + str.size() <= s.size());
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), S(""), 0, 0);
-    test(S(""), S("abcde"), 0, S::npos);
-    test(S(""), S("abcdeabcde"), 0, S::npos);
-    test(S(""), S("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S(""), S(""), 1, 0);
-    test(S(""), S("abcde"), 1, S::npos);
-    test(S(""), S("abcdeabcde"), 1, S::npos);
-    test(S(""), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcde"), S(""), 0, 0);
-    test(S("abcde"), S("abcde"), 0, 0);
-    test(S("abcde"), S("abcdeabcde"), 0, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S("abcde"), S(""), 1, 1);
-    test(S("abcde"), S("abcde"), 1, 0);
-    test(S("abcde"), S("abcdeabcde"), 1, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcde"), S(""), 2, 2);
-    test(S("abcde"), S("abcde"), 2, 0);
-    test(S("abcde"), S("abcdeabcde"), 2, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 2, S::npos);
-    test(S("abcde"), S(""), 4, 4);
-    test(S("abcde"), S("abcde"), 4, 0);
-    test(S("abcde"), S("abcdeabcde"), 4, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 4, S::npos);
-    test(S("abcde"), S(""), 5, 5);
-    test(S("abcde"), S("abcde"), 5, 0);
-    test(S("abcde"), S("abcdeabcde"), 5, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
-    test(S("abcde"), S(""), 6, 5);
-    test(S("abcde"), S("abcde"), 6, 0);
-    test(S("abcde"), S("abcdeabcde"), 6, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 6, S::npos);
-    test(S("abcdeabcde"), S(""), 0, 0);
-    test(S("abcdeabcde"), S("abcde"), 0, 0);
-    test(S("abcdeabcde"), S("abcdeabcde"), 0, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S("abcdeabcde"), S(""), 1, 1);
-    test(S("abcdeabcde"), S("abcde"), 1, 0);
-    test(S("abcdeabcde"), S("abcdeabcde"), 1, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcdeabcde"), S(""), 5, 5);
-    test(S("abcdeabcde"), S("abcde"), 5, 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 5, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
-    test(S("abcdeabcde"), S(""), 9, 9);
-    test(S("abcdeabcde"), S("abcde"), 9, 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 9, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 9, S::npos);
-    test(S("abcdeabcde"), S(""), 10, 10);
-    test(S("abcdeabcde"), S("abcde"), 10, 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 10, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos);
-    test(S("abcdeabcde"), S(""), 11, 10);
-    test(S("abcdeabcde"), S("abcde"), 11, 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 11, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 11, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 1, 1);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 19, 19);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 19, 15);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 19, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 20, 20);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 20, 15);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 20, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 21, 20);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 21, 15);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 21, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 21, 0);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), S(""), 0, 0);
+  test(S(""), S("abcde"), 0, S::npos);
+  test(S(""), S("abcdeabcde"), 0, S::npos);
+  test(S(""), S("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S(""), S(""), 1, 0);
+  test(S(""), S("abcde"), 1, S::npos);
+  test(S(""), S("abcdeabcde"), 1, S::npos);
+  test(S(""), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcde"), S(""), 0, 0);
+  test(S("abcde"), S("abcde"), 0, 0);
+  test(S("abcde"), S("abcdeabcde"), 0, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S("abcde"), S(""), 1, 1);
+  test(S("abcde"), S("abcde"), 1, 0);
+  test(S("abcde"), S("abcdeabcde"), 1, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcde"), S(""), 2, 2);
+  test(S("abcde"), S("abcde"), 2, 0);
+  test(S("abcde"), S("abcdeabcde"), 2, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 2, S::npos);
+  test(S("abcde"), S(""), 4, 4);
+  test(S("abcde"), S("abcde"), 4, 0);
+  test(S("abcde"), S("abcdeabcde"), 4, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 4, S::npos);
+  test(S("abcde"), S(""), 5, 5);
+  test(S("abcde"), S("abcde"), 5, 0);
+  test(S("abcde"), S("abcdeabcde"), 5, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
+  test(S("abcde"), S(""), 6, 5);
+  test(S("abcde"), S("abcde"), 6, 0);
+  test(S("abcde"), S("abcdeabcde"), 6, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 6, S::npos);
+  test(S("abcdeabcde"), S(""), 0, 0);
+  test(S("abcdeabcde"), S("abcde"), 0, 0);
+  test(S("abcdeabcde"), S("abcdeabcde"), 0, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S("abcdeabcde"), S(""), 1, 1);
+  test(S("abcdeabcde"), S("abcde"), 1, 0);
+  test(S("abcdeabcde"), S("abcdeabcde"), 1, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcdeabcde"), S(""), 5, 5);
+  test(S("abcdeabcde"), S("abcde"), 5, 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 5, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
+  test(S("abcdeabcde"), S(""), 9, 9);
+  test(S("abcdeabcde"), S("abcde"), 9, 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 9, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 9, S::npos);
+  test(S("abcdeabcde"), S(""), 10, 10);
+  test(S("abcdeabcde"), S("abcde"), 10, 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 10, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos);
+  test(S("abcdeabcde"), S(""), 11, 10);
+  test(S("abcdeabcde"), S("abcde"), 11, 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 11, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 11, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 1, 1);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 19, 19);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 19, 15);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 19, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 20, 20);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 20, 15);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 20, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 21, 20);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 21, 15);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 21, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 21, 0);
 }
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), S(""), 0);
-    test(S(""), S("abcde"), S::npos);
-    test(S(""), S("abcdeabcde"), S::npos);
-    test(S(""), S("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcde"), S(""), 5);
-    test(S("abcde"), S("abcde"), 0);
-    test(S("abcde"), S("abcdeabcde"), S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcdeabcde"), S(""), 10);
-    test(S("abcdeabcde"), S("abcde"), 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 20);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 15);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), S(""), 0);
+  test(S(""), S("abcde"), S::npos);
+  test(S(""), S("abcdeabcde"), S::npos);
+  test(S(""), S("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcde"), S(""), 5);
+  test(S("abcde"), S("abcde"), 0);
+  test(S("abcde"), S("abcdeabcde"), S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcdeabcde"), S(""), 10);
+  test(S("abcdeabcde"), S("abcde"), 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 20);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 15);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -166,8 +160,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_view_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_view_size.pass.cpp
index bbb5e292d89c020..d3049e6189378f7 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_view_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_rfind/string_view_size.pass.cpp
@@ -17,129 +17,123 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(sv, pos));
-    assert(s.rfind(sv, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x + sv.size() <= s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(sv, pos));
+  assert(s.rfind(sv, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x + sv.size() <= s.size());
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, SV sv, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(sv));
-    assert(s.rfind(sv) == x);
-    if (x != S::npos)
-        assert(0 <= x && x + sv.size() <= s.size());
+TEST_CONSTEXPR_CXX20 void test(const S& s, SV sv, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(sv));
+  assert(s.rfind(sv) == x);
+  if (x != S::npos)
+    assert(0 <= x && x + sv.size() <= s.size());
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test0()
-{
-    test(S(""), SV(""), 0, 0);
-    test(S(""), SV("abcde"), 0, S::npos);
-    test(S(""), SV("abcdeabcde"), 0, S::npos);
-    test(S(""), SV("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S(""), SV(""), 1, 0);
-    test(S(""), SV("abcde"), 1, S::npos);
-    test(S(""), SV("abcdeabcde"), 1, S::npos);
-    test(S(""), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcde"), SV(""), 0, 0);
-    test(S("abcde"), SV("abcde"), 0, 0);
-    test(S("abcde"), SV("abcdeabcde"), 0, S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S("abcde"), SV(""), 1, 1);
-    test(S("abcde"), SV("abcde"), 1, 0);
-    test(S("abcde"), SV("abcdeabcde"), 1, S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcde"), SV(""), 2, 2);
-    test(S("abcde"), SV("abcde"), 2, 0);
-    test(S("abcde"), SV("abcdeabcde"), 2, S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 2, S::npos);
-    test(S("abcde"), SV(""), 4, 4);
-    test(S("abcde"), SV("abcde"), 4, 0);
-    test(S("abcde"), SV("abcdeabcde"), 4, S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 4, S::npos);
-    test(S("abcde"), SV(""), 5, 5);
-    test(S("abcde"), SV("abcde"), 5, 0);
-    test(S("abcde"), SV("abcdeabcde"), 5, S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 5, S::npos);
-    test(S("abcde"), SV(""), 6, 5);
-    test(S("abcde"), SV("abcde"), 6, 0);
-    test(S("abcde"), SV("abcdeabcde"), 6, S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 6, S::npos);
-    test(S("abcdeabcde"), SV(""), 0, 0);
-    test(S("abcdeabcde"), SV("abcde"), 0, 0);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 0, 0);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S("abcdeabcde"), SV(""), 1, 1);
-    test(S("abcdeabcde"), SV("abcde"), 1, 0);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 1, 0);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcdeabcde"), SV(""), 5, 5);
-    test(S("abcdeabcde"), SV("abcde"), 5, 5);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 5, 0);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 5, S::npos);
-    test(S("abcdeabcde"), SV(""), 9, 9);
-    test(S("abcdeabcde"), SV("abcde"), 9, 5);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 9, 0);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 9, S::npos);
-    test(S("abcdeabcde"), SV(""), 10, 10);
-    test(S("abcdeabcde"), SV("abcde"), 10, 5);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 10, 0);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 10, S::npos);
-    test(S("abcdeabcde"), SV(""), 11, 10);
-    test(S("abcdeabcde"), SV("abcde"), 11, 5);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 11, 0);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 11, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 1, 1);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 19, 19);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 19, 15);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 19, 10);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 20, 20);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 20, 15);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 20, 10);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 21, 20);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 21, 15);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 21, 10);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 21, 0);
+TEST_CONSTEXPR_CXX20 void test0() {
+  test(S(""), SV(""), 0, 0);
+  test(S(""), SV("abcde"), 0, S::npos);
+  test(S(""), SV("abcdeabcde"), 0, S::npos);
+  test(S(""), SV("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S(""), SV(""), 1, 0);
+  test(S(""), SV("abcde"), 1, S::npos);
+  test(S(""), SV("abcdeabcde"), 1, S::npos);
+  test(S(""), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcde"), SV(""), 0, 0);
+  test(S("abcde"), SV("abcde"), 0, 0);
+  test(S("abcde"), SV("abcdeabcde"), 0, S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S("abcde"), SV(""), 1, 1);
+  test(S("abcde"), SV("abcde"), 1, 0);
+  test(S("abcde"), SV("abcdeabcde"), 1, S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcde"), SV(""), 2, 2);
+  test(S("abcde"), SV("abcde"), 2, 0);
+  test(S("abcde"), SV("abcdeabcde"), 2, S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 2, S::npos);
+  test(S("abcde"), SV(""), 4, 4);
+  test(S("abcde"), SV("abcde"), 4, 0);
+  test(S("abcde"), SV("abcdeabcde"), 4, S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 4, S::npos);
+  test(S("abcde"), SV(""), 5, 5);
+  test(S("abcde"), SV("abcde"), 5, 0);
+  test(S("abcde"), SV("abcdeabcde"), 5, S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 5, S::npos);
+  test(S("abcde"), SV(""), 6, 5);
+  test(S("abcde"), SV("abcde"), 6, 0);
+  test(S("abcde"), SV("abcdeabcde"), 6, S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), 6, S::npos);
+  test(S("abcdeabcde"), SV(""), 0, 0);
+  test(S("abcdeabcde"), SV("abcde"), 0, 0);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 0, 0);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S("abcdeabcde"), SV(""), 1, 1);
+  test(S("abcdeabcde"), SV("abcde"), 1, 0);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 1, 0);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcdeabcde"), SV(""), 5, 5);
+  test(S("abcdeabcde"), SV("abcde"), 5, 5);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 5, 0);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 5, S::npos);
+  test(S("abcdeabcde"), SV(""), 9, 9);
+  test(S("abcdeabcde"), SV("abcde"), 9, 5);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 9, 0);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 9, S::npos);
+  test(S("abcdeabcde"), SV(""), 10, 10);
+  test(S("abcdeabcde"), SV("abcde"), 10, 5);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 10, 0);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 10, S::npos);
+  test(S("abcdeabcde"), SV(""), 11, 10);
+  test(S("abcdeabcde"), SV("abcde"), 11, 5);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 11, 0);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), 11, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 1, 1);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 19, 19);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 19, 15);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 19, 10);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 20, 20);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 20, 15);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 20, 10);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 21, 20);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 21, 15);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 21, 10);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 21, 0);
 }
 
 template <class S, class SV>
-TEST_CONSTEXPR_CXX20 void test1()
-{
-    test(S(""), SV(""), 0);
-    test(S(""), SV("abcde"), S::npos);
-    test(S(""), SV("abcdeabcde"), S::npos);
-    test(S(""), SV("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcde"), SV(""), 5);
-    test(S("abcde"), SV("abcde"), 0);
-    test(S("abcde"), SV("abcdeabcde"), S::npos);
-    test(S("abcde"), SV("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcdeabcde"), SV(""), 10);
-    test(S("abcdeabcde"), SV("abcde"), 5);
-    test(S("abcdeabcde"), SV("abcdeabcde"), 0);
-    test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcdeabcdeabcdeabcde"), SV(""), 20);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 15);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 10);
-    test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 0);
+TEST_CONSTEXPR_CXX20 void test1() {
+  test(S(""), SV(""), 0);
+  test(S(""), SV("abcde"), S::npos);
+  test(S(""), SV("abcdeabcde"), S::npos);
+  test(S(""), SV("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcde"), SV(""), 5);
+  test(S("abcde"), SV("abcde"), 0);
+  test(S("abcde"), SV("abcdeabcde"), S::npos);
+  test(S("abcde"), SV("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcdeabcde"), SV(""), 10);
+  test(S("abcdeabcde"), SV("abcde"), 5);
+  test(S("abcdeabcde"), SV("abcdeabcde"), 0);
+  test(S("abcdeabcde"), SV("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcdeabcdeabcdeabcde"), SV(""), 20);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcde"), 15);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcde"), 10);
+  test(S("abcdeabcdeabcdeabcde"), SV("abcdeabcdeabcdeabcde"), 0);
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -161,8 +155,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.ops/string_substr/substr.pass.cpp b/libcxx/test/std/strings/basic.string/string.ops/string_substr/substr.pass.cpp
index 917bb0fa38d01ab..83cfa8737408ca5 100644
--- a/libcxx/test/std/strings/basic.string/string.ops/string_substr/substr.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.ops/string_substr/substr.pass.cpp
@@ -21,31 +21,24 @@
 #include "min_allocator.h"
 
 template <class S>
-TEST_CONSTEXPR_CXX20 void
-test(const S& s, typename S::size_type pos, typename S::size_type n)
-{
-    if (pos <= s.size())
-    {
-        S str = s.substr(pos, n);
-        LIBCPP_ASSERT(str.__invariants());
-        assert(pos <= s.size());
-        typename S::size_type rlen = std::min(n, s.size() - pos);
-        assert(str.size() == rlen);
-        assert(S::traits_type::compare(s.data()+pos, str.data(), rlen) == 0);
-    }
+TEST_CONSTEXPR_CXX20 void test(const S& s, typename S::size_type pos, typename S::size_type n) {
+  if (pos <= s.size()) {
+    S str = s.substr(pos, n);
+    LIBCPP_ASSERT(str.__invariants());
+    assert(pos <= s.size());
+    typename S::size_type rlen = std::min(n, s.size() - pos);
+    assert(str.size() == rlen);
+    assert(S::traits_type::compare(s.data() + pos, str.data(), rlen) == 0);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else if (!TEST_IS_CONSTANT_EVALUATED)
-    {
-        try
-        {
-            S str = s.substr(pos, n);
-            assert(false);
-        }
-        catch (std::out_of_range&)
-        {
-            assert(pos > s.size());
-        }
+  else if (!TEST_IS_CONSTANT_EVALUATED) {
+    try {
+      S str = s.substr(pos, n);
+      assert(false);
+    } catch (std::out_of_range&) {
+      assert(pos > s.size());
     }
+  }
 #endif
 }
 
@@ -127,14 +120,14 @@ TEST_CONSTEXPR_CXX20 bool test_alloc() {
     test_allocator_statistics stats;
     {
       string str = string(alloc(&stats));
-      stats = test_allocator_statistics();
+      stats      = test_allocator_statistics();
       (void)str.substr();
       assert(stats.moved == 0);
       assert(stats.copied == 0);
     }
     {
       string str = string(alloc(&stats));
-      stats = test_allocator_statistics();
+      stats      = test_allocator_statistics();
       (void)std::move(str).substr();
       assert(stats.moved == 0);
       assert(stats.copied == 0);
@@ -144,8 +137,7 @@ TEST_CONSTEXPR_CXX20 bool test_alloc() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
   test_alloc();
 #if TEST_STD_VER > 17

diff  --git a/libcxx/test/std/strings/basic.string/string.require/contiguous.pass.cpp b/libcxx/test/std/strings/basic.string/string.require/contiguous.pass.cpp
index 822f1a6171a1b3c..0baf3060f11e353 100644
--- a/libcxx/test/std/strings/basic.string/string.require/contiguous.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.require/contiguous.pass.cpp
@@ -17,12 +17,10 @@
 #include "test_allocator.h"
 #include "min_allocator.h"
 
-
 template <class C>
-TEST_CONSTEXPR_CXX20 void test_contiguous ( const C &c )
-{
-    for ( std::size_t i = 0; i < c.size(); ++i )
-        assert ( *(c.begin() + static_cast<typename C::
diff erence_type>(i)) == *(std::addressof(*c.begin()) + i));
+TEST_CONSTEXPR_CXX20 void test_contiguous(const C& c) {
+  for (std::size_t i = 0; i < c.size(); ++i)
+    assert(*(c.begin() + static_cast<typename C::
diff erence_type>(i)) == *(std::addressof(*c.begin()) + i));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {
@@ -53,8 +51,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 #if TEST_STD_VER > 17
   static_assert(test());

diff  --git a/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.char.pass.cpp b/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.char.pass.cpp
index a3ad1fd94b63ac4..6a5929f82a59f65 100644
--- a/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.char.pass.cpp
@@ -19,22 +19,21 @@
 constexpr bool test() {
   {
     typedef std::string S;
-    S  s1 {};
-    S  s2 { "abcde", 5 };
+    S s1{};
+    S s2{"abcde", 5};
 
     ASSERT_NOEXCEPT(s1.starts_with('e'));
 
-    assert (!s1.starts_with('a'));
-    assert (!s1.starts_with('x'));
-    assert ( s2.starts_with('a'));
-    assert (!s2.starts_with('x'));
+    assert(!s1.starts_with('a'));
+    assert(!s1.starts_with('x'));
+    assert(s2.starts_with('a'));
+    assert(!s2.starts_with('x'));
   }
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
   static_assert(test());
 

diff  --git a/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.ptr.pass.cpp b/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.ptr.pass.cpp
index 50320355dd25d6d..8f0dc046c83a406 100644
--- a/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.ptr.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.ptr.pass.cpp
@@ -19,50 +19,49 @@
 constexpr bool test() {
   {
     typedef std::string S;
-    const char *s = "abcde";
-    S  s0 {};
-    S  s1 { s, 1 };
-    S  s2 { s, 2 };
-//     S  s3 { s, 3 };
-//     S  s4 { s, 4 };
-//     S  s5 { s, 5 };
-    S  sNot {"def", 3 };
+    const char* s = "abcde";
+    S s0{};
+    S s1{s, 1};
+    S s2{s, 2};
+    //     S  s3 { s, 3 };
+    //     S  s4 { s, 4 };
+    //     S  s5 { s, 5 };
+    S sNot{"def", 3};
 
     LIBCPP_ASSERT_NOEXCEPT(s0.starts_with(""));
 
-    assert ( s0.starts_with(""));
-    assert (!s0.starts_with("a"));
+    assert(s0.starts_with(""));
+    assert(!s0.starts_with("a"));
 
-    assert ( s1.starts_with(""));
-    assert ( s1.starts_with("a"));
-    assert (!s1.starts_with("ab"));
-    assert (!s1.starts_with("abc"));
-    assert (!s1.starts_with("abcd"));
-    assert (!s1.starts_with("abcde"));
-    assert (!s1.starts_with("def"));
+    assert(s1.starts_with(""));
+    assert(s1.starts_with("a"));
+    assert(!s1.starts_with("ab"));
+    assert(!s1.starts_with("abc"));
+    assert(!s1.starts_with("abcd"));
+    assert(!s1.starts_with("abcde"));
+    assert(!s1.starts_with("def"));
 
-    assert ( s2.starts_with(""));
-    assert ( s2.starts_with("a"));
-    assert ( s2.starts_with("ab"));
-    assert (!s2.starts_with("abc"));
-    assert (!s2.starts_with("abcd"));
-    assert (!s2.starts_with("abcde"));
-    assert (!s2.starts_with("def"));
+    assert(s2.starts_with(""));
+    assert(s2.starts_with("a"));
+    assert(s2.starts_with("ab"));
+    assert(!s2.starts_with("abc"));
+    assert(!s2.starts_with("abcd"));
+    assert(!s2.starts_with("abcde"));
+    assert(!s2.starts_with("def"));
 
-    assert ( sNot.starts_with(""));
-    assert (!sNot.starts_with("a"));
-    assert (!sNot.starts_with("ab"));
-    assert (!sNot.starts_with("abc"));
-    assert (!sNot.starts_with("abcd"));
-    assert (!sNot.starts_with("abcde"));
-    assert ( sNot.starts_with("def"));
+    assert(sNot.starts_with(""));
+    assert(!sNot.starts_with("a"));
+    assert(!sNot.starts_with("ab"));
+    assert(!sNot.starts_with("abc"));
+    assert(!sNot.starts_with("abcd"));
+    assert(!sNot.starts_with("abcde"));
+    assert(sNot.starts_with("def"));
   }
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
   static_assert(test());
 

diff  --git a/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.string_view.pass.cpp
index c0734d090da7a4e..c3c1eb03ba23cfc 100644
--- a/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.starts_with/starts_with.string_view.pass.cpp
@@ -17,60 +17,59 @@
 #include "test_macros.h"
 
 constexpr bool test() {
-    typedef std::string S;
-    typedef std::string_view SV;
-    const char *s = "abcde";
+  typedef std::string S;
+  typedef std::string_view SV;
+  const char* s = "abcde";
 
-    S   s0;
-    S   s1  { s, 1 };
-    S   s2  { s, 2 };
-//  S   s3  { s, 3 };
-//  S   s4  { s, 4 };
-//  S   s5  { s, 5 };
-    S  sNot { "def", 3 };
+  S s0;
+  S s1{s, 1};
+  S s2{s, 2};
+  //  S   s3  { s, 3 };
+  //  S   s4  { s, 4 };
+  //  S   s5  { s, 5 };
+  S sNot{"def", 3};
 
-    SV  sv0;
-    SV  sv1 { s, 1 };
-    SV  sv2 { s, 2 };
-    SV  sv3 { s, 3 };
-    SV  sv4 { s, 4 };
-    SV  sv5 { s, 5 };
-    SV svNot {"def", 3 };
+  SV sv0;
+  SV sv1{s, 1};
+  SV sv2{s, 2};
+  SV sv3{s, 3};
+  SV sv4{s, 4};
+  SV sv5{s, 5};
+  SV svNot{"def", 3};
 
-    ASSERT_NOEXCEPT(s0.starts_with(sv0));
+  ASSERT_NOEXCEPT(s0.starts_with(sv0));
 
-    assert ( s0.starts_with(sv0));
-    assert (!s0.starts_with(sv1));
+  assert(s0.starts_with(sv0));
+  assert(!s0.starts_with(sv1));
 
-    assert ( s1.starts_with(sv0));
-    assert ( s1.starts_with(sv1));
-    assert (!s1.starts_with(sv2));
-    assert (!s1.starts_with(sv3));
-    assert (!s1.starts_with(sv4));
-    assert (!s1.starts_with(sv5));
-    assert (!s1.starts_with(svNot));
+  assert(s1.starts_with(sv0));
+  assert(s1.starts_with(sv1));
+  assert(!s1.starts_with(sv2));
+  assert(!s1.starts_with(sv3));
+  assert(!s1.starts_with(sv4));
+  assert(!s1.starts_with(sv5));
+  assert(!s1.starts_with(svNot));
 
-    assert ( s2.starts_with(sv0));
-    assert ( s2.starts_with(sv1));
-    assert ( s2.starts_with(sv2));
-    assert (!s2.starts_with(sv3));
-    assert (!s2.starts_with(sv4));
-    assert (!s2.starts_with(sv5));
-    assert (!s2.starts_with(svNot));
+  assert(s2.starts_with(sv0));
+  assert(s2.starts_with(sv1));
+  assert(s2.starts_with(sv2));
+  assert(!s2.starts_with(sv3));
+  assert(!s2.starts_with(sv4));
+  assert(!s2.starts_with(sv5));
+  assert(!s2.starts_with(svNot));
 
-    assert ( sNot.starts_with(sv0));
-    assert (!sNot.starts_with(sv1));
-    assert (!sNot.starts_with(sv2));
-    assert (!sNot.starts_with(sv3));
-    assert (!sNot.starts_with(sv4));
-    assert (!sNot.starts_with(sv5));
-    assert ( sNot.starts_with(svNot));
+  assert(sNot.starts_with(sv0));
+  assert(!sNot.starts_with(sv1));
+  assert(!sNot.starts_with(sv2));
+  assert(!sNot.starts_with(sv3));
+  assert(!sNot.starts_with(sv4));
+  assert(!sNot.starts_with(sv5));
+  assert(sNot.starts_with(svNot));
 
-    return true;
+  return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
   static_assert(test());
 

diff  --git a/libcxx/test/std/strings/basic.string/test_traits.h b/libcxx/test/std/strings/basic.string/test_traits.h
index 78a98cb96d79b8c..ea3d4c16b7de213 100644
--- a/libcxx/test/std/strings/basic.string/test_traits.h
+++ b/libcxx/test/std/strings/basic.string/test_traits.h
@@ -10,9 +10,8 @@
 #define TEST_TRAITS_H
 
 template <class charT>
-struct test_traits
-{
-    typedef charT     char_type;
+struct test_traits {
+  typedef charT char_type;
 };
 
 #endif // TEST_TRAITS_H

diff  --git a/libcxx/test/std/strings/basic.string/traits_mismatch.verify.cpp b/libcxx/test/std/strings/basic.string/traits_mismatch.verify.cpp
index 82c438b0cb0331a..005efff98d1c2f8 100644
--- a/libcxx/test/std/strings/basic.string/traits_mismatch.verify.cpp
+++ b/libcxx/test/std/strings/basic.string/traits_mismatch.verify.cpp
@@ -13,4 +13,5 @@
 
 #include <string>
 
-std::basic_string<char, std::char_traits<wchar_t> > s; // expected-error@*:* {{traits_type::char_type must be the same type as CharT}}
+std::basic_string<char, std::char_traits<wchar_t> >
+    s; // expected-error@*:* {{traits_type::char_type must be the same type as CharT}}

diff  --git a/libcxx/test/std/strings/basic.string/types.pass.cpp b/libcxx/test/std/strings/basic.string/types.pass.cpp
index 542336bdf12bc6d..45408fa62029863 100644
--- a/libcxx/test/std/strings/basic.string/types.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/types.pass.cpp
@@ -41,48 +41,44 @@
 #include "min_allocator.h"
 
 template <class Traits, class Allocator>
-void
-test()
-{
-    typedef std::basic_string<typename Traits::char_type, Traits, Allocator> S;
+void test() {
+  typedef std::basic_string<typename Traits::char_type, Traits, Allocator> S;
 
-    static_assert((std::is_same<typename S::traits_type, Traits>::value), "");
-    static_assert((std::is_same<typename S::value_type, typename Traits::char_type>::value), "");
-    static_assert((std::is_same<typename S::value_type, typename Allocator::value_type>::value), "");
-    static_assert((std::is_same<typename S::allocator_type, Allocator>::value), "");
-    static_assert((std::is_same<typename S::size_type, typename std::allocator_traits<Allocator>::size_type>::value), "");
-    static_assert((std::is_same<typename S::
diff erence_type, typename std::allocator_traits<Allocator>::
diff erence_type>::value), "");
-    static_assert((std::is_same<typename S::reference, typename S::value_type&>::value), "");
-    static_assert((std::is_same<typename S::const_reference, const typename S::value_type&>::value), "");
-    static_assert((std::is_same<typename S::pointer, typename std::allocator_traits<Allocator>::pointer>::value), "");
-    static_assert((std::is_same<typename S::const_pointer, typename std::allocator_traits<Allocator>::const_pointer>::value), "");
-    static_assert((std::is_same<
-        typename std::iterator_traits<typename S::iterator>::iterator_category,
-        std::random_access_iterator_tag>::value), "");
-    static_assert((std::is_same<
-        typename std::iterator_traits<typename S::const_iterator>::iterator_category,
-        std::random_access_iterator_tag>::value), "");
-    static_assert((std::is_same<
-        typename S::reverse_iterator,
-        std::reverse_iterator<typename S::iterator> >::value), "");
-    static_assert((std::is_same<
-        typename S::const_reverse_iterator,
-        std::reverse_iterator<typename S::const_iterator> >::value), "");
-    static_assert(S::npos == -1, "");
+  static_assert((std::is_same<typename S::traits_type, Traits>::value), "");
+  static_assert((std::is_same<typename S::value_type, typename Traits::char_type>::value), "");
+  static_assert((std::is_same<typename S::value_type, typename Allocator::value_type>::value), "");
+  static_assert((std::is_same<typename S::allocator_type, Allocator>::value), "");
+  static_assert((std::is_same<typename S::size_type, typename std::allocator_traits<Allocator>::size_type>::value), "");
+  static_assert(
+      (std::is_same<typename S::
diff erence_type, typename std::allocator_traits<Allocator>::
diff erence_type>::value),
+      "");
+  static_assert((std::is_same<typename S::reference, typename S::value_type&>::value), "");
+  static_assert((std::is_same<typename S::const_reference, const typename S::value_type&>::value), "");
+  static_assert((std::is_same<typename S::pointer, typename std::allocator_traits<Allocator>::pointer>::value), "");
+  static_assert(
+      (std::is_same<typename S::const_pointer, typename std::allocator_traits<Allocator>::const_pointer>::value), "");
+  static_assert((std::is_same< typename std::iterator_traits<typename S::iterator>::iterator_category,
+                               std::random_access_iterator_tag>::value),
+                "");
+  static_assert((std::is_same< typename std::iterator_traits<typename S::const_iterator>::iterator_category,
+                               std::random_access_iterator_tag>::value),
+                "");
+  static_assert((std::is_same< typename S::reverse_iterator, std::reverse_iterator<typename S::iterator> >::value), "");
+  static_assert(
+      (std::is_same< typename S::const_reverse_iterator, std::reverse_iterator<typename S::const_iterator> >::value),
+      "");
+  static_assert(S::npos == -1, "");
 }
 
-int main(int, char**)
-{
-    test<test_traits<char>, test_allocator<char> >();
+int main(int, char**) {
+  test<test_traits<char>, test_allocator<char> >();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test<std::char_traits<wchar_t>, std::allocator<wchar_t> >();
+  test<std::char_traits<wchar_t>, std::allocator<wchar_t> >();
 #endif
-    static_assert((std::is_same<std::basic_string<char>::traits_type,
-                                std::char_traits<char> >::value), "");
-    static_assert((std::is_same<std::basic_string<char>::allocator_type,
-                                std::allocator<char> >::value), "");
+  static_assert((std::is_same<std::basic_string<char>::traits_type, std::char_traits<char> >::value), "");
+  static_assert((std::is_same<std::basic_string<char>::allocator_type, std::allocator<char> >::value), "");
 #if TEST_STD_VER >= 11
-    test<std::char_traits<char>, min_allocator<char> >();
+  test<std::char_traits<char>, min_allocator<char> >();
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/c.strings/cctype.pass.cpp b/libcxx/test/std/strings/c.strings/cctype.pass.cpp
index c26c1e6a20fcb7b..6d6d2a101744202 100644
--- a/libcxx/test/std/strings/c.strings/cctype.pass.cpp
+++ b/libcxx/test/std/strings/c.strings/cctype.pass.cpp
@@ -15,93 +15,91 @@
 #include "test_macros.h"
 
 #ifdef isalnum
-#error isalnum defined
+#  error isalnum defined
 #endif
 
 #ifdef isalpha
-#error isalpha defined
+#  error isalpha defined
 #endif
 
 #ifdef isblank
-#error isblank defined
+#  error isblank defined
 #endif
 
 #ifdef iscntrl
-#error iscntrl defined
+#  error iscntrl defined
 #endif
 
 #ifdef isdigit
-#error isdigit defined
+#  error isdigit defined
 #endif
 
 #ifdef isgraph
-#error isgraph defined
+#  error isgraph defined
 #endif
 
 #ifdef islower
-#error islower defined
+#  error islower defined
 #endif
 
 #ifdef isprint
-#error isprint defined
+#  error isprint defined
 #endif
 
 #ifdef ispunct
-#error ispunct defined
+#  error ispunct defined
 #endif
 
 #ifdef isspace
-#error isspace defined
+#  error isspace defined
 #endif
 
 #ifdef isupper
-#error isupper defined
+#  error isupper defined
 #endif
 
 #ifdef isxdigit
-#error isxdigit defined
+#  error isxdigit defined
 #endif
 
 #ifdef tolower
-#error tolower defined
+#  error tolower defined
 #endif
 
 #ifdef toupper
-#error toupper defined
+#  error toupper defined
 #endif
 
-int main(int, char**)
-{
-
-    ASSERT_SAME_TYPE(int, decltype(std::isalnum(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::isalpha(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::isblank(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::iscntrl(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::isdigit(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::isgraph(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::islower(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::isprint(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::ispunct(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::isspace(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::isupper(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::isxdigit(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::tolower(0)));
-    ASSERT_SAME_TYPE(int, decltype(std::toupper(0)));
-
-    assert( std::isalnum('a'));
-    assert( std::isalpha('a'));
-    assert( std::isblank(' '));
-    assert(!std::iscntrl(' '));
-    assert(!std::isdigit('a'));
-    assert( std::isgraph('a'));
-    assert( std::islower('a'));
-    assert( std::isprint('a'));
-    assert(!std::ispunct('a'));
-    assert(!std::isspace('a'));
-    assert(!std::isupper('a'));
-    assert( std::isxdigit('a'));
-    assert( std::tolower('A') == 'a');
-    assert( std::toupper('a') == 'A');
+int main(int, char**) {
+  ASSERT_SAME_TYPE(int, decltype(std::isalnum(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::isalpha(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::isblank(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::iscntrl(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::isdigit(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::isgraph(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::islower(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::isprint(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::ispunct(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::isspace(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::isupper(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::isxdigit(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::tolower(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::toupper(0)));
+
+  assert(std::isalnum('a'));
+  assert(std::isalpha('a'));
+  assert(std::isblank(' '));
+  assert(!std::iscntrl(' '));
+  assert(!std::isdigit('a'));
+  assert(std::isgraph('a'));
+  assert(std::islower('a'));
+  assert(std::isprint('a'));
+  assert(!std::ispunct('a'));
+  assert(!std::isspace('a'));
+  assert(!std::isupper('a'));
+  assert(std::isxdigit('a'));
+  assert(std::tolower('A') == 'a');
+  assert(std::toupper('a') == 'A');
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/c.strings/cstring.pass.cpp b/libcxx/test/std/strings/c.strings/cstring.pass.cpp
index 02842a6f12490a5..ddd4531c2b31cd0 100644
--- a/libcxx/test/std/strings/c.strings/cstring.pass.cpp
+++ b/libcxx/test/std/strings/c.strings/cstring.pass.cpp
@@ -15,124 +15,123 @@
 #include "test_macros.h"
 
 #ifndef NULL
-#error NULL not defined
+#  error NULL not defined
 #endif
 
-int main(int, char**)
-{
-    // Functions we get directly from the C library (just check the signature)
-    {
-        std::size_t s = 0;
-        void* vp = 0;
-        const void* vpc = 0;
-        char* cp = 0;
-        const char* cpc = 0;
-        ASSERT_SAME_TYPE(void*,         decltype(std::memcpy(vp, vpc, s)));
-        ASSERT_SAME_TYPE(void*,         decltype(std::memmove(vp, vpc, s)));
-        ASSERT_SAME_TYPE(char*,         decltype(std::strcpy(cp, cpc)));
-        ASSERT_SAME_TYPE(char*,         decltype(std::strncpy(cp, cpc, s)));
-        ASSERT_SAME_TYPE(char*,         decltype(std::strcat(cp, cpc)));
-        ASSERT_SAME_TYPE(char*,         decltype(std::strncat(cp, cpc, s)));
-        ASSERT_SAME_TYPE(int,           decltype(std::memcmp(vpc, vpc, s)));
-        ASSERT_SAME_TYPE(int,           decltype(std::strcmp(cpc, cpc)));
-        ASSERT_SAME_TYPE(int,           decltype(std::strncmp(cpc, cpc, s)));
-        ASSERT_SAME_TYPE(int,           decltype(std::strcoll(cpc, cpc)));
-        ASSERT_SAME_TYPE(std::size_t,   decltype(std::strxfrm(cp, cpc, s)));
-        ASSERT_SAME_TYPE(std::size_t,   decltype(std::strcspn(cpc, cpc)));
-        ASSERT_SAME_TYPE(std::size_t,   decltype(std::strspn(cpc, cpc)));
-        ASSERT_SAME_TYPE(char*,         decltype(std::strtok(cp, cpc)));
-        ASSERT_SAME_TYPE(void*,         decltype(std::memset(vp, 0, s)));
-        ASSERT_SAME_TYPE(char*,         decltype(std::strerror(0)));
-        ASSERT_SAME_TYPE(std::size_t,   decltype(std::strlen(cpc)));
-    }
+int main(int, char**) {
+  // Functions we get directly from the C library (just check the signature)
+  {
+    std::size_t s   = 0;
+    void* vp        = 0;
+    const void* vpc = 0;
+    char* cp        = 0;
+    const char* cpc = 0;
+    ASSERT_SAME_TYPE(void*, decltype(std::memcpy(vp, vpc, s)));
+    ASSERT_SAME_TYPE(void*, decltype(std::memmove(vp, vpc, s)));
+    ASSERT_SAME_TYPE(char*, decltype(std::strcpy(cp, cpc)));
+    ASSERT_SAME_TYPE(char*, decltype(std::strncpy(cp, cpc, s)));
+    ASSERT_SAME_TYPE(char*, decltype(std::strcat(cp, cpc)));
+    ASSERT_SAME_TYPE(char*, decltype(std::strncat(cp, cpc, s)));
+    ASSERT_SAME_TYPE(int, decltype(std::memcmp(vpc, vpc, s)));
+    ASSERT_SAME_TYPE(int, decltype(std::strcmp(cpc, cpc)));
+    ASSERT_SAME_TYPE(int, decltype(std::strncmp(cpc, cpc, s)));
+    ASSERT_SAME_TYPE(int, decltype(std::strcoll(cpc, cpc)));
+    ASSERT_SAME_TYPE(std::size_t, decltype(std::strxfrm(cp, cpc, s)));
+    ASSERT_SAME_TYPE(std::size_t, decltype(std::strcspn(cpc, cpc)));
+    ASSERT_SAME_TYPE(std::size_t, decltype(std::strspn(cpc, cpc)));
+    ASSERT_SAME_TYPE(char*, decltype(std::strtok(cp, cpc)));
+    ASSERT_SAME_TYPE(void*, decltype(std::memset(vp, 0, s)));
+    ASSERT_SAME_TYPE(char*, decltype(std::strerror(0)));
+    ASSERT_SAME_TYPE(std::size_t, decltype(std::strlen(cpc)));
+  }
 
-    // Functions we (may) reimplement
-    {
-        // const char* strchr(const char*, int)
-        char storage[] = "hello world";
-        const char* s = storage;
-        ASSERT_SAME_TYPE(const char*, decltype(std::strchr(s, 'l')));
-        const char* res = std::strchr(s, 'l');
-        assert(res == &s[2]);
-    }
-    {
-        // char* strchr(char*, int)
-        char storage[] = "hello world";
-        char* s = storage;
-        ASSERT_SAME_TYPE(char*, decltype(std::strchr(s, 'l')));
-        char* res = std::strchr(s, 'l');
-        assert(res == &s[2]);
-    }
+  // Functions we (may) reimplement
+  {
+    // const char* strchr(const char*, int)
+    char storage[] = "hello world";
+    const char* s  = storage;
+    ASSERT_SAME_TYPE(const char*, decltype(std::strchr(s, 'l')));
+    const char* res = std::strchr(s, 'l');
+    assert(res == &s[2]);
+  }
+  {
+    // char* strchr(char*, int)
+    char storage[] = "hello world";
+    char* s        = storage;
+    ASSERT_SAME_TYPE(char*, decltype(std::strchr(s, 'l')));
+    char* res = std::strchr(s, 'l');
+    assert(res == &s[2]);
+  }
 
-    {
-        // const char* strpbrk(const char*, const char*)
-        char storage[] = "hello world";
-        const char* s = storage;
-        ASSERT_SAME_TYPE(const char*, decltype(std::strpbrk(s, "el")));
-        const char* res = std::strpbrk(s, "el");
-        assert(res == &s[1]);
-    }
-    {
-        // char* strpbrk(char*, const char*)
-        char storage[] = "hello world";
-        char* s = storage;
-        ASSERT_SAME_TYPE(char*, decltype(std::strpbrk(s, "el")));
-        char* res = std::strpbrk(s, "el");
-        assert(res == &s[1]);
-    }
+  {
+    // const char* strpbrk(const char*, const char*)
+    char storage[] = "hello world";
+    const char* s  = storage;
+    ASSERT_SAME_TYPE(const char*, decltype(std::strpbrk(s, "el")));
+    const char* res = std::strpbrk(s, "el");
+    assert(res == &s[1]);
+  }
+  {
+    // char* strpbrk(char*, const char*)
+    char storage[] = "hello world";
+    char* s        = storage;
+    ASSERT_SAME_TYPE(char*, decltype(std::strpbrk(s, "el")));
+    char* res = std::strpbrk(s, "el");
+    assert(res == &s[1]);
+  }
 
-    {
-        // const char* strrchr(const char*, int)
-        char storage[] = "hello world";
-        const char* s = storage;
-        ASSERT_SAME_TYPE(const char*, decltype(std::strrchr(s, 'l')));
-        const char* res = std::strrchr(s, 'l');
-        assert(res == &s[9]);
-    }
-    {
-        // char* strrchr(char*, int)
-        char storage[] = "hello world";
-        char* s = storage;
-        ASSERT_SAME_TYPE(char*, decltype(std::strrchr(s, 'l')));
-        char* res = std::strrchr(s, 'l');
-        assert(res == &s[9]);
-    }
+  {
+    // const char* strrchr(const char*, int)
+    char storage[] = "hello world";
+    const char* s  = storage;
+    ASSERT_SAME_TYPE(const char*, decltype(std::strrchr(s, 'l')));
+    const char* res = std::strrchr(s, 'l');
+    assert(res == &s[9]);
+  }
+  {
+    // char* strrchr(char*, int)
+    char storage[] = "hello world";
+    char* s        = storage;
+    ASSERT_SAME_TYPE(char*, decltype(std::strrchr(s, 'l')));
+    char* res = std::strrchr(s, 'l');
+    assert(res == &s[9]);
+  }
 
-    {
-        // const void* memchr(const void*, int, size_t)
-        char storage[] = "hello world";
-        std::size_t count = 11;
-        const void* s = storage;
-        ASSERT_SAME_TYPE(const void*, decltype(std::memchr(s, 'l', count)));
-        const void* res = std::memchr(s, 'l', count);
-        assert(res == &storage[2]);
-    }
-    {
-        // void* memchr(void*, int, size_t)
-        char storage[] = "hello world";
-        std::size_t count = 11;
-        void* s = storage;
-        ASSERT_SAME_TYPE(void*, decltype(std::memchr(s, 'l', count)));
-        void* res = std::memchr(s, 'l', count);
-        assert(res == &storage[2]);
-    }
+  {
+    // const void* memchr(const void*, int, size_t)
+    char storage[]    = "hello world";
+    std::size_t count = 11;
+    const void* s     = storage;
+    ASSERT_SAME_TYPE(const void*, decltype(std::memchr(s, 'l', count)));
+    const void* res = std::memchr(s, 'l', count);
+    assert(res == &storage[2]);
+  }
+  {
+    // void* memchr(void*, int, size_t)
+    char storage[]    = "hello world";
+    std::size_t count = 11;
+    void* s           = storage;
+    ASSERT_SAME_TYPE(void*, decltype(std::memchr(s, 'l', count)));
+    void* res = std::memchr(s, 'l', count);
+    assert(res == &storage[2]);
+  }
 
-    {
-        // const char* strstr(const char*, const char*)
-        char storage[] = "hello world";
-        const char* s = storage;
-        ASSERT_SAME_TYPE(const char*, decltype(std::strstr(s, "wor")));
-        const char* res = std::strstr(s, "wor");
-        assert(res == &storage[6]);
-    }
-    {
-        // char* strstr(char*, const char*)
-        char storage[] = "hello world";
-        char* s = storage;
-        ASSERT_SAME_TYPE(char*, decltype(std::strstr(s, "wor")));
-        char* res = std::strstr(s, "wor");
-        assert(res == &storage[6]);
-    }
+  {
+    // const char* strstr(const char*, const char*)
+    char storage[] = "hello world";
+    const char* s  = storage;
+    ASSERT_SAME_TYPE(const char*, decltype(std::strstr(s, "wor")));
+    const char* res = std::strstr(s, "wor");
+    assert(res == &storage[6]);
+  }
+  {
+    // char* strstr(char*, const char*)
+    char storage[] = "hello world";
+    char* s        = storage;
+    ASSERT_SAME_TYPE(char*, decltype(std::strstr(s, "wor")));
+    char* res = std::strstr(s, "wor");
+    assert(res == &storage[6]);
+  }
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/c.strings/cwchar.pass.cpp b/libcxx/test/std/strings/c.strings/cwchar.pass.cpp
index 4e9909e97a95dcb..3aa660fb919b515 100644
--- a/libcxx/test/std/strings/c.strings/cwchar.pass.cpp
+++ b/libcxx/test/std/strings/c.strings/cwchar.pass.cpp
@@ -19,112 +19,111 @@
 #include "test_macros.h"
 
 #ifndef NULL
-#error NULL not defined
+#  error NULL not defined
 #endif
 
 #ifndef WCHAR_MAX
-#error WCHAR_MAX not defined
+#  error WCHAR_MAX not defined
 #endif
 
 #ifndef WCHAR_MIN
-#error WCHAR_MIN not defined
+#  error WCHAR_MIN not defined
 #endif
 
 #ifndef WEOF
-#error WEOF not defined
+#  error WEOF not defined
 #endif
 
-int main(int, char**)
-{
-    std::mbstate_t mb = {};
-    std::size_t s = 0;
-    std::tm *tm = 0;
-    std::wint_t w = 0;
-    ::FILE* fp = 0;
-    std::va_list va;
+int main(int, char**) {
+  std::mbstate_t mb = {};
+  std::size_t s     = 0;
+  std::tm* tm       = 0;
+  std::wint_t w     = 0;
+  ::FILE* fp        = 0;
+  std::va_list va;
 
-    char* ns = 0;
-    wchar_t* ws = 0;
-    const wchar_t* cws = 0;
-    wchar_t** wsp = 0;
+  char* ns           = 0;
+  wchar_t* ws        = 0;
+  const wchar_t* cws = 0;
+  wchar_t** wsp      = 0;
 
-    ((void)mb); // Prevent unused warning
-    ((void)s); // Prevent unused warning
-    ((void)tm); // Prevent unused warning
-    ((void)w); // Prevent unused warning
-    ((void)fp); // Prevent unused warning
-    ((void)va); // Prevent unused warning
-    ((void)ns); // Prevent unused warning
-    ((void)ws); // Prevent unused warning
-    ((void)cws); // Prevent unused warning
-    ((void)wsp); // Prevent unused warning
+  ((void)mb);  // Prevent unused warning
+  ((void)s);   // Prevent unused warning
+  ((void)tm);  // Prevent unused warning
+  ((void)w);   // Prevent unused warning
+  ((void)fp);  // Prevent unused warning
+  ((void)va);  // Prevent unused warning
+  ((void)ns);  // Prevent unused warning
+  ((void)ws);  // Prevent unused warning
+  ((void)cws); // Prevent unused warning
+  ((void)wsp); // Prevent unused warning
 
-    ASSERT_SAME_TYPE(int,                decltype(std::fwprintf(fp, L"")));
-    ASSERT_SAME_TYPE(int,                decltype(std::fwscanf(fp, L"")));
-    ASSERT_SAME_TYPE(int,                decltype(std::swprintf(ws, s, L"")));
-    ASSERT_SAME_TYPE(int,                decltype(std::swscanf(L"", L"")));
-    ASSERT_SAME_TYPE(int,                decltype(std::vfwprintf(fp, L"", va)));
-    ASSERT_SAME_TYPE(int,                decltype(std::vfwscanf(fp, L"", va)));
-    ASSERT_SAME_TYPE(int,                decltype(std::vswprintf(ws, s, L"", va)));
-    ASSERT_SAME_TYPE(int,                decltype(std::vswscanf(L"", L"", va)));
-    ASSERT_SAME_TYPE(std::wint_t,        decltype(std::fgetwc(fp)));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::fgetws(ws, 0, fp)));
-    ASSERT_SAME_TYPE(std::wint_t,        decltype(std::fputwc(L' ', fp)));
-    ASSERT_SAME_TYPE(int,                decltype(std::fputws(L"", fp)));
-    ASSERT_SAME_TYPE(int,                decltype(std::fwide(fp, 0)));
-    ASSERT_SAME_TYPE(std::wint_t,        decltype(std::getwc(fp)));
-    ASSERT_SAME_TYPE(std::wint_t,        decltype(std::putwc(L' ', fp)));
-    ASSERT_SAME_TYPE(std::wint_t,        decltype(std::ungetwc(L' ', fp)));
-    ASSERT_SAME_TYPE(double,             decltype(std::wcstod(L"", wsp)));
-    ASSERT_SAME_TYPE(float,              decltype(std::wcstof(L"", wsp)));
-    ASSERT_SAME_TYPE(long double,        decltype(std::wcstold(L"", wsp)));
-    ASSERT_SAME_TYPE(long,               decltype(std::wcstol(L"", wsp, 0)));
-    ASSERT_SAME_TYPE(long long,          decltype(std::wcstoll(L"", wsp, 0)));
-    ASSERT_SAME_TYPE(unsigned long,      decltype(std::wcstoul(L"", wsp, 0)));
-    ASSERT_SAME_TYPE(unsigned long long, decltype(std::wcstoull(L"", wsp, 0)));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcscpy(ws, L"")));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcsncpy(ws, L"", s)));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcscat(ws, L"")));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcsncat(ws, L"", s)));
-    ASSERT_SAME_TYPE(int,                decltype(std::wcscmp(L"", L"")));
-    ASSERT_SAME_TYPE(int,                decltype(std::wcscoll(L"", L"")));
-    ASSERT_SAME_TYPE(int,                decltype(std::wcsncmp(L"", L"", s)));
-    ASSERT_SAME_TYPE(std::size_t,        decltype(std::wcsxfrm(ws, L"", s)));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcschr(ws, L' ')));
-    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wcschr(cws, L' ')));
-    ASSERT_SAME_TYPE(std::size_t,        decltype(std::wcscspn(L"", L"")));
-    ASSERT_SAME_TYPE(std::size_t,        decltype(std::wcslen(L"")));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcspbrk(ws, L"")));
-    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wcspbrk(cws, L"")));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcsrchr(ws, L' ')));
-    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wcsrchr(cws, L' ')));
-    ASSERT_SAME_TYPE(std::size_t,        decltype(std::wcsspn(L"", L"")));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcsstr(ws, L"")));
-    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wcsstr(cws, L"")));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wcstok(ws, L"", wsp)));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wmemchr(ws, L' ', s)));
-    ASSERT_SAME_TYPE(const wchar_t*,     decltype(std::wmemchr(cws, L' ', s)));
-    ASSERT_SAME_TYPE(int,                decltype(std::wmemcmp(L"", L"", s)));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wmemcpy(ws, L"", s)));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wmemmove(ws, L"", s)));
-    ASSERT_SAME_TYPE(wchar_t*,           decltype(std::wmemset(ws, L' ', s)));
-    ASSERT_SAME_TYPE(std::size_t,        decltype(std::wcsftime(ws, s, L"", tm)));
-    ASSERT_SAME_TYPE(wint_t,             decltype(std::btowc(0)));
-    ASSERT_SAME_TYPE(int,                decltype(std::wctob(w)));
-    ASSERT_SAME_TYPE(int,                decltype(std::mbsinit(&mb)));
-    ASSERT_SAME_TYPE(std::size_t,        decltype(std::mbrlen("", s, &mb)));
-    ASSERT_SAME_TYPE(std::size_t,        decltype(std::mbrtowc(ws, "", s, &mb)));
-    ASSERT_SAME_TYPE(std::size_t,        decltype(std::wcrtomb(ns, L' ', &mb)));
-    ASSERT_SAME_TYPE(std::size_t,        decltype(std::mbsrtowcs(ws, (const char**)0, s, &mb)));
-    ASSERT_SAME_TYPE(std::size_t,        decltype(std::wcsrtombs(ns, (const wchar_t**)0, s, &mb)));
+  ASSERT_SAME_TYPE(int, decltype(std::fwprintf(fp, L"")));
+  ASSERT_SAME_TYPE(int, decltype(std::fwscanf(fp, L"")));
+  ASSERT_SAME_TYPE(int, decltype(std::swprintf(ws, s, L"")));
+  ASSERT_SAME_TYPE(int, decltype(std::swscanf(L"", L"")));
+  ASSERT_SAME_TYPE(int, decltype(std::vfwprintf(fp, L"", va)));
+  ASSERT_SAME_TYPE(int, decltype(std::vfwscanf(fp, L"", va)));
+  ASSERT_SAME_TYPE(int, decltype(std::vswprintf(ws, s, L"", va)));
+  ASSERT_SAME_TYPE(int, decltype(std::vswscanf(L"", L"", va)));
+  ASSERT_SAME_TYPE(std::wint_t, decltype(std::fgetwc(fp)));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::fgetws(ws, 0, fp)));
+  ASSERT_SAME_TYPE(std::wint_t, decltype(std::fputwc(L' ', fp)));
+  ASSERT_SAME_TYPE(int, decltype(std::fputws(L"", fp)));
+  ASSERT_SAME_TYPE(int, decltype(std::fwide(fp, 0)));
+  ASSERT_SAME_TYPE(std::wint_t, decltype(std::getwc(fp)));
+  ASSERT_SAME_TYPE(std::wint_t, decltype(std::putwc(L' ', fp)));
+  ASSERT_SAME_TYPE(std::wint_t, decltype(std::ungetwc(L' ', fp)));
+  ASSERT_SAME_TYPE(double, decltype(std::wcstod(L"", wsp)));
+  ASSERT_SAME_TYPE(float, decltype(std::wcstof(L"", wsp)));
+  ASSERT_SAME_TYPE(long double, decltype(std::wcstold(L"", wsp)));
+  ASSERT_SAME_TYPE(long, decltype(std::wcstol(L"", wsp, 0)));
+  ASSERT_SAME_TYPE(long long, decltype(std::wcstoll(L"", wsp, 0)));
+  ASSERT_SAME_TYPE(unsigned long, decltype(std::wcstoul(L"", wsp, 0)));
+  ASSERT_SAME_TYPE(unsigned long long, decltype(std::wcstoull(L"", wsp, 0)));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcscpy(ws, L"")));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcsncpy(ws, L"", s)));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcscat(ws, L"")));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcsncat(ws, L"", s)));
+  ASSERT_SAME_TYPE(int, decltype(std::wcscmp(L"", L"")));
+  ASSERT_SAME_TYPE(int, decltype(std::wcscoll(L"", L"")));
+  ASSERT_SAME_TYPE(int, decltype(std::wcsncmp(L"", L"", s)));
+  ASSERT_SAME_TYPE(std::size_t, decltype(std::wcsxfrm(ws, L"", s)));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcschr(ws, L' ')));
+  ASSERT_SAME_TYPE(const wchar_t*, decltype(std::wcschr(cws, L' ')));
+  ASSERT_SAME_TYPE(std::size_t, decltype(std::wcscspn(L"", L"")));
+  ASSERT_SAME_TYPE(std::size_t, decltype(std::wcslen(L"")));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcspbrk(ws, L"")));
+  ASSERT_SAME_TYPE(const wchar_t*, decltype(std::wcspbrk(cws, L"")));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcsrchr(ws, L' ')));
+  ASSERT_SAME_TYPE(const wchar_t*, decltype(std::wcsrchr(cws, L' ')));
+  ASSERT_SAME_TYPE(std::size_t, decltype(std::wcsspn(L"", L"")));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcsstr(ws, L"")));
+  ASSERT_SAME_TYPE(const wchar_t*, decltype(std::wcsstr(cws, L"")));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcstok(ws, L"", wsp)));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wmemchr(ws, L' ', s)));
+  ASSERT_SAME_TYPE(const wchar_t*, decltype(std::wmemchr(cws, L' ', s)));
+  ASSERT_SAME_TYPE(int, decltype(std::wmemcmp(L"", L"", s)));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wmemcpy(ws, L"", s)));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wmemmove(ws, L"", s)));
+  ASSERT_SAME_TYPE(wchar_t*, decltype(std::wmemset(ws, L' ', s)));
+  ASSERT_SAME_TYPE(std::size_t, decltype(std::wcsftime(ws, s, L"", tm)));
+  ASSERT_SAME_TYPE(wint_t, decltype(std::btowc(0)));
+  ASSERT_SAME_TYPE(int, decltype(std::wctob(w)));
+  ASSERT_SAME_TYPE(int, decltype(std::mbsinit(&mb)));
+  ASSERT_SAME_TYPE(std::size_t, decltype(std::mbrlen("", s, &mb)));
+  ASSERT_SAME_TYPE(std::size_t, decltype(std::mbrtowc(ws, "", s, &mb)));
+  ASSERT_SAME_TYPE(std::size_t, decltype(std::wcrtomb(ns, L' ', &mb)));
+  ASSERT_SAME_TYPE(std::size_t, decltype(std::mbsrtowcs(ws, (const char**)0, s, &mb)));
+  ASSERT_SAME_TYPE(std::size_t, decltype(std::wcsrtombs(ns, (const wchar_t**)0, s, &mb)));
 
-    ASSERT_SAME_TYPE(std::wint_t,        decltype(std::getwchar()));
-    ASSERT_SAME_TYPE(int,                decltype(std::vwscanf(L"", va)));
-    ASSERT_SAME_TYPE(int,                decltype(std::wscanf(L"")));
+  ASSERT_SAME_TYPE(std::wint_t, decltype(std::getwchar()));
+  ASSERT_SAME_TYPE(int, decltype(std::vwscanf(L"", va)));
+  ASSERT_SAME_TYPE(int, decltype(std::wscanf(L"")));
 
-    ASSERT_SAME_TYPE(std::wint_t,        decltype(std::putwchar(L' ')));
-    ASSERT_SAME_TYPE(int,                decltype(std::vwprintf(L"", va)));
-    ASSERT_SAME_TYPE(int,                decltype(std::wprintf(L"")));
+  ASSERT_SAME_TYPE(std::wint_t, decltype(std::putwchar(L' ')));
+  ASSERT_SAME_TYPE(int, decltype(std::vwprintf(L"", va)));
+  ASSERT_SAME_TYPE(int, decltype(std::wprintf(L"")));
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/c.strings/cwctype.pass.cpp b/libcxx/test/std/strings/c.strings/cwctype.pass.cpp
index 171ebf8866b696c..d421bea5a5672a1 100644
--- a/libcxx/test/std/strings/c.strings/cwctype.pass.cpp
+++ b/libcxx/test/std/strings/c.strings/cwctype.pass.cpp
@@ -15,106 +15,104 @@
 
 #include "test_macros.h"
 
-
 #ifndef WEOF
-#error WEOF not defined
+#  error WEOF not defined
 #endif
 
 #ifdef iswalnum
-#error iswalnum defined
+#  error iswalnum defined
 #endif
 
 #ifdef iswalpha
-#error iswalpha defined
+#  error iswalpha defined
 #endif
 
 #ifdef iswblank
-#error iswblank defined
+#  error iswblank defined
 #endif
 
 #ifdef iswcntrl
-#error iswcntrl defined
+#  error iswcntrl defined
 #endif
 
 #ifdef iswdigit
-#error iswdigit defined
+#  error iswdigit defined
 #endif
 
 #ifdef iswgraph
-#error iswgraph defined
+#  error iswgraph defined
 #endif
 
 #ifdef iswlower
-#error iswlower defined
+#  error iswlower defined
 #endif
 
 #ifdef iswprint
-#error iswprint defined
+#  error iswprint defined
 #endif
 
 #ifdef iswpunct
-#error iswpunct defined
+#  error iswpunct defined
 #endif
 
 #ifdef iswspace
-#error iswspace defined
+#  error iswspace defined
 #endif
 
 #ifdef iswupper
-#error iswupper defined
+#  error iswupper defined
 #endif
 
 #ifdef iswxdigit
-#error iswxdigit defined
+#  error iswxdigit defined
 #endif
 
 #ifdef iswctype
-#error iswctype defined
+#  error iswctype defined
 #endif
 
 #ifdef wctype
-#error wctype defined
+#  error wctype defined
 #endif
 
 #ifdef towlower
-#error towlower defined
+#  error towlower defined
 #endif
 
 #ifdef towupper
-#error towupper defined
+#  error towupper defined
 #endif
 
 #ifdef towctrans
-#error towctrans defined
+#  error towctrans defined
 #endif
 
 #ifdef wctrans
-#error wctrans defined
-#endif
-
-int main(int, char**)
-{
-    std::wint_t w = 0;
-    ASSERT_SAME_TYPE(int, decltype(std::iswalnum(w)));
-    ASSERT_SAME_TYPE(int, decltype(std::iswalpha(w)));
-    ASSERT_SAME_TYPE(int, decltype(std::iswblank(w)));
-    ASSERT_SAME_TYPE(int, decltype(std::iswcntrl(w)));
-    ASSERT_SAME_TYPE(int, decltype(std::iswdigit(w)));
-    ASSERT_SAME_TYPE(int, decltype(std::iswgraph(w)));
-    ASSERT_SAME_TYPE(int, decltype(std::iswlower(w)));
-    ASSERT_SAME_TYPE(int, decltype(std::iswprint(w)));
-    ASSERT_SAME_TYPE(int, decltype(std::iswpunct(w)));
-    ASSERT_SAME_TYPE(int, decltype(std::iswspace(w)));
-    ASSERT_SAME_TYPE(int, decltype(std::iswupper(w)));
-    ASSERT_SAME_TYPE(int, decltype(std::iswxdigit(w)));
-
-    ASSERT_SAME_TYPE(int, decltype(std::iswctype(w, std::wctype_t())));
-
-    ASSERT_SAME_TYPE(std::wctype_t,  decltype(std::wctype("")));
-    ASSERT_SAME_TYPE(std::wint_t,    decltype(std::towlower(w)));
-    ASSERT_SAME_TYPE(std::wint_t,    decltype(std::towupper(w)));
-    ASSERT_SAME_TYPE(std::wint_t,    decltype(std::towctrans(w, std::wctrans_t())));
-    ASSERT_SAME_TYPE(std::wctrans_t, decltype(std::wctrans("")));
+#  error wctrans defined
+#endif
+
+int main(int, char**) {
+  std::wint_t w = 0;
+  ASSERT_SAME_TYPE(int, decltype(std::iswalnum(w)));
+  ASSERT_SAME_TYPE(int, decltype(std::iswalpha(w)));
+  ASSERT_SAME_TYPE(int, decltype(std::iswblank(w)));
+  ASSERT_SAME_TYPE(int, decltype(std::iswcntrl(w)));
+  ASSERT_SAME_TYPE(int, decltype(std::iswdigit(w)));
+  ASSERT_SAME_TYPE(int, decltype(std::iswgraph(w)));
+  ASSERT_SAME_TYPE(int, decltype(std::iswlower(w)));
+  ASSERT_SAME_TYPE(int, decltype(std::iswprint(w)));
+  ASSERT_SAME_TYPE(int, decltype(std::iswpunct(w)));
+  ASSERT_SAME_TYPE(int, decltype(std::iswspace(w)));
+  ASSERT_SAME_TYPE(int, decltype(std::iswupper(w)));
+  ASSERT_SAME_TYPE(int, decltype(std::iswxdigit(w)));
+
+  ASSERT_SAME_TYPE(int, decltype(std::iswctype(w, std::wctype_t())));
+
+  ASSERT_SAME_TYPE(std::wctype_t, decltype(std::wctype("")));
+  ASSERT_SAME_TYPE(std::wint_t, decltype(std::towlower(w)));
+  ASSERT_SAME_TYPE(std::wint_t, decltype(std::towupper(w)));
+  ASSERT_SAME_TYPE(std::wint_t, decltype(std::towctrans(w, std::wctrans_t())));
+  ASSERT_SAME_TYPE(std::wctrans_t, decltype(std::wctrans("")));
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.require/nothing_to_do.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.require/nothing_to_do.pass.cpp
index 1f764da05d6b5f5..3e0d2a6570f42de 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.require/nothing_to_do.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.require/nothing_to_do.pass.cpp
@@ -6,8 +6,4 @@
 //
 //===----------------------------------------------------------------------===//
 
-int main(int, char**)
-{
-
-  return 0;
-}
+int main(int, char**) { return 0; }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign2.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign2.pass.cpp
index c60e6db9fc47fc8..0dca0e2bc521013 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign2.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign2.pass.cpp
@@ -19,22 +19,20 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    char c = '1';
-    std::char_traits<char>::assign(c, 'a');
-    return c == 'a';
+constexpr bool test_constexpr() {
+  char c = '1';
+  std::char_traits<char>::assign(c, 'a');
+  return c == 'a';
 }
 #endif
 
-int main(int, char**)
-{
-    char c = '\0';
-    std::char_traits<char>::assign(c, 'a');
-    assert(c == 'a');
+int main(int, char**) {
+  char c = '\0';
+  std::char_traits<char>::assign(c, 'a');
+  assert(c == 'a');
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign3.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign3.pass.cpp
index 4dcd7c8f02f8afa..1e41297ab94ce73 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign3.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/assign3.pass.cpp
@@ -17,24 +17,22 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
-    char s2[3] = {0};
-    assert(std::char_traits<char>::assign(s2, 3, char(5)) == s2);
-    assert(s2[0] == char(5));
-    assert(s2[1] == char(5));
-    assert(s2[2] == char(5));
-    assert(std::char_traits<char>::assign(NULL, 0, char(5)) == NULL);
+TEST_CONSTEXPR_CXX20 bool test() {
+  char s2[3] = {0};
+  assert(std::char_traits<char>::assign(s2, 3, char(5)) == s2);
+  assert(s2[0] == char(5));
+  assert(s2[1] == char(5));
+  assert(s2[2] == char(5));
+  assert(std::char_traits<char>::assign(NULL, 0, char(5)) == NULL);
 
   return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/copy.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/copy.pass.cpp
index 5c471a3c0fb3c93..c891bb637b66c40 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/copy.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/copy.pass.cpp
@@ -17,26 +17,24 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
-    char s1[] = {1, 2, 3};
-    char s2[3] = {0};
-    assert(std::char_traits<char>::copy(s2, s1, 3) == s2);
-    assert(s2[0] == char(1));
-    assert(s2[1] == char(2));
-    assert(s2[2] == char(3));
-    assert(std::char_traits<char>::copy(NULL, s1, 0) == NULL);
-    assert(std::char_traits<char>::copy(s1, NULL, 0) == s1);
+TEST_CONSTEXPR_CXX20 bool test() {
+  char s1[]  = {1, 2, 3};
+  char s2[3] = {0};
+  assert(std::char_traits<char>::copy(s2, s1, 3) == s2);
+  assert(s2[0] == char(1));
+  assert(s2[1] == char(2));
+  assert(s2[2] == char(3));
+  assert(std::char_traits<char>::copy(NULL, s1, 0) == NULL);
+  assert(std::char_traits<char>::copy(s1, NULL, 0) == s1);
 
   return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eof.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eof.pass.cpp
index 93eb2a68dbfc0a7..332e48daf2031b6 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eof.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eof.pass.cpp
@@ -17,9 +17,8 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::char_traits<char>::eof() == EOF);
+int main(int, char**) {
+  assert(std::char_traits<char>::eof() == EOF);
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq.pass.cpp
index e379848a1acde54..2e1727cc3388543 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq.pass.cpp
@@ -17,10 +17,9 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::char_traits<char>::eq('a', 'a'));
-    assert(!std::char_traits<char>::eq('a', 'A'));
+int main(int, char**) {
+  assert(std::char_traits<char>::eq('a', 'a'));
+  assert(!std::char_traits<char>::eq('a', 'A'));
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq_int_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq_int_type.pass.cpp
index 4c82d650480be39..7b7cc467c1cd543 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq_int_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/eq_int_type.pass.cpp
@@ -17,13 +17,11 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert( std::char_traits<char>::eq_int_type('a', 'a'));
-    assert(!std::char_traits<char>::eq_int_type('a', 'A'));
-    assert(!std::char_traits<char>::eq_int_type(std::char_traits<char>::eof(), 'A'));
-    assert( std::char_traits<char>::eq_int_type(std::char_traits<char>::eof(),
-                                                std::char_traits<char>::eof()));
+int main(int, char**) {
+  assert(std::char_traits<char>::eq_int_type('a', 'a'));
+  assert(!std::char_traits<char>::eq_int_type('a', 'A'));
+  assert(!std::char_traits<char>::eq_int_type(std::char_traits<char>::eof(), 'A'));
+  assert(std::char_traits<char>::eq_int_type(std::char_traits<char>::eof(), std::char_traits<char>::eof()));
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/find.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/find.pass.cpp
index 974500840800299..b2b644887a2034b 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/find.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/find.pass.cpp
@@ -19,28 +19,24 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    constexpr const char *p = "123";
-    return std::char_traits<char>::find(p, 3, '1') == p
-        && std::char_traits<char>::find(p, 3, '2') == p + 1
-        && std::char_traits<char>::find(p, 3, '3') == p + 2
-        && std::char_traits<char>::find(p, 3, '4') == nullptr;
+constexpr bool test_constexpr() {
+  constexpr const char* p = "123";
+  return std::char_traits<char>::find(p, 3, '1') == p && std::char_traits<char>::find(p, 3, '2') == p + 1 &&
+         std::char_traits<char>::find(p, 3, '3') == p + 2 && std::char_traits<char>::find(p, 3, '4') == nullptr;
 }
 #endif
 
-int main(int, char**)
-{
-    char s1[] = {1, 2, 3};
-    assert(std::char_traits<char>::find(s1, 3, char(1)) == s1);
-    assert(std::char_traits<char>::find(s1, 3, char(2)) == s1+1);
-    assert(std::char_traits<char>::find(s1, 3, char(3)) == s1+2);
-    assert(std::char_traits<char>::find(s1, 3, char(4)) == 0);
-    assert(std::char_traits<char>::find(s1, 3, char(0)) == 0);
-    assert(std::char_traits<char>::find(NULL, 0, char(0)) == 0);
+int main(int, char**) {
+  char s1[] = {1, 2, 3};
+  assert(std::char_traits<char>::find(s1, 3, char(1)) == s1);
+  assert(std::char_traits<char>::find(s1, 3, char(2)) == s1 + 1);
+  assert(std::char_traits<char>::find(s1, 3, char(3)) == s1 + 2);
+  assert(std::char_traits<char>::find(s1, 3, char(4)) == 0);
+  assert(std::char_traits<char>::find(s1, 3, char(0)) == 0);
+  assert(std::char_traits<char>::find(NULL, 0, char(0)) == 0);
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/length.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/length.pass.cpp
index 8be4e0a7055193e..71b04ceae01ff1b 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/length.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/length.pass.cpp
@@ -19,24 +19,20 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    return std::char_traits<char>::length("") == 0
-        && std::char_traits<char>::length("abcd") == 4;
+constexpr bool test_constexpr() {
+  return std::char_traits<char>::length("") == 0 && std::char_traits<char>::length("abcd") == 4;
 }
 #endif
 
-
-int main(int, char**)
-{
-    assert(std::char_traits<char>::length("") == 0);
-    assert(std::char_traits<char>::length("a") == 1);
-    assert(std::char_traits<char>::length("aa") == 2);
-    assert(std::char_traits<char>::length("aaa") == 3);
-    assert(std::char_traits<char>::length("aaaa") == 4);
+int main(int, char**) {
+  assert(std::char_traits<char>::length("") == 0);
+  assert(std::char_traits<char>::length("a") == 1);
+  assert(std::char_traits<char>::length("aa") == 2);
+  assert(std::char_traits<char>::length("aaa") == 3);
+  assert(std::char_traits<char>::length("aaaa") == 4);
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/lt.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/lt.pass.cpp
index 81a8574eac8bdce..c83a00b5d4512cd 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/lt.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/lt.pass.cpp
@@ -17,8 +17,7 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
   assert(std::char_traits<char>::lt('\0', 'A') == ('\0' < 'A'));
   assert(std::char_traits<char>::lt('A', '\0') == ('A' < '\0'));
 

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/move.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/move.pass.cpp
index fd29d39ffee5d78..c22af302d550e6a 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/move.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/move.pass.cpp
@@ -17,30 +17,28 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
-    char s1[] = {1, 2, 3};
-    assert(std::char_traits<char>::move(s1, s1+1, 2) == s1);
-    assert(s1[0] == char(2));
-    assert(s1[1] == char(3));
-    assert(s1[2] == char(3));
-    s1[2] = char(0);
-    assert(std::char_traits<char>::move(s1+1, s1, 2) == s1+1);
-    assert(s1[0] == char(2));
-    assert(s1[1] == char(2));
-    assert(s1[2] == char(3));
-    assert(std::char_traits<char>::move(NULL, s1, 0) == NULL);
-    assert(std::char_traits<char>::move(s1, NULL, 0) == s1);
+TEST_CONSTEXPR_CXX20 bool test() {
+  char s1[] = {1, 2, 3};
+  assert(std::char_traits<char>::move(s1, s1 + 1, 2) == s1);
+  assert(s1[0] == char(2));
+  assert(s1[1] == char(3));
+  assert(s1[2] == char(3));
+  s1[2] = char(0);
+  assert(std::char_traits<char>::move(s1 + 1, s1, 2) == s1 + 1);
+  assert(s1[0] == char(2));
+  assert(s1[1] == char(2));
+  assert(s1[2] == char(3));
+  assert(std::char_traits<char>::move(NULL, s1, 0) == NULL);
+  assert(std::char_traits<char>::move(s1, NULL, 0) == s1);
 
   return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/not_eof.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/not_eof.pass.cpp
index a03479b08b0c4be..e07897ab0bf5b2a 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/not_eof.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/not_eof.pass.cpp
@@ -17,13 +17,11 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::char_traits<char>::not_eof('a') == 'a');
-    assert(std::char_traits<char>::not_eof('A') == 'A');
-    assert(std::char_traits<char>::not_eof(0) == 0);
-    assert(std::char_traits<char>::not_eof(std::char_traits<char>::eof()) !=
-           std::char_traits<char>::eof());
+int main(int, char**) {
+  assert(std::char_traits<char>::not_eof('a') == 'a');
+  assert(std::char_traits<char>::not_eof('A') == 'A');
+  assert(std::char_traits<char>::not_eof(0) == 0);
+  assert(std::char_traits<char>::not_eof(std::char_traits<char>::eof()) != std::char_traits<char>::eof());
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_char_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_char_type.pass.cpp
index 079a83e766b3e29..2cd618847b82825 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_char_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_char_type.pass.cpp
@@ -17,11 +17,10 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::char_traits<char>::to_char_type('a') == 'a');
-    assert(std::char_traits<char>::to_char_type('A') == 'A');
-    assert(std::char_traits<char>::to_char_type(0) == 0);
+int main(int, char**) {
+  assert(std::char_traits<char>::to_char_type('a') == 'a');
+  assert(std::char_traits<char>::to_char_type('A') == 'A');
+  assert(std::char_traits<char>::to_char_type(0) == 0);
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_int_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_int_type.pass.cpp
index 525395de4afe096..24a5775ea48bae2 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_int_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/to_int_type.pass.cpp
@@ -17,11 +17,10 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::char_traits<char>::to_int_type('a') == 'a');
-    assert(std::char_traits<char>::to_int_type('A') == 'A');
-    assert(std::char_traits<char>::to_int_type(0) == 0);
+int main(int, char**) {
+  assert(std::char_traits<char>::to_int_type('a') == 'a');
+  assert(std::char_traits<char>::to_int_type('A') == 'A');
+  assert(std::char_traits<char>::to_int_type(0) == 0);
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign2.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign2.pass.cpp
index 23901440fd4c70c..a9b3d32be83072b 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign2.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign2.pass.cpp
@@ -19,24 +19,22 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    char16_t c = u'1';
-    std::char_traits<char16_t>::assign(c, u'a');
-    return c == u'a';
+constexpr bool test_constexpr() {
+  char16_t c = u'1';
+  std::char_traits<char16_t>::assign(c, u'a');
+  return c == u'a';
 }
 #endif
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    char16_t c = u'\0';
-    std::char_traits<char16_t>::assign(c, u'a');
-    assert(c == u'a');
+  char16_t c = u'\0';
+  std::char_traits<char16_t>::assign(c, u'a');
+  assert(c == u'a');
 #endif
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign3.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign3.pass.cpp
index bab76a6c931cebc..d72ac9285044891 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign3.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/assign3.pass.cpp
@@ -17,24 +17,22 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
-    char16_t s2[3] = {0};
-    assert(std::char_traits<char16_t>::assign(s2, 3, char16_t(5)) == s2);
-    assert(s2[0] == char16_t(5));
-    assert(s2[1] == char16_t(5));
-    assert(s2[2] == char16_t(5));
-    assert(std::char_traits<char16_t>::assign(NULL, 0, char16_t(5)) == NULL);
+TEST_CONSTEXPR_CXX20 bool test() {
+  char16_t s2[3] = {0};
+  assert(std::char_traits<char16_t>::assign(s2, 3, char16_t(5)) == s2);
+  assert(s2[0] == char16_t(5));
+  assert(s2[1] == char16_t(5));
+  assert(s2[2] == char16_t(5));
+  assert(std::char_traits<char16_t>::assign(NULL, 0, char16_t(5)) == NULL);
 
   return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/compare.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/compare.pass.cpp
index 00664b7b2e7d5f4..e94eab7df11690e 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/compare.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/compare.pass.cpp
@@ -19,42 +19,39 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    return std::char_traits<char16_t>::compare(u"123", u"223", 3) < 0
-        && std::char_traits<char16_t>::compare(u"223", u"123", 3) > 0
-        && std::char_traits<char16_t>::compare(u"123", u"123", 3) == 0;
+constexpr bool test_constexpr() {
+  return std::char_traits<char16_t>::compare(u"123", u"223", 3) < 0 &&
+         std::char_traits<char16_t>::compare(u"223", u"123", 3) > 0 &&
+         std::char_traits<char16_t>::compare(u"123", u"123", 3) == 0;
 }
 #endif
 
-
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    assert(std::char_traits<char16_t>::compare(u"", u"", 0) == 0);
-    assert(std::char_traits<char16_t>::compare(NULL, NULL, 0) == 0);
-
-    assert(std::char_traits<char16_t>::compare(u"1", u"1", 1) == 0);
-    assert(std::char_traits<char16_t>::compare(u"1", u"2", 1) < 0);
-    assert(std::char_traits<char16_t>::compare(u"2", u"1", 1) > 0);
-
-    assert(std::char_traits<char16_t>::compare(u"12", u"12", 2) == 0);
-    assert(std::char_traits<char16_t>::compare(u"12", u"13", 2) < 0);
-    assert(std::char_traits<char16_t>::compare(u"12", u"22", 2) < 0);
-    assert(std::char_traits<char16_t>::compare(u"13", u"12", 2) > 0);
-    assert(std::char_traits<char16_t>::compare(u"22", u"12", 2) > 0);
-
-    assert(std::char_traits<char16_t>::compare(u"123", u"123", 3) == 0);
-    assert(std::char_traits<char16_t>::compare(u"123", u"223", 3) < 0);
-    assert(std::char_traits<char16_t>::compare(u"123", u"133", 3) < 0);
-    assert(std::char_traits<char16_t>::compare(u"123", u"124", 3) < 0);
-    assert(std::char_traits<char16_t>::compare(u"223", u"123", 3) > 0);
-    assert(std::char_traits<char16_t>::compare(u"133", u"123", 3) > 0);
-    assert(std::char_traits<char16_t>::compare(u"124", u"123", 3) > 0);
+  assert(std::char_traits<char16_t>::compare(u"", u"", 0) == 0);
+  assert(std::char_traits<char16_t>::compare(NULL, NULL, 0) == 0);
+
+  assert(std::char_traits<char16_t>::compare(u"1", u"1", 1) == 0);
+  assert(std::char_traits<char16_t>::compare(u"1", u"2", 1) < 0);
+  assert(std::char_traits<char16_t>::compare(u"2", u"1", 1) > 0);
+
+  assert(std::char_traits<char16_t>::compare(u"12", u"12", 2) == 0);
+  assert(std::char_traits<char16_t>::compare(u"12", u"13", 2) < 0);
+  assert(std::char_traits<char16_t>::compare(u"12", u"22", 2) < 0);
+  assert(std::char_traits<char16_t>::compare(u"13", u"12", 2) > 0);
+  assert(std::char_traits<char16_t>::compare(u"22", u"12", 2) > 0);
+
+  assert(std::char_traits<char16_t>::compare(u"123", u"123", 3) == 0);
+  assert(std::char_traits<char16_t>::compare(u"123", u"223", 3) < 0);
+  assert(std::char_traits<char16_t>::compare(u"123", u"133", 3) < 0);
+  assert(std::char_traits<char16_t>::compare(u"123", u"124", 3) < 0);
+  assert(std::char_traits<char16_t>::compare(u"223", u"123", 3) > 0);
+  assert(std::char_traits<char16_t>::compare(u"133", u"123", 3) > 0);
+  assert(std::char_traits<char16_t>::compare(u"124", u"123", 3) > 0);
 #endif
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/copy.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/copy.pass.cpp
index fc0ab1aced898be..37f63fdcbd54415 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/copy.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/copy.pass.cpp
@@ -17,27 +17,25 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
-    char16_t s1[] = {1, 2, 3};
-    char16_t s2[3] = {0};
-    assert(std::char_traits<char16_t>::copy(s2, s1, 3) == s2);
-    assert(s2[0] == char16_t(1));
-    assert(s2[1] == char16_t(2));
-    assert(s2[2] == char16_t(3));
-    assert(std::char_traits<char16_t>::copy(NULL, s1, 0) == NULL);
-    assert(std::char_traits<char16_t>::copy(s1, NULL, 0) == s1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test() {
+  char16_t s1[]  = {1, 2, 3};
+  char16_t s2[3] = {0};
+  assert(std::char_traits<char16_t>::copy(s2, s1, 3) == s2);
+  assert(s2[0] == char16_t(1));
+  assert(s2[1] == char16_t(2));
+  assert(s2[2] == char16_t(3));
+  assert(std::char_traits<char16_t>::copy(NULL, s1, 0) == NULL);
+  assert(std::char_traits<char16_t>::copy(s1, NULL, 0) == s1);
+
+  return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eof.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eof.pass.cpp
index 8996cc9d67bf445..a5564ad90b84c00 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eof.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eof.pass.cpp
@@ -14,9 +14,8 @@
 
 #include <string>
 
-int main(int, char**)
-{
-    std::char_traits<char16_t>::int_type i = std::char_traits<char16_t>::eof();
-    ((void)i); // Prevent unused warning
-    return 0;
+int main(int, char**) {
+  std::char_traits<char16_t>::int_type i = std::char_traits<char16_t>::eof();
+  ((void)i); // Prevent unused warning
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq.pass.cpp
index 540ee40c3b0ccc6..afc35512af4411f 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq.pass.cpp
@@ -17,9 +17,8 @@
 #include <string>
 #include <cassert>
 
-int main(int, char**)
-{
-    assert(std::char_traits<char16_t>::eq(u'a', u'a'));
-    assert(!std::char_traits<char16_t>::eq(u'a', u'A'));
-    return 0;
+int main(int, char**) {
+  assert(std::char_traits<char16_t>::eq(u'a', u'a'));
+  assert(!std::char_traits<char16_t>::eq(u'a', u'A'));
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq_int_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq_int_type.pass.cpp
index 29760310893a2c5..3e9f16ffff74728 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq_int_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/eq_int_type.pass.cpp
@@ -17,15 +17,13 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    assert( std::char_traits<char16_t>::eq_int_type(u'a', u'a'));
-    assert(!std::char_traits<char16_t>::eq_int_type(u'a', u'A'));
-    assert(!std::char_traits<char16_t>::eq_int_type(std::char_traits<char16_t>::eof(), u'A'));
+  assert(std::char_traits<char16_t>::eq_int_type(u'a', u'a'));
+  assert(!std::char_traits<char16_t>::eq_int_type(u'a', u'A'));
+  assert(!std::char_traits<char16_t>::eq_int_type(std::char_traits<char16_t>::eof(), u'A'));
 #endif
-    assert( std::char_traits<char16_t>::eq_int_type(std::char_traits<char16_t>::eof(),
-                                                    std::char_traits<char16_t>::eof()));
+  assert(std::char_traits<char16_t>::eq_int_type(std::char_traits<char16_t>::eof(), std::char_traits<char16_t>::eof()));
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/find.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/find.pass.cpp
index 8b39f4a30cfa317..0b436b1d38883dc 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/find.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/find.pass.cpp
@@ -19,28 +19,25 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    constexpr const char16_t *p = u"123";
-    return std::char_traits<char16_t>::find(p, 3, u'1') == p
-        && std::char_traits<char16_t>::find(p, 3, u'2') == p + 1
-        && std::char_traits<char16_t>::find(p, 3, u'3') == p + 2
-        && std::char_traits<char16_t>::find(p, 3, u'4') == nullptr;
+constexpr bool test_constexpr() {
+  constexpr const char16_t* p = u"123";
+  return std::char_traits<char16_t>::find(p, 3, u'1') == p && std::char_traits<char16_t>::find(p, 3, u'2') == p + 1 &&
+         std::char_traits<char16_t>::find(p, 3, u'3') == p + 2 &&
+         std::char_traits<char16_t>::find(p, 3, u'4') == nullptr;
 }
 #endif
 
-int main(int, char**)
-{
-    char16_t s1[] = {1, 2, 3};
-    assert(std::char_traits<char16_t>::find(s1, 3, char16_t(1)) == s1);
-    assert(std::char_traits<char16_t>::find(s1, 3, char16_t(2)) == s1+1);
-    assert(std::char_traits<char16_t>::find(s1, 3, char16_t(3)) == s1+2);
-    assert(std::char_traits<char16_t>::find(s1, 3, char16_t(4)) == 0);
-    assert(std::char_traits<char16_t>::find(s1, 3, char16_t(0)) == 0);
-    assert(std::char_traits<char16_t>::find(NULL, 0, char16_t(0)) == 0);
+int main(int, char**) {
+  char16_t s1[] = {1, 2, 3};
+  assert(std::char_traits<char16_t>::find(s1, 3, char16_t(1)) == s1);
+  assert(std::char_traits<char16_t>::find(s1, 3, char16_t(2)) == s1 + 1);
+  assert(std::char_traits<char16_t>::find(s1, 3, char16_t(3)) == s1 + 2);
+  assert(std::char_traits<char16_t>::find(s1, 3, char16_t(4)) == 0);
+  assert(std::char_traits<char16_t>::find(s1, 3, char16_t(0)) == 0);
+  assert(std::char_traits<char16_t>::find(NULL, 0, char16_t(0)) == 0);
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/length.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/length.pass.cpp
index 28940e6acdd77b3..2ea6210f40891b5 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/length.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/length.pass.cpp
@@ -19,25 +19,22 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    return std::char_traits<char16_t>::length(u"") == 0
-        && std::char_traits<char16_t>::length(u"abcd") == 4;
+constexpr bool test_constexpr() {
+  return std::char_traits<char16_t>::length(u"") == 0 && std::char_traits<char16_t>::length(u"abcd") == 4;
 }
 #endif
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    assert(std::char_traits<char16_t>::length(u"") == 0);
-    assert(std::char_traits<char16_t>::length(u"a") == 1);
-    assert(std::char_traits<char16_t>::length(u"aa") == 2);
-    assert(std::char_traits<char16_t>::length(u"aaa") == 3);
-    assert(std::char_traits<char16_t>::length(u"aaaa") == 4);
+  assert(std::char_traits<char16_t>::length(u"") == 0);
+  assert(std::char_traits<char16_t>::length(u"a") == 1);
+  assert(std::char_traits<char16_t>::length(u"aa") == 2);
+  assert(std::char_traits<char16_t>::length(u"aaa") == 3);
+  assert(std::char_traits<char16_t>::length(u"aaaa") == 4);
 #endif
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/lt.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/lt.pass.cpp
index 960e6f899a4dadf..25d0de2503fa004 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/lt.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/lt.pass.cpp
@@ -17,9 +17,8 @@
 #include <string>
 #include <cassert>
 
-int main(int, char**)
-{
-    assert(!std::char_traits<char16_t>::lt(u'a', u'a'));
-    assert( std::char_traits<char16_t>::lt(u'A', u'a'));
-    return 0;
+int main(int, char**) {
+  assert(!std::char_traits<char16_t>::lt(u'a', u'a'));
+  assert(std::char_traits<char16_t>::lt(u'A', u'a'));
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/move.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/move.pass.cpp
index d011d7c7fba5227..88d36352c6fc914 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/move.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/move.pass.cpp
@@ -17,30 +17,28 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
-    char16_t s1[] = {1, 2, 3};
-    assert(std::char_traits<char16_t>::move(s1, s1+1, 2) == s1);
-    assert(s1[0] == char16_t(2));
-    assert(s1[1] == char16_t(3));
-    assert(s1[2] == char16_t(3));
-    s1[2] = char16_t(0);
-    assert(std::char_traits<char16_t>::move(s1+1, s1, 2) == s1+1);
-    assert(s1[0] == char16_t(2));
-    assert(s1[1] == char16_t(2));
-    assert(s1[2] == char16_t(3));
-    assert(std::char_traits<char16_t>::move(NULL, s1, 0) == NULL);
-    assert(std::char_traits<char16_t>::move(s1, NULL, 0) == s1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test() {
+  char16_t s1[] = {1, 2, 3};
+  assert(std::char_traits<char16_t>::move(s1, s1 + 1, 2) == s1);
+  assert(s1[0] == char16_t(2));
+  assert(s1[1] == char16_t(3));
+  assert(s1[2] == char16_t(3));
+  s1[2] = char16_t(0);
+  assert(std::char_traits<char16_t>::move(s1 + 1, s1, 2) == s1 + 1);
+  assert(s1[0] == char16_t(2));
+  assert(s1[1] == char16_t(2));
+  assert(s1[2] == char16_t(3));
+  assert(std::char_traits<char16_t>::move(NULL, s1, 0) == NULL);
+  assert(std::char_traits<char16_t>::move(s1, NULL, 0) == s1);
+
+  return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/not_eof.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/not_eof.pass.cpp
index 3db7de11e2621e0..e71d3e143be1e77 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/not_eof.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/not_eof.pass.cpp
@@ -17,15 +17,13 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    assert(std::char_traits<char16_t>::not_eof(u'a') == u'a');
-    assert(std::char_traits<char16_t>::not_eof(u'A') == u'A');
+  assert(std::char_traits<char16_t>::not_eof(u'a') == u'a');
+  assert(std::char_traits<char16_t>::not_eof(u'A') == u'A');
 #endif
-    assert(std::char_traits<char16_t>::not_eof(0) == 0);
-    assert(std::char_traits<char16_t>::not_eof(std::char_traits<char16_t>::eof()) !=
-           std::char_traits<char16_t>::eof());
+  assert(std::char_traits<char16_t>::not_eof(0) == 0);
+  assert(std::char_traits<char16_t>::not_eof(std::char_traits<char16_t>::eof()) != std::char_traits<char16_t>::eof());
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_char_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_char_type.pass.cpp
index 89e5ba215dcc382..d5f7d71dc078635 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_char_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_char_type.pass.cpp
@@ -17,13 +17,12 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    assert(std::char_traits<char16_t>::to_char_type(u'a') == u'a');
-    assert(std::char_traits<char16_t>::to_char_type(u'A') == u'A');
+  assert(std::char_traits<char16_t>::to_char_type(u'a') == u'a');
+  assert(std::char_traits<char16_t>::to_char_type(u'A') == u'A');
 #endif
-    assert(std::char_traits<char16_t>::to_char_type(0) == 0);
+  assert(std::char_traits<char16_t>::to_char_type(0) == 0);
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_int_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_int_type.pass.cpp
index 442a2aea0757c0b..1ad916f0a328f51 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_int_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char16_t/to_int_type.pass.cpp
@@ -17,13 +17,12 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    assert(std::char_traits<char16_t>::to_int_type(u'a') == u'a');
-    assert(std::char_traits<char16_t>::to_int_type(u'A') == u'A');
+  assert(std::char_traits<char16_t>::to_int_type(u'a') == u'a');
+  assert(std::char_traits<char16_t>::to_int_type(u'A') == u'A');
 #endif
-    assert(std::char_traits<char16_t>::to_int_type(0) == 0);
+  assert(std::char_traits<char16_t>::to_int_type(0) == 0);
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign2.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign2.pass.cpp
index 2ecaa791b484b01..79edc48bf7facc4 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign2.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign2.pass.cpp
@@ -19,25 +19,23 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    char32_t c = U'1';
-    std::char_traits<char32_t>::assign(c, U'a');
-    return c == U'a';
+constexpr bool test_constexpr() {
+  char32_t c = U'1';
+  std::char_traits<char32_t>::assign(c, U'a');
+  return c == U'a';
 }
 #endif
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    char32_t c = U'\0';
-    std::char_traits<char32_t>::assign(c, U'a');
-    assert(c == U'a');
+  char32_t c = U'\0';
+  std::char_traits<char32_t>::assign(c, U'a');
+  assert(c == U'a');
 #endif
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign3.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign3.pass.cpp
index cf9ec1aacfbabbd..c783e171ef49318 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign3.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/assign3.pass.cpp
@@ -17,24 +17,22 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
-    char32_t s2[3] = {0};
-    assert(std::char_traits<char32_t>::assign(s2, 3, char32_t(5)) == s2);
-    assert(s2[0] == char32_t(5));
-    assert(s2[1] == char32_t(5));
-    assert(s2[2] == char32_t(5));
-    assert(std::char_traits<char32_t>::assign(NULL, 0, char32_t(5)) == NULL);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test() {
+  char32_t s2[3] = {0};
+  assert(std::char_traits<char32_t>::assign(s2, 3, char32_t(5)) == s2);
+  assert(s2[0] == char32_t(5));
+  assert(s2[1] == char32_t(5));
+  assert(s2[2] == char32_t(5));
+  assert(std::char_traits<char32_t>::assign(NULL, 0, char32_t(5)) == NULL);
+
+  return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/compare.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/compare.pass.cpp
index 7cce8796c13223e..d755730106ea8be 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/compare.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/compare.pass.cpp
@@ -19,41 +19,39 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    return std::char_traits<char32_t>::compare(U"123", U"223", 3) < 0
-        && std::char_traits<char32_t>::compare(U"223", U"123", 3) > 0
-        && std::char_traits<char32_t>::compare(U"123", U"123", 3) == 0;
+constexpr bool test_constexpr() {
+  return std::char_traits<char32_t>::compare(U"123", U"223", 3) < 0 &&
+         std::char_traits<char32_t>::compare(U"223", U"123", 3) > 0 &&
+         std::char_traits<char32_t>::compare(U"123", U"123", 3) == 0;
 }
 #endif
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    assert(std::char_traits<char32_t>::compare(U"", U"", 0) == 0);
-    assert(std::char_traits<char32_t>::compare(NULL, NULL, 0) == 0);
-
-    assert(std::char_traits<char32_t>::compare(U"1", U"1", 1) == 0);
-    assert(std::char_traits<char32_t>::compare(U"1", U"2", 1) < 0);
-    assert(std::char_traits<char32_t>::compare(U"2", U"1", 1) > 0);
-
-    assert(std::char_traits<char32_t>::compare(U"12", U"12", 2) == 0);
-    assert(std::char_traits<char32_t>::compare(U"12", U"13", 2) < 0);
-    assert(std::char_traits<char32_t>::compare(U"12", U"22", 2) < 0);
-    assert(std::char_traits<char32_t>::compare(U"13", U"12", 2) > 0);
-    assert(std::char_traits<char32_t>::compare(U"22", U"12", 2) > 0);
-
-    assert(std::char_traits<char32_t>::compare(U"123", U"123", 3) == 0);
-    assert(std::char_traits<char32_t>::compare(U"123", U"223", 3) < 0);
-    assert(std::char_traits<char32_t>::compare(U"123", U"133", 3) < 0);
-    assert(std::char_traits<char32_t>::compare(U"123", U"124", 3) < 0);
-    assert(std::char_traits<char32_t>::compare(U"223", U"123", 3) > 0);
-    assert(std::char_traits<char32_t>::compare(U"133", U"123", 3) > 0);
-    assert(std::char_traits<char32_t>::compare(U"124", U"123", 3) > 0);
+  assert(std::char_traits<char32_t>::compare(U"", U"", 0) == 0);
+  assert(std::char_traits<char32_t>::compare(NULL, NULL, 0) == 0);
+
+  assert(std::char_traits<char32_t>::compare(U"1", U"1", 1) == 0);
+  assert(std::char_traits<char32_t>::compare(U"1", U"2", 1) < 0);
+  assert(std::char_traits<char32_t>::compare(U"2", U"1", 1) > 0);
+
+  assert(std::char_traits<char32_t>::compare(U"12", U"12", 2) == 0);
+  assert(std::char_traits<char32_t>::compare(U"12", U"13", 2) < 0);
+  assert(std::char_traits<char32_t>::compare(U"12", U"22", 2) < 0);
+  assert(std::char_traits<char32_t>::compare(U"13", U"12", 2) > 0);
+  assert(std::char_traits<char32_t>::compare(U"22", U"12", 2) > 0);
+
+  assert(std::char_traits<char32_t>::compare(U"123", U"123", 3) == 0);
+  assert(std::char_traits<char32_t>::compare(U"123", U"223", 3) < 0);
+  assert(std::char_traits<char32_t>::compare(U"123", U"133", 3) < 0);
+  assert(std::char_traits<char32_t>::compare(U"123", U"124", 3) < 0);
+  assert(std::char_traits<char32_t>::compare(U"223", U"123", 3) > 0);
+  assert(std::char_traits<char32_t>::compare(U"133", U"123", 3) > 0);
+  assert(std::char_traits<char32_t>::compare(U"124", U"123", 3) > 0);
 #endif
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/copy.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/copy.pass.cpp
index f030309e038c8d6..f35b75458f7c2bd 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/copy.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/copy.pass.cpp
@@ -17,26 +17,24 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
-    char32_t s1[] = {1, 2, 3};
-    char32_t s2[3] = {0};
-    assert(std::char_traits<char32_t>::copy(s2, s1, 3) == s2);
-    assert(s2[0] == char32_t(1));
-    assert(s2[1] == char32_t(2));
-    assert(s2[2] == char32_t(3));
-    assert(std::char_traits<char32_t>::copy(NULL, s1, 0) == NULL);
-    assert(std::char_traits<char32_t>::copy(s1, NULL, 0) == s1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test() {
+  char32_t s1[]  = {1, 2, 3};
+  char32_t s2[3] = {0};
+  assert(std::char_traits<char32_t>::copy(s2, s1, 3) == s2);
+  assert(s2[0] == char32_t(1));
+  assert(s2[1] == char32_t(2));
+  assert(s2[2] == char32_t(3));
+  assert(std::char_traits<char32_t>::copy(NULL, s1, 0) == NULL);
+  assert(std::char_traits<char32_t>::copy(s1, NULL, 0) == s1);
+
+  return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eof.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eof.pass.cpp
index 4fe39eafbfee087..5ae206ef14f817d 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eof.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eof.pass.cpp
@@ -17,10 +17,9 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    std::char_traits<char32_t>::int_type i = std::char_traits<char32_t>::eof();
-    ((void)i); // Prevent unused warning
+int main(int, char**) {
+  std::char_traits<char32_t>::int_type i = std::char_traits<char32_t>::eof();
+  ((void)i); // Prevent unused warning
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq.pass.cpp
index 84268bbedff2614..9d575408299bbfa 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq.pass.cpp
@@ -17,9 +17,8 @@
 #include <string>
 #include <cassert>
 
-int main(int, char**)
-{
-    assert(std::char_traits<char32_t>::eq(U'a', U'a'));
-    assert(!std::char_traits<char32_t>::eq(U'a', U'A'));
-    return 0;
+int main(int, char**) {
+  assert(std::char_traits<char32_t>::eq(U'a', U'a'));
+  assert(!std::char_traits<char32_t>::eq(U'a', U'A'));
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq_int_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq_int_type.pass.cpp
index c90137d17bce7fc..2763f3372e313d0 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq_int_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/eq_int_type.pass.cpp
@@ -17,15 +17,13 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    assert( std::char_traits<char32_t>::eq_int_type(U'a', U'a'));
-    assert(!std::char_traits<char32_t>::eq_int_type(U'a', U'A'));
-    assert(!std::char_traits<char32_t>::eq_int_type(std::char_traits<char32_t>::eof(), U'A'));
+  assert(std::char_traits<char32_t>::eq_int_type(U'a', U'a'));
+  assert(!std::char_traits<char32_t>::eq_int_type(U'a', U'A'));
+  assert(!std::char_traits<char32_t>::eq_int_type(std::char_traits<char32_t>::eof(), U'A'));
 #endif
-    assert( std::char_traits<char32_t>::eq_int_type(std::char_traits<char32_t>::eof(),
-                                                    std::char_traits<char32_t>::eof()));
+  assert(std::char_traits<char32_t>::eq_int_type(std::char_traits<char32_t>::eof(), std::char_traits<char32_t>::eof()));
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/find.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/find.pass.cpp
index 9f856bace3e9209..c4a6a817ddd6813 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/find.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/find.pass.cpp
@@ -19,29 +19,26 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    constexpr const char32_t *p = U"123";
-    return std::char_traits<char32_t>::find(p, 3, U'1') == p
-        && std::char_traits<char32_t>::find(p, 3, U'2') == p + 1
-        && std::char_traits<char32_t>::find(p, 3, U'3') == p + 2
-        && std::char_traits<char32_t>::find(p, 3, U'4') == nullptr;
+constexpr bool test_constexpr() {
+  constexpr const char32_t* p = U"123";
+  return std::char_traits<char32_t>::find(p, 3, U'1') == p && std::char_traits<char32_t>::find(p, 3, U'2') == p + 1 &&
+         std::char_traits<char32_t>::find(p, 3, U'3') == p + 2 &&
+         std::char_traits<char32_t>::find(p, 3, U'4') == nullptr;
 }
 #endif
 
-int main(int, char**)
-{
-    char32_t s1[] = {1, 2, 3};
-    assert(std::char_traits<char32_t>::find(s1, 3, char32_t(1)) == s1);
-    assert(std::char_traits<char32_t>::find(s1, 3, char32_t(2)) == s1+1);
-    assert(std::char_traits<char32_t>::find(s1, 3, char32_t(3)) == s1+2);
-    assert(std::char_traits<char32_t>::find(s1, 3, char32_t(4)) == 0);
-    assert(std::char_traits<char32_t>::find(s1, 3, char32_t(0)) == 0);
-    assert(std::char_traits<char32_t>::find(NULL, 0, char32_t(0)) == 0);
+int main(int, char**) {
+  char32_t s1[] = {1, 2, 3};
+  assert(std::char_traits<char32_t>::find(s1, 3, char32_t(1)) == s1);
+  assert(std::char_traits<char32_t>::find(s1, 3, char32_t(2)) == s1 + 1);
+  assert(std::char_traits<char32_t>::find(s1, 3, char32_t(3)) == s1 + 2);
+  assert(std::char_traits<char32_t>::find(s1, 3, char32_t(4)) == 0);
+  assert(std::char_traits<char32_t>::find(s1, 3, char32_t(0)) == 0);
+  assert(std::char_traits<char32_t>::find(NULL, 0, char32_t(0)) == 0);
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/length.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/length.pass.cpp
index 985efa146df3fc2..800b9c2d133a402 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/length.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/length.pass.cpp
@@ -19,26 +19,23 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    return std::char_traits<char32_t>::length(U"") == 0
-        && std::char_traits<char32_t>::length(U"abcd") == 4;
+constexpr bool test_constexpr() {
+  return std::char_traits<char32_t>::length(U"") == 0 && std::char_traits<char32_t>::length(U"abcd") == 4;
 }
 #endif
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    assert(std::char_traits<char32_t>::length(U"") == 0);
-    assert(std::char_traits<char32_t>::length(U"a") == 1);
-    assert(std::char_traits<char32_t>::length(U"aa") == 2);
-    assert(std::char_traits<char32_t>::length(U"aaa") == 3);
-    assert(std::char_traits<char32_t>::length(U"aaaa") == 4);
+  assert(std::char_traits<char32_t>::length(U"") == 0);
+  assert(std::char_traits<char32_t>::length(U"a") == 1);
+  assert(std::char_traits<char32_t>::length(U"aa") == 2);
+  assert(std::char_traits<char32_t>::length(U"aaa") == 3);
+  assert(std::char_traits<char32_t>::length(U"aaaa") == 4);
 #endif
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/lt.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/lt.pass.cpp
index 7d7b484bfaee46e..74a72dcfa2ec295 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/lt.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/lt.pass.cpp
@@ -17,9 +17,8 @@
 #include <string>
 #include <cassert>
 
-int main(int, char**)
-{
-    assert(!std::char_traits<char32_t>::lt(U'a', U'a'));
-    assert( std::char_traits<char32_t>::lt(U'A', U'a'));
-    return 0;
+int main(int, char**) {
+  assert(!std::char_traits<char32_t>::lt(U'a', U'a'));
+  assert(std::char_traits<char32_t>::lt(U'A', U'a'));
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/move.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/move.pass.cpp
index 930a1fe2db03279..34b0580df445c24 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/move.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/move.pass.cpp
@@ -17,30 +17,28 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
-    char32_t s1[] = {1, 2, 3};
-    assert(std::char_traits<char32_t>::move(s1, s1+1, 2) == s1);
-    assert(s1[0] == char32_t(2));
-    assert(s1[1] == char32_t(3));
-    assert(s1[2] == char32_t(3));
-    s1[2] = char32_t(0);
-    assert(std::char_traits<char32_t>::move(s1+1, s1, 2) == s1+1);
-    assert(s1[0] == char32_t(2));
-    assert(s1[1] == char32_t(2));
-    assert(s1[2] == char32_t(3));
-    assert(std::char_traits<char32_t>::move(NULL, s1, 0) == NULL);
-    assert(std::char_traits<char32_t>::move(s1, NULL, 0) == s1);
-
-    return true;
+TEST_CONSTEXPR_CXX20 bool test() {
+  char32_t s1[] = {1, 2, 3};
+  assert(std::char_traits<char32_t>::move(s1, s1 + 1, 2) == s1);
+  assert(s1[0] == char32_t(2));
+  assert(s1[1] == char32_t(3));
+  assert(s1[2] == char32_t(3));
+  s1[2] = char32_t(0);
+  assert(std::char_traits<char32_t>::move(s1 + 1, s1, 2) == s1 + 1);
+  assert(s1[0] == char32_t(2));
+  assert(s1[1] == char32_t(2));
+  assert(s1[2] == char32_t(3));
+  assert(std::char_traits<char32_t>::move(NULL, s1, 0) == NULL);
+  assert(std::char_traits<char32_t>::move(s1, NULL, 0) == s1);
+
+  return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/not_eof.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/not_eof.pass.cpp
index 7e5845436f47d88..965c8f6a3d13908 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/not_eof.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/not_eof.pass.cpp
@@ -17,15 +17,13 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    assert(std::char_traits<char32_t>::not_eof(U'a') == U'a');
-    assert(std::char_traits<char32_t>::not_eof(U'A') == U'A');
+  assert(std::char_traits<char32_t>::not_eof(U'a') == U'a');
+  assert(std::char_traits<char32_t>::not_eof(U'A') == U'A');
 #endif
-    assert(std::char_traits<char32_t>::not_eof(0) == 0);
-    assert(std::char_traits<char32_t>::not_eof(std::char_traits<char32_t>::eof()) !=
-           std::char_traits<char32_t>::eof());
+  assert(std::char_traits<char32_t>::not_eof(0) == 0);
+  assert(std::char_traits<char32_t>::not_eof(std::char_traits<char32_t>::eof()) != std::char_traits<char32_t>::eof());
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_char_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_char_type.pass.cpp
index a01d1e5be21536d..93defabc9e588d3 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_char_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_char_type.pass.cpp
@@ -17,13 +17,12 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    assert(std::char_traits<char32_t>::to_char_type(U'a') == U'a');
-    assert(std::char_traits<char32_t>::to_char_type(U'A') == U'A');
+  assert(std::char_traits<char32_t>::to_char_type(U'a') == U'a');
+  assert(std::char_traits<char32_t>::to_char_type(U'A') == U'A');
 #endif
-    assert(std::char_traits<char32_t>::to_char_type(0) == 0);
+  assert(std::char_traits<char32_t>::to_char_type(0) == 0);
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_int_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_int_type.pass.cpp
index a12b69008a50258..ca70f5814384894 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_int_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char32_t/to_int_type.pass.cpp
@@ -17,13 +17,12 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #if TEST_STD_VER >= 11
-    assert(std::char_traits<char32_t>::to_int_type(U'a') == U'a');
-    assert(std::char_traits<char32_t>::to_int_type(U'A') == U'A');
+  assert(std::char_traits<char32_t>::to_int_type(U'a') == U'a');
+  assert(std::char_traits<char32_t>::to_int_type(U'A') == U'A');
 #endif
-    assert(std::char_traits<char32_t>::to_int_type(0) == 0);
+  assert(std::char_traits<char32_t>::to_int_type(0) == 0);
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/assign2.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/assign2.pass.cpp
index 2a0867c2c9f175d..e3bc9c3c100d423 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/assign2.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/assign2.pass.cpp
@@ -18,24 +18,20 @@
 #include "test_macros.h"
 
 #ifndef TEST_HAS_NO_CHAR8_T
-constexpr bool test_constexpr()
-{
-    char8_t c = u'1';
-    std::char_traits<char8_t>::assign(c, u'a');
-    return c == u'a';
+constexpr bool test_constexpr() {
+  char8_t c = u'1';
+  std::char_traits<char8_t>::assign(c, u'a');
+  return c == u'a';
 }
 
-int main(int, char**)
-{
-    char8_t c = u8'\0';
-    std::char_traits<char8_t>::assign(c, u8'a');
-    assert(c == u8'a');
-
-    static_assert(test_constexpr(), "");
-    return 0;
-}
-#else
 int main(int, char**) {
+  char8_t c = u8'\0';
+  std::char_traits<char8_t>::assign(c, u8'a');
+  assert(c == u8'a');
+
+  static_assert(test_constexpr(), "");
   return 0;
 }
+#else
+int main(int, char**) { return 0; }
 #endif

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/assign3.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/assign3.pass.cpp
index 7142863f2249d9f..1552a2ca446e764 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/assign3.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/assign3.pass.cpp
@@ -19,26 +19,24 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
+TEST_CONSTEXPR_CXX20 bool test() {
 #ifndef TEST_HAS_NO_CHAR8_T
-    char8_t s2[3] = {0};
-    assert(std::char_traits<char8_t>::assign(s2, 3, char8_t(5)) == s2);
-    assert(s2[0] == char8_t(5));
-    assert(s2[1] == char8_t(5));
-    assert(s2[2] == char8_t(5));
-    assert(std::char_traits<char8_t>::assign(NULL, 0, char8_t(5)) == NULL);
+  char8_t s2[3] = {0};
+  assert(std::char_traits<char8_t>::assign(s2, 3, char8_t(5)) == s2);
+  assert(s2[0] == char8_t(5));
+  assert(s2[1] == char8_t(5));
+  assert(s2[2] == char8_t(5));
+  assert(std::char_traits<char8_t>::assign(NULL, 0, char8_t(5)) == NULL);
 #endif
 
   return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/compare.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/compare.pass.cpp
index 3dd3078676ecc69..e753e26e7817d4a 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/compare.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/compare.pass.cpp
@@ -19,42 +19,37 @@
 #include "test_macros.h"
 
 #ifndef TEST_HAS_NO_CHAR8_T
-constexpr bool test_constexpr()
-{
-    return std::char_traits<char8_t>::compare(u8"123", u8"223", 3) < 0
-        && std::char_traits<char8_t>::compare(u8"223", u8"123", 3) > 0
-        && std::char_traits<char8_t>::compare(u8"123", u8"123", 3) == 0;
+constexpr bool test_constexpr() {
+  return std::char_traits<char8_t>::compare(u8"123", u8"223", 3) < 0 &&
+         std::char_traits<char8_t>::compare(u8"223", u8"123", 3) > 0 &&
+         std::char_traits<char8_t>::compare(u8"123", u8"123", 3) == 0;
 }
 
-
-int main(int, char**)
-{
-    assert(std::char_traits<char8_t>::compare(u8"", u8"", 0) == 0);
-    assert(std::char_traits<char8_t>::compare(NULL, NULL, 0) == 0);
-
-    assert(std::char_traits<char8_t>::compare(u8"1", u8"1", 1) == 0);
-    assert(std::char_traits<char8_t>::compare(u8"1", u8"2", 1) < 0);
-    assert(std::char_traits<char8_t>::compare(u8"2", u8"1", 1) > 0);
-
-    assert(std::char_traits<char8_t>::compare(u8"12", u8"12", 2) == 0);
-    assert(std::char_traits<char8_t>::compare(u8"12", u8"13", 2) < 0);
-    assert(std::char_traits<char8_t>::compare(u8"12", u8"22", 2) < 0);
-    assert(std::char_traits<char8_t>::compare(u8"13", u8"12", 2) > 0);
-    assert(std::char_traits<char8_t>::compare(u8"22", u8"12", 2) > 0);
-
-    assert(std::char_traits<char8_t>::compare(u8"123", u8"123", 3) == 0);
-    assert(std::char_traits<char8_t>::compare(u8"123", u8"223", 3) < 0);
-    assert(std::char_traits<char8_t>::compare(u8"123", u8"133", 3) < 0);
-    assert(std::char_traits<char8_t>::compare(u8"123", u8"124", 3) < 0);
-    assert(std::char_traits<char8_t>::compare(u8"223", u8"123", 3) > 0);
-    assert(std::char_traits<char8_t>::compare(u8"133", u8"123", 3) > 0);
-    assert(std::char_traits<char8_t>::compare(u8"124", u8"123", 3) > 0);
-
-    static_assert(test_constexpr(), "" );
-    return 0;
-}
-#else
 int main(int, char**) {
+  assert(std::char_traits<char8_t>::compare(u8"", u8"", 0) == 0);
+  assert(std::char_traits<char8_t>::compare(NULL, NULL, 0) == 0);
+
+  assert(std::char_traits<char8_t>::compare(u8"1", u8"1", 1) == 0);
+  assert(std::char_traits<char8_t>::compare(u8"1", u8"2", 1) < 0);
+  assert(std::char_traits<char8_t>::compare(u8"2", u8"1", 1) > 0);
+
+  assert(std::char_traits<char8_t>::compare(u8"12", u8"12", 2) == 0);
+  assert(std::char_traits<char8_t>::compare(u8"12", u8"13", 2) < 0);
+  assert(std::char_traits<char8_t>::compare(u8"12", u8"22", 2) < 0);
+  assert(std::char_traits<char8_t>::compare(u8"13", u8"12", 2) > 0);
+  assert(std::char_traits<char8_t>::compare(u8"22", u8"12", 2) > 0);
+
+  assert(std::char_traits<char8_t>::compare(u8"123", u8"123", 3) == 0);
+  assert(std::char_traits<char8_t>::compare(u8"123", u8"223", 3) < 0);
+  assert(std::char_traits<char8_t>::compare(u8"123", u8"133", 3) < 0);
+  assert(std::char_traits<char8_t>::compare(u8"123", u8"124", 3) < 0);
+  assert(std::char_traits<char8_t>::compare(u8"223", u8"123", 3) > 0);
+  assert(std::char_traits<char8_t>::compare(u8"133", u8"123", 3) > 0);
+  assert(std::char_traits<char8_t>::compare(u8"124", u8"123", 3) > 0);
+
+  static_assert(test_constexpr(), "");
   return 0;
 }
+#else
+int main(int, char**) { return 0; }
 #endif

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/copy.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/copy.pass.cpp
index cbaeebaa961d15a..b6efcdff26f6cab 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/copy.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/copy.pass.cpp
@@ -19,28 +19,26 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
+TEST_CONSTEXPR_CXX20 bool test() {
 #ifndef TEST_HAS_NO_CHAR8_T
-    char8_t s1[] = {1, 2, 3};
-    char8_t s2[3] = {0};
-    assert(std::char_traits<char8_t>::copy(s2, s1, 3) == s2);
-    assert(s2[0] == char8_t(1));
-    assert(s2[1] == char8_t(2));
-    assert(s2[2] == char8_t(3));
-    assert(std::char_traits<char8_t>::copy(NULL, s1, 0) == NULL);
-    assert(std::char_traits<char8_t>::copy(s1, NULL, 0) == s1);
+  char8_t s1[]  = {1, 2, 3};
+  char8_t s2[3] = {0};
+  assert(std::char_traits<char8_t>::copy(s2, s1, 3) == s2);
+  assert(s2[0] == char8_t(1));
+  assert(s2[1] == char8_t(2));
+  assert(s2[2] == char8_t(3));
+  assert(std::char_traits<char8_t>::copy(NULL, s1, 0) == NULL);
+  assert(std::char_traits<char8_t>::copy(s1, NULL, 0) == s1);
 #endif
 
   return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eof.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eof.pass.cpp
index b21427907ab8ef7..25419c430a70dcd 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eof.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eof.pass.cpp
@@ -18,11 +18,10 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #ifndef TEST_HAS_NO_CHAR8_T
-    std::char_traits<char8_t>::int_type i = std::char_traits<char8_t>::eof();
-    ((void)i); // Prevent unused warning
+  std::char_traits<char8_t>::int_type i = std::char_traits<char8_t>::eof();
+  ((void)i); // Prevent unused warning
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eq.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eq.pass.cpp
index 87c27325c76bf26..bc518970dc67512 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eq.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eq.pass.cpp
@@ -18,11 +18,10 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #ifndef TEST_HAS_NO_CHAR8_T
-    assert( std::char_traits<char8_t>::eq(u8'a', u8'a'));
-    assert(!std::char_traits<char8_t>::eq(u8'a', u8'A'));
+  assert(std::char_traits<char8_t>::eq(u8'a', u8'a'));
+  assert(!std::char_traits<char8_t>::eq(u8'a', u8'A'));
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eq_int_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eq_int_type.pass.cpp
index 1d4bfe7b26e028a..dd8f0a79c517709 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eq_int_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/eq_int_type.pass.cpp
@@ -18,14 +18,12 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #ifndef TEST_HAS_NO_CHAR8_T
-    assert( std::char_traits<char8_t>::eq_int_type(u8'a', u8'a'));
-    assert(!std::char_traits<char8_t>::eq_int_type(u8'a', u8'A'));
-    assert(!std::char_traits<char8_t>::eq_int_type(std::char_traits<char8_t>::eof(), u8'A'));
-    assert( std::char_traits<char8_t>::eq_int_type(std::char_traits<char8_t>::eof(),
-                                                    std::char_traits<char8_t>::eof()));
+  assert(std::char_traits<char8_t>::eq_int_type(u8'a', u8'a'));
+  assert(!std::char_traits<char8_t>::eq_int_type(u8'a', u8'A'));
+  assert(!std::char_traits<char8_t>::eq_int_type(std::char_traits<char8_t>::eof(), u8'A'));
+  assert(std::char_traits<char8_t>::eq_int_type(std::char_traits<char8_t>::eof(), std::char_traits<char8_t>::eof()));
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/find.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/find.pass.cpp
index 60d17a6ad6f0a5b..3d1dbec2c3f90b4 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/find.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/find.pass.cpp
@@ -19,30 +19,25 @@
 #include "test_macros.h"
 
 #ifndef TEST_HAS_NO_CHAR8_T
-constexpr bool test_constexpr()
-{
-    constexpr const char8_t *p = u8"123";
-    return std::char_traits<char8_t>::find(p, 3, u8'1') == p
-        && std::char_traits<char8_t>::find(p, 3, u8'2') == p + 1
-        && std::char_traits<char8_t>::find(p, 3, u8'3') == p + 2
-        && std::char_traits<char8_t>::find(p, 3, u8'4') == nullptr;
+constexpr bool test_constexpr() {
+  constexpr const char8_t* p = u8"123";
+  return std::char_traits<char8_t>::find(p, 3, u8'1') == p && std::char_traits<char8_t>::find(p, 3, u8'2') == p + 1 &&
+         std::char_traits<char8_t>::find(p, 3, u8'3') == p + 2 &&
+         std::char_traits<char8_t>::find(p, 3, u8'4') == nullptr;
 }
 
-int main(int, char**)
-{
-    char8_t s1[] = {1, 2, 3};
-    assert(std::char_traits<char8_t>::find(s1, 3, char8_t(1)) == s1);
-    assert(std::char_traits<char8_t>::find(s1, 3, char8_t(2)) == s1+1);
-    assert(std::char_traits<char8_t>::find(s1, 3, char8_t(3)) == s1+2);
-    assert(std::char_traits<char8_t>::find(s1, 3, char8_t(4)) == 0);
-    assert(std::char_traits<char8_t>::find(s1, 3, char8_t(0)) == 0);
-    assert(std::char_traits<char8_t>::find(NULL, 0, char8_t(0)) == 0);
-
-    static_assert(test_constexpr(), "" );
-    return 0;
-}
-#else
 int main(int, char**) {
+  char8_t s1[] = {1, 2, 3};
+  assert(std::char_traits<char8_t>::find(s1, 3, char8_t(1)) == s1);
+  assert(std::char_traits<char8_t>::find(s1, 3, char8_t(2)) == s1 + 1);
+  assert(std::char_traits<char8_t>::find(s1, 3, char8_t(3)) == s1 + 2);
+  assert(std::char_traits<char8_t>::find(s1, 3, char8_t(4)) == 0);
+  assert(std::char_traits<char8_t>::find(s1, 3, char8_t(0)) == 0);
+  assert(std::char_traits<char8_t>::find(NULL, 0, char8_t(0)) == 0);
+
+  static_assert(test_constexpr(), "");
   return 0;
 }
+#else
+int main(int, char**) { return 0; }
 #endif

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/length.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/length.pass.cpp
index 602b7eda6aa9ce2..141a0aa201623fe 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/length.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/length.pass.cpp
@@ -19,25 +19,20 @@
 #include "test_macros.h"
 
 #ifndef TEST_HAS_NO_CHAR8_T
-constexpr bool test_constexpr()
-{
-    return std::char_traits<char8_t>::length(u8"") == 0
-        && std::char_traits<char8_t>::length(u8"abcd") == 4;
+constexpr bool test_constexpr() {
+  return std::char_traits<char8_t>::length(u8"") == 0 && std::char_traits<char8_t>::length(u8"abcd") == 4;
 }
 
-int main(int, char**)
-{
-    assert(std::char_traits<char8_t>::length(u8"") == 0);
-    assert(std::char_traits<char8_t>::length(u8"a") == 1);
-    assert(std::char_traits<char8_t>::length(u8"aa") == 2);
-    assert(std::char_traits<char8_t>::length(u8"aaa") == 3);
-    assert(std::char_traits<char8_t>::length(u8"aaaa") == 4);
-
-    static_assert(test_constexpr(), "");
-    return 0;
-}
-#else
 int main(int, char**) {
+  assert(std::char_traits<char8_t>::length(u8"") == 0);
+  assert(std::char_traits<char8_t>::length(u8"a") == 1);
+  assert(std::char_traits<char8_t>::length(u8"aa") == 2);
+  assert(std::char_traits<char8_t>::length(u8"aaa") == 3);
+  assert(std::char_traits<char8_t>::length(u8"aaaa") == 4);
+
+  static_assert(test_constexpr(), "");
   return 0;
 }
+#else
+int main(int, char**) { return 0; }
 #endif

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/lt.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/lt.pass.cpp
index 26f3806bcd7a145..54279e4f725984d 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/lt.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/lt.pass.cpp
@@ -18,11 +18,10 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #ifndef TEST_HAS_NO_CHAR8_T
-    assert(!std::char_traits<char8_t>::lt(u8'a', u8'a'));
-    assert( std::char_traits<char8_t>::lt(u8'A', u8'a'));
+  assert(!std::char_traits<char8_t>::lt(u8'a', u8'a'));
+  assert(std::char_traits<char8_t>::lt(u8'A', u8'a'));
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/move.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/move.pass.cpp
index 6c5f1b2b79a1173..45aed96cbda7fd3 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/move.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/move.pass.cpp
@@ -19,32 +19,30 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
+TEST_CONSTEXPR_CXX20 bool test() {
 #ifndef TEST_HAS_NO_CHAR8_T
-    char8_t s1[] = {1, 2, 3};
-    assert(std::char_traits<char8_t>::move(s1, s1+1, 2) == s1);
-    assert(s1[0] == char8_t(2));
-    assert(s1[1] == char8_t(3));
-    assert(s1[2] == char8_t(3));
-    s1[2] = char8_t(0);
-    assert(std::char_traits<char8_t>::move(s1+1, s1, 2) == s1+1);
-    assert(s1[0] == char8_t(2));
-    assert(s1[1] == char8_t(2));
-    assert(s1[2] == char8_t(3));
-    assert(std::char_traits<char8_t>::move(NULL, s1, 0) == NULL);
-    assert(std::char_traits<char8_t>::move(s1, NULL, 0) == s1);
+  char8_t s1[] = {1, 2, 3};
+  assert(std::char_traits<char8_t>::move(s1, s1 + 1, 2) == s1);
+  assert(s1[0] == char8_t(2));
+  assert(s1[1] == char8_t(3));
+  assert(s1[2] == char8_t(3));
+  s1[2] = char8_t(0);
+  assert(std::char_traits<char8_t>::move(s1 + 1, s1, 2) == s1 + 1);
+  assert(s1[0] == char8_t(2));
+  assert(s1[1] == char8_t(2));
+  assert(s1[2] == char8_t(3));
+  assert(std::char_traits<char8_t>::move(NULL, s1, 0) == NULL);
+  assert(std::char_traits<char8_t>::move(s1, NULL, 0) == s1);
 #endif
 
   return true;
 }
 
-int main(int, char**)
-{
-    test();
+int main(int, char**) {
+  test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/not_eof.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/not_eof.pass.cpp
index 6bfe7983b655552..d8de78614546edf 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/not_eof.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/not_eof.pass.cpp
@@ -18,14 +18,12 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #ifndef TEST_HAS_NO_CHAR8_T
-    assert(std::char_traits<char8_t>::not_eof(u8'a') == u8'a');
-    assert(std::char_traits<char8_t>::not_eof(u8'A') == u8'A');
-    assert(std::char_traits<char8_t>::not_eof(0) == 0);
-    assert(std::char_traits<char8_t>::not_eof(std::char_traits<char8_t>::eof()) !=
-           std::char_traits<char8_t>::eof());
+  assert(std::char_traits<char8_t>::not_eof(u8'a') == u8'a');
+  assert(std::char_traits<char8_t>::not_eof(u8'A') == u8'A');
+  assert(std::char_traits<char8_t>::not_eof(0) == 0);
+  assert(std::char_traits<char8_t>::not_eof(std::char_traits<char8_t>::eof()) != std::char_traits<char8_t>::eof());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/to_char_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/to_char_type.pass.cpp
index 98b7e07474c4c6c..70c9dae23702fdf 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/to_char_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/to_char_type.pass.cpp
@@ -18,12 +18,11 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #ifndef TEST_HAS_NO_CHAR8_T
-    assert(std::char_traits<char8_t>::to_char_type(u8'a') == u8'a');
-    assert(std::char_traits<char8_t>::to_char_type(u8'A') == u8'A');
-    assert(std::char_traits<char8_t>::to_char_type(0) == 0);
+  assert(std::char_traits<char8_t>::to_char_type(u8'a') == u8'a');
+  assert(std::char_traits<char8_t>::to_char_type(u8'A') == u8'A');
+  assert(std::char_traits<char8_t>::to_char_type(0) == 0);
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/to_int_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/to_int_type.pass.cpp
index 3f65beecd9a0b6c..1e56e6d3b6f5ab3 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/to_int_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char8_t/to_int_type.pass.cpp
@@ -18,12 +18,11 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
 #ifndef TEST_HAS_NO_CHAR8_T
-    assert(std::char_traits<char8_t>::to_int_type(u8'a') == u8'a');
-    assert(std::char_traits<char8_t>::to_int_type(u8'A') == u8'A');
-    assert(std::char_traits<char8_t>::to_int_type(0) == 0);
+  assert(std::char_traits<char8_t>::to_int_type(u8'a') == u8'a');
+  assert(std::char_traits<char8_t>::to_int_type(u8'A') == u8'A');
+  assert(std::char_traits<char8_t>::to_int_type(0) == 0);
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/assign2.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/assign2.pass.cpp
index 3348efbd4512325..77e43b594a88088 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/assign2.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/assign2.pass.cpp
@@ -21,22 +21,20 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    wchar_t c = L'1';
-    std::char_traits<wchar_t>::assign(c, L'a');
-    return c == L'a';
+constexpr bool test_constexpr() {
+  wchar_t c = L'1';
+  std::char_traits<wchar_t>::assign(c, L'a');
+  return c == L'a';
 }
 #endif
 
-int main(int, char**)
-{
-    wchar_t c = L'\0';
-    std::char_traits<wchar_t>::assign(c, L'a');
-    assert(c == L'a');
+int main(int, char**) {
+  wchar_t c = L'\0';
+  std::char_traits<wchar_t>::assign(c, L'a');
+  assert(c == L'a');
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/assign3.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/assign3.pass.cpp
index bc60599258e6027..683a1d4ea749a75 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/assign3.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/assign3.pass.cpp
@@ -19,24 +19,22 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
-    wchar_t s2[3] = {0};
-    assert(std::char_traits<wchar_t>::assign(s2, 3, wchar_t(5)) == s2);
-    assert(s2[0] == wchar_t(5));
-    assert(s2[1] == wchar_t(5));
-    assert(s2[2] == wchar_t(5));
-    assert(std::char_traits<wchar_t>::assign(NULL, 0, wchar_t(5)) == NULL);
+TEST_CONSTEXPR_CXX20 bool test() {
+  wchar_t s2[3] = {0};
+  assert(std::char_traits<wchar_t>::assign(s2, 3, wchar_t(5)) == s2);
+  assert(s2[0] == wchar_t(5));
+  assert(s2[1] == wchar_t(5));
+  assert(s2[2] == wchar_t(5));
+  assert(std::char_traits<wchar_t>::assign(NULL, 0, wchar_t(5)) == NULL);
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 
 #if TEST_STD_VER > 17
-    static_assert(test());
+  static_assert(test());
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/compare.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/compare.pass.cpp
index fb9617d6335adf3..b145ddbb338fcbf 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/compare.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/compare.pass.cpp
@@ -21,39 +21,37 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    return std::char_traits<wchar_t>::compare(L"123", L"223", 3) < 0
-        && std::char_traits<wchar_t>::compare(L"223", L"123", 3) > 0
-        && std::char_traits<wchar_t>::compare(L"123", L"123", 3) == 0;
+constexpr bool test_constexpr() {
+  return std::char_traits<wchar_t>::compare(L"123", L"223", 3) < 0 &&
+         std::char_traits<wchar_t>::compare(L"223", L"123", 3) > 0 &&
+         std::char_traits<wchar_t>::compare(L"123", L"123", 3) == 0;
 }
 #endif
 
-int main(int, char**)
-{
-    assert(std::char_traits<wchar_t>::compare(L"", L"", 0) == 0);
-    assert(std::char_traits<wchar_t>::compare(NULL, NULL, 0) == 0);
-
-    assert(std::char_traits<wchar_t>::compare(L"1", L"1", 1) == 0);
-    assert(std::char_traits<wchar_t>::compare(L"1", L"2", 1) < 0);
-    assert(std::char_traits<wchar_t>::compare(L"2", L"1", 1) > 0);
-
-    assert(std::char_traits<wchar_t>::compare(L"12", L"12", 2) == 0);
-    assert(std::char_traits<wchar_t>::compare(L"12", L"13", 2) < 0);
-    assert(std::char_traits<wchar_t>::compare(L"12", L"22", 2) < 0);
-    assert(std::char_traits<wchar_t>::compare(L"13", L"12", 2) > 0);
-    assert(std::char_traits<wchar_t>::compare(L"22", L"12", 2) > 0);
-
-    assert(std::char_traits<wchar_t>::compare(L"123", L"123", 3) == 0);
-    assert(std::char_traits<wchar_t>::compare(L"123", L"223", 3) < 0);
-    assert(std::char_traits<wchar_t>::compare(L"123", L"133", 3) < 0);
-    assert(std::char_traits<wchar_t>::compare(L"123", L"124", 3) < 0);
-    assert(std::char_traits<wchar_t>::compare(L"223", L"123", 3) > 0);
-    assert(std::char_traits<wchar_t>::compare(L"133", L"123", 3) > 0);
-    assert(std::char_traits<wchar_t>::compare(L"124", L"123", 3) > 0);
+int main(int, char**) {
+  assert(std::char_traits<wchar_t>::compare(L"", L"", 0) == 0);
+  assert(std::char_traits<wchar_t>::compare(NULL, NULL, 0) == 0);
+
+  assert(std::char_traits<wchar_t>::compare(L"1", L"1", 1) == 0);
+  assert(std::char_traits<wchar_t>::compare(L"1", L"2", 1) < 0);
+  assert(std::char_traits<wchar_t>::compare(L"2", L"1", 1) > 0);
+
+  assert(std::char_traits<wchar_t>::compare(L"12", L"12", 2) == 0);
+  assert(std::char_traits<wchar_t>::compare(L"12", L"13", 2) < 0);
+  assert(std::char_traits<wchar_t>::compare(L"12", L"22", 2) < 0);
+  assert(std::char_traits<wchar_t>::compare(L"13", L"12", 2) > 0);
+  assert(std::char_traits<wchar_t>::compare(L"22", L"12", 2) > 0);
+
+  assert(std::char_traits<wchar_t>::compare(L"123", L"123", 3) == 0);
+  assert(std::char_traits<wchar_t>::compare(L"123", L"223", 3) < 0);
+  assert(std::char_traits<wchar_t>::compare(L"123", L"133", 3) < 0);
+  assert(std::char_traits<wchar_t>::compare(L"123", L"124", 3) < 0);
+  assert(std::char_traits<wchar_t>::compare(L"223", L"123", 3) > 0);
+  assert(std::char_traits<wchar_t>::compare(L"133", L"123", 3) > 0);
+  assert(std::char_traits<wchar_t>::compare(L"124", L"123", 3) > 0);
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/copy.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/copy.pass.cpp
index b1bfba9db946983..8c98f60d965e8d2 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/copy.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/copy.pass.cpp
@@ -19,22 +19,20 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
-    wchar_t s1[] = {1, 2, 3};
-    wchar_t s2[3] = {0};
-    assert(std::char_traits<wchar_t>::copy(s2, s1, 3) == s2);
-    assert(s2[0] == wchar_t(1));
-    assert(s2[1] == wchar_t(2));
-    assert(s2[2] == wchar_t(3));
-    assert(std::char_traits<wchar_t>::copy(NULL, s1, 0) == NULL);
-    assert(std::char_traits<wchar_t>::copy(s1, NULL, 0) == s1);
+TEST_CONSTEXPR_CXX20 bool test() {
+  wchar_t s1[]  = {1, 2, 3};
+  wchar_t s2[3] = {0};
+  assert(std::char_traits<wchar_t>::copy(s2, s1, 3) == s2);
+  assert(s2[0] == wchar_t(1));
+  assert(s2[1] == wchar_t(2));
+  assert(s2[2] == wchar_t(3));
+  assert(std::char_traits<wchar_t>::copy(NULL, s1, 0) == NULL);
+  assert(std::char_traits<wchar_t>::copy(s1, NULL, 0) == s1);
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 
 #if TEST_STD_VER > 17

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eof.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eof.pass.cpp
index 5cfb1f4efa6527a..585b46a1e22cbdc 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eof.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eof.pass.cpp
@@ -19,9 +19,8 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::char_traits<wchar_t>::eof() == WEOF);
+int main(int, char**) {
+  assert(std::char_traits<wchar_t>::eof() == WEOF);
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eq.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eq.pass.cpp
index 9ca8ea1d2b1e23f..53017028138eb35 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eq.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eq.pass.cpp
@@ -19,10 +19,9 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::char_traits<wchar_t>::eq(L'a', L'a'));
-    assert(!std::char_traits<wchar_t>::eq(L'a', L'A'));
+int main(int, char**) {
+  assert(std::char_traits<wchar_t>::eq(L'a', L'a'));
+  assert(!std::char_traits<wchar_t>::eq(L'a', L'A'));
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eq_int_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eq_int_type.pass.cpp
index d3536d714ed6205..49a5492d19c8fab 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eq_int_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/eq_int_type.pass.cpp
@@ -19,13 +19,11 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert( std::char_traits<wchar_t>::eq_int_type(L'a', L'a'));
-    assert(!std::char_traits<wchar_t>::eq_int_type(L'a', L'A'));
-    assert(!std::char_traits<wchar_t>::eq_int_type(std::char_traits<wchar_t>::eof(), L'A'));
-    assert( std::char_traits<wchar_t>::eq_int_type(std::char_traits<wchar_t>::eof(),
-                                                   std::char_traits<wchar_t>::eof()));
+int main(int, char**) {
+  assert(std::char_traits<wchar_t>::eq_int_type(L'a', L'a'));
+  assert(!std::char_traits<wchar_t>::eq_int_type(L'a', L'A'));
+  assert(!std::char_traits<wchar_t>::eq_int_type(std::char_traits<wchar_t>::eof(), L'A'));
+  assert(std::char_traits<wchar_t>::eq_int_type(std::char_traits<wchar_t>::eof(), std::char_traits<wchar_t>::eof()));
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/find.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/find.pass.cpp
index 2293723354225bc..63bc90506b4f3cf 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/find.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/find.pass.cpp
@@ -21,28 +21,24 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    constexpr const wchar_t *p = L"123";
-    return std::char_traits<wchar_t>::find(p, 3, L'1') == p
-        && std::char_traits<wchar_t>::find(p, 3, L'2') == p + 1
-        && std::char_traits<wchar_t>::find(p, 3, L'3') == p + 2
-        && std::char_traits<wchar_t>::find(p, 3, L'4') == nullptr;
+constexpr bool test_constexpr() {
+  constexpr const wchar_t* p = L"123";
+  return std::char_traits<wchar_t>::find(p, 3, L'1') == p && std::char_traits<wchar_t>::find(p, 3, L'2') == p + 1 &&
+         std::char_traits<wchar_t>::find(p, 3, L'3') == p + 2 && std::char_traits<wchar_t>::find(p, 3, L'4') == nullptr;
 }
 #endif
 
-int main(int, char**)
-{
-    wchar_t s1[] = {1, 2, 3};
-    assert(std::char_traits<wchar_t>::find(s1, 3, wchar_t(1)) == s1);
-    assert(std::char_traits<wchar_t>::find(s1, 3, wchar_t(2)) == s1+1);
-    assert(std::char_traits<wchar_t>::find(s1, 3, wchar_t(3)) == s1+2);
-    assert(std::char_traits<wchar_t>::find(s1, 3, wchar_t(4)) == 0);
-    assert(std::char_traits<wchar_t>::find(s1, 3, wchar_t(0)) == 0);
-    assert(std::char_traits<wchar_t>::find(NULL, 0, wchar_t(0)) == 0);
+int main(int, char**) {
+  wchar_t s1[] = {1, 2, 3};
+  assert(std::char_traits<wchar_t>::find(s1, 3, wchar_t(1)) == s1);
+  assert(std::char_traits<wchar_t>::find(s1, 3, wchar_t(2)) == s1 + 1);
+  assert(std::char_traits<wchar_t>::find(s1, 3, wchar_t(3)) == s1 + 2);
+  assert(std::char_traits<wchar_t>::find(s1, 3, wchar_t(4)) == 0);
+  assert(std::char_traits<wchar_t>::find(s1, 3, wchar_t(0)) == 0);
+  assert(std::char_traits<wchar_t>::find(NULL, 0, wchar_t(0)) == 0);
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/length.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/length.pass.cpp
index d9d62a3b1248775..302d809aa0d86fb 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/length.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/length.pass.cpp
@@ -21,23 +21,20 @@
 #include "test_macros.h"
 
 #if TEST_STD_VER > 14
-constexpr bool test_constexpr()
-{
-    return std::char_traits<wchar_t>::length(L"") == 0
-        && std::char_traits<wchar_t>::length(L"abcd") == 4;
+constexpr bool test_constexpr() {
+  return std::char_traits<wchar_t>::length(L"") == 0 && std::char_traits<wchar_t>::length(L"abcd") == 4;
 }
 #endif
 
-int main(int, char**)
-{
-    assert(std::char_traits<wchar_t>::length(L"") == 0);
-    assert(std::char_traits<wchar_t>::length(L"a") == 1);
-    assert(std::char_traits<wchar_t>::length(L"aa") == 2);
-    assert(std::char_traits<wchar_t>::length(L"aaa") == 3);
-    assert(std::char_traits<wchar_t>::length(L"aaaa") == 4);
+int main(int, char**) {
+  assert(std::char_traits<wchar_t>::length(L"") == 0);
+  assert(std::char_traits<wchar_t>::length(L"a") == 1);
+  assert(std::char_traits<wchar_t>::length(L"aa") == 2);
+  assert(std::char_traits<wchar_t>::length(L"aaa") == 3);
+  assert(std::char_traits<wchar_t>::length(L"aaaa") == 4);
 
 #if TEST_STD_VER > 14
-    static_assert(test_constexpr(), "" );
+  static_assert(test_constexpr(), "");
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/lt.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/lt.pass.cpp
index 4ec86aa1434ee35..0bf7d403dfcab31 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/lt.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/lt.pass.cpp
@@ -19,8 +19,7 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
+int main(int, char**) {
   assert(std::char_traits<wchar_t>::lt(L'\0', L'A') == (L'\0' < L'A'));
   assert(std::char_traits<wchar_t>::lt(L'A', L'\0') == (L'A' < L'\0'));
 

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/move.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/move.pass.cpp
index d91048c52914ccf..6f2cd272590579b 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/move.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/move.pass.cpp
@@ -19,26 +19,24 @@
 
 #include "test_macros.h"
 
-TEST_CONSTEXPR_CXX20 bool test()
-{
-    wchar_t s1[] = {1, 2, 3};
-    assert(std::char_traits<wchar_t>::move(s1, s1+1, 2) == s1);
-    assert(s1[0] == wchar_t(2));
-    assert(s1[1] == wchar_t(3));
-    assert(s1[2] == wchar_t(3));
-    s1[2] = wchar_t(0);
-    assert(std::char_traits<wchar_t>::move(s1+1, s1, 2) == s1+1);
-    assert(s1[0] == wchar_t(2));
-    assert(s1[1] == wchar_t(2));
-    assert(s1[2] == wchar_t(3));
-    assert(std::char_traits<wchar_t>::move(NULL, s1, 0) == NULL);
-    assert(std::char_traits<wchar_t>::move(s1, NULL, 0) == s1);
+TEST_CONSTEXPR_CXX20 bool test() {
+  wchar_t s1[] = {1, 2, 3};
+  assert(std::char_traits<wchar_t>::move(s1, s1 + 1, 2) == s1);
+  assert(s1[0] == wchar_t(2));
+  assert(s1[1] == wchar_t(3));
+  assert(s1[2] == wchar_t(3));
+  s1[2] = wchar_t(0);
+  assert(std::char_traits<wchar_t>::move(s1 + 1, s1, 2) == s1 + 1);
+  assert(s1[0] == wchar_t(2));
+  assert(s1[1] == wchar_t(2));
+  assert(s1[2] == wchar_t(3));
+  assert(std::char_traits<wchar_t>::move(NULL, s1, 0) == NULL);
+  assert(std::char_traits<wchar_t>::move(s1, NULL, 0) == s1);
 
   return true;
 }
 
-int main(int, char**)
-{
+int main(int, char**) {
   test();
 
 #if TEST_STD_VER > 17

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/not_eof.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/not_eof.pass.cpp
index bebf917df20a049..af501bdadf9d4df 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/not_eof.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/not_eof.pass.cpp
@@ -19,13 +19,11 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::char_traits<wchar_t>::not_eof(L'a') == L'a');
-    assert(std::char_traits<wchar_t>::not_eof(L'A') == L'A');
-    assert(std::char_traits<wchar_t>::not_eof(0) == 0);
-    assert(std::char_traits<wchar_t>::not_eof(std::char_traits<wchar_t>::eof()) !=
-           std::char_traits<wchar_t>::eof());
+int main(int, char**) {
+  assert(std::char_traits<wchar_t>::not_eof(L'a') == L'a');
+  assert(std::char_traits<wchar_t>::not_eof(L'A') == L'A');
+  assert(std::char_traits<wchar_t>::not_eof(0) == 0);
+  assert(std::char_traits<wchar_t>::not_eof(std::char_traits<wchar_t>::eof()) != std::char_traits<wchar_t>::eof());
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/to_char_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/to_char_type.pass.cpp
index 4ded256b458243d..64f195187ee0564 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/to_char_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/to_char_type.pass.cpp
@@ -19,11 +19,10 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::char_traits<wchar_t>::to_char_type(L'a') == L'a');
-    assert(std::char_traits<wchar_t>::to_char_type(L'A') == L'A');
-    assert(std::char_traits<wchar_t>::to_char_type(0) == 0);
+int main(int, char**) {
+  assert(std::char_traits<wchar_t>::to_char_type(L'a') == L'a');
+  assert(std::char_traits<wchar_t>::to_char_type(L'A') == L'A');
+  assert(std::char_traits<wchar_t>::to_char_type(0) == 0);
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/to_int_type.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/to_int_type.pass.cpp
index b1259876b6731b9..174f8b1ed82c03b 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/to_int_type.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.wchar_t/to_int_type.pass.cpp
@@ -19,11 +19,10 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::char_traits<wchar_t>::to_int_type(L'a') == L'a');
-    assert(std::char_traits<wchar_t>::to_int_type(L'A') == L'A');
-    assert(std::char_traits<wchar_t>::to_int_type(0) == 0);
+int main(int, char**) {
+  assert(std::char_traits<wchar_t>::to_int_type(L'a') == L'a');
+  assert(std::char_traits<wchar_t>::to_int_type(L'A') == L'A');
+  assert(std::char_traits<wchar_t>::to_int_type(0) == 0);
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/char.traits/char.traits.typedefs/nothing_to_do.pass.cpp b/libcxx/test/std/strings/char.traits/char.traits.typedefs/nothing_to_do.pass.cpp
index 1f764da05d6b5f5..3e0d2a6570f42de 100644
--- a/libcxx/test/std/strings/char.traits/char.traits.typedefs/nothing_to_do.pass.cpp
+++ b/libcxx/test/std/strings/char.traits/char.traits.typedefs/nothing_to_do.pass.cpp
@@ -6,8 +6,4 @@
 //
 //===----------------------------------------------------------------------===//
 
-int main(int, char**)
-{
-
-  return 0;
-}
+int main(int, char**) { return 0; }

diff  --git a/libcxx/test/std/strings/string.conversions/stod.pass.cpp b/libcxx/test/std/strings/string.conversions/stod.pass.cpp
index dbf10a4948de455..bbe992fbc565e71 100644
--- a/libcxx/test/std/strings/string.conversions/stod.pass.cpp
+++ b/libcxx/test/std/strings/string.conversions/stod.pass.cpp
@@ -18,141 +18,140 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    // char
-    {
-        assert(std::stod("0") == 0);
-        assert(std::stod("-0") == 0);
-        assert(std::stod("-10") == -10);
-        assert(std::stod(" 10") == 10);
-        {
-            std::size_t idx = 0;
-            assert(std::stod("10g", &idx) == 10);
-            assert(idx == 2);
-        }
-        {
-            std::size_t idx = 0;
-            assert(std::stod("1.e60", &idx) == 1.e60);
-            assert(idx == 5);
-        }
-        {
-            std::size_t idx = 0;
-            assert(std::stod("INF", &idx) == INFINITY);
-            assert(idx == 3);
-        }
-        {
-            std::size_t idx = 0;
-            assert(std::isnan(std::stod("NAN", &idx)));
-            assert(idx == 3);
-        }
+int main(int, char**) {
+  // char
+  {
+    assert(std::stod("0") == 0);
+    assert(std::stod("-0") == 0);
+    assert(std::stod("-10") == -10);
+    assert(std::stod(" 10") == 10);
+    {
+      std::size_t idx = 0;
+      assert(std::stod("10g", &idx) == 10);
+      assert(idx == 2);
+    }
+    {
+      std::size_t idx = 0;
+      assert(std::stod("1.e60", &idx) == 1.e60);
+      assert(idx == 5);
+    }
+    {
+      std::size_t idx = 0;
+      assert(std::stod("INF", &idx) == INFINITY);
+      assert(idx == 3);
+    }
+    {
+      std::size_t idx = 0;
+      assert(std::isnan(std::stod("NAN", &idx)));
+      assert(idx == 3);
+    }
 
 #ifndef TEST_HAS_NO_EXCEPTIONS
-        {
-            std::size_t idx = 0;
-            try {
-                assert(std::stod("1.e360", &idx) == INFINITY);
-                assert(false);
-            } catch (const std::out_of_range&) {
-                assert(idx == 0);
-            }
-        }
-        {
-            std::size_t idx = 0;
-            try {
-                (void)std::stod("", &idx);
-                assert(false);
-            } catch (const std::invalid_argument&) {
-                assert(idx == 0);
-            }
-        }
-        {
-            std::size_t idx = 0;
-            try {
-                (void)std::stod("  - 8", &idx);
-                assert(false);
-            } catch (const std::invalid_argument&) {
-                assert(idx == 0);
-            }
-        }
-        {
-            std::size_t idx = 0;
-            try {
-                (void)std::stod("a1", &idx);
-                assert(false);
-            } catch (const std::invalid_argument&) {
-                assert(idx == 0);
-            }
-        }
-#endif // TEST_HAS_NO_EXCEPTIONS
+    {
+      std::size_t idx = 0;
+      try {
+        assert(std::stod("1.e360", &idx) == INFINITY);
+        assert(false);
+      } catch (const std::out_of_range&) {
+        assert(idx == 0);
+      }
+    }
+    {
+      std::size_t idx = 0;
+      try {
+        (void)std::stod("", &idx);
+        assert(false);
+      } catch (const std::invalid_argument&) {
+        assert(idx == 0);
+      }
+    }
+    {
+      std::size_t idx = 0;
+      try {
+        (void)std::stod("  - 8", &idx);
+        assert(false);
+      } catch (const std::invalid_argument&) {
+        assert(idx == 0);
+      }
+    }
+    {
+      std::size_t idx = 0;
+      try {
+        (void)std::stod("a1", &idx);
+        assert(false);
+      } catch (const std::invalid_argument&) {
+        assert(idx == 0);
+      }
     }
+#endif // TEST_HAS_NO_EXCEPTIONS
+  }
 
-    // wchar_t
+  // wchar_t
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  {
+    assert(std::stod(L"0") == 0);
+    assert(std::stod(L"-0") == 0);
+    assert(std::stod(L"-10.5") == -10.5);
+    assert(std::stod(L" 10") == 10);
     {
-        assert(std::stod(L"0") == 0);
-        assert(std::stod(L"-0") == 0);
-        assert(std::stod(L"-10.5") == -10.5);
-        assert(std::stod(L" 10") == 10);
-        {
-            std::size_t idx = 0;
-            assert(std::stod(L"10g", &idx) == 10);
-            assert(idx == 2);
-        }
-        {
-            std::size_t idx = 0;
-            assert(std::stod(L"1.e60", &idx) == 1.e60);
-            assert(idx == 5);
-        }
-        {
-            std::size_t idx = 0;
-            assert(std::stod(L"INF", &idx) == INFINITY);
-            assert(idx == 3);
-        }
-        {
-            std::size_t idx = 0;
-            assert(std::isnan(std::stod(L"NAN", &idx)));
-            assert(idx == 3);
-        }
-#ifndef TEST_HAS_NO_EXCEPTIONS
-        {
-            std::size_t idx = 0;
-            try {
-                assert(std::stod(L"1.e360", &idx) == INFINITY);
-                assert(false);
-            } catch (const std::out_of_range&) {
-                assert(idx == 0);
-            }
-        }
-        {
-            std::size_t idx = 0;
-            try {
-                (void)std::stod(L"", &idx);
-                assert(false);
-            } catch (const std::invalid_argument&) {
-                assert(idx == 0);
-            }
-        }
-        {
-            std::size_t idx = 0;
-            try {
-                (void)std::stod(L"  - 8", &idx);
-                assert(false);
-            } catch (const std::invalid_argument&) {
-                assert(idx == 0);
-            }
-        }
-        {
-            std::size_t idx = 0;
-            try {
-                (void)std::stod(L"a1", &idx);
-                assert(false);
-            } catch (const std::invalid_argument&) {
-                assert(idx == 0);
-            }
-        }
-#endif // TEST_HAS_NO_EXCEPTIONS
+      std::size_t idx = 0;
+      assert(std::stod(L"10g", &idx) == 10);
+      assert(idx == 2);
+    }
+    {
+      std::size_t idx = 0;
+      assert(std::stod(L"1.e60", &idx) == 1.e60);
+      assert(idx == 5);
+    }
+    {
+      std::size_t idx = 0;
+      assert(std::stod(L"INF", &idx) == INFINITY);
+      assert(idx == 3);
+    }
+    {
+      std::size_t idx = 0;
+      assert(std::isnan(std::stod(L"NAN", &idx)));
+      assert(idx == 3);
+    }
+#  ifndef TEST_HAS_NO_EXCEPTIONS
+    {
+      std::size_t idx = 0;
+      try {
+        assert(std::stod(L"1.e360", &idx) == INFINITY);
+        assert(false);
+      } catch (const std::out_of_range&) {
+        assert(idx == 0);
+      }
+    }
+    {
+      std::size_t idx = 0;
+      try {
+        (void)std::stod(L"", &idx);
+        assert(false);
+      } catch (const std::invalid_argument&) {
+        assert(idx == 0);
+      }
+    }
+    {
+      std::size_t idx = 0;
+      try {
+        (void)std::stod(L"  - 8", &idx);
+        assert(false);
+      } catch (const std::invalid_argument&) {
+        assert(idx == 0);
+      }
+    }
+    {
+      std::size_t idx = 0;
+      try {
+        (void)std::stod(L"a1", &idx);
+        assert(false);
+      } catch (const std::invalid_argument&) {
+        assert(idx == 0);
+      }
     }
+#  endif // TEST_HAS_NO_EXCEPTIONS
+  }
 #endif // TEST_HAS_NO_WIDE_CHARACTERS
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.conversions/stof.pass.cpp b/libcxx/test/std/strings/string.conversions/stof.pass.cpp
index d95e5d1b10a86f2..4ddeb8f95ede038 100644
--- a/libcxx/test/std/strings/string.conversions/stof.pass.cpp
+++ b/libcxx/test/std/strings/string.conversions/stof.pass.cpp
@@ -18,143 +18,142 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::stof("0") == 0);
-    assert(std::stof("-0") == 0);
-    assert(std::stof("-10") == -10);
-    assert(std::stof(" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stof("10g", &idx) == 10);
-        assert(idx == 2);
-    }
-    {
-        std::size_t idx = 0;
-        assert(std::stof("INF", &idx) == INFINITY);
-        assert(idx == 3);
-    }
-    {
-        std::size_t idx = 0;
-        assert(std::isnan(std::stof("NAN", &idx)));
-        assert(idx == 3);
-    }
+int main(int, char**) {
+  assert(std::stof("0") == 0);
+  assert(std::stof("-0") == 0);
+  assert(std::stof("-10") == -10);
+  assert(std::stof(" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stof("10g", &idx) == 10);
+    assert(idx == 2);
+  }
+  {
+    std::size_t idx = 0;
+    assert(std::stof("INF", &idx) == INFINITY);
+    assert(idx == 3);
+  }
+  {
+    std::size_t idx = 0;
+    assert(std::isnan(std::stof("NAN", &idx)));
+    assert(idx == 3);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::size_t idx = 0;
-        try {
-            assert(std::stof("1.e60", &idx) == INFINITY);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            assert(std::stof("1.e360", &idx) == INFINITY);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stof("", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stof("  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stof("a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
-    }
+  {
+    std::size_t idx = 0;
+    try {
+      assert(std::stof("1.e60", &idx) == INFINITY);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      assert(std::stof("1.e360", &idx) == INFINITY);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stof("", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stof("  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stof("a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
+    }
+  }
 #endif // TEST_HAS_NO_EXCEPTIONS
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    assert(std::stof(L"0") == 0);
-    assert(std::stof(L"-0") == 0);
-    assert(std::stof(L"-10.5") == -10.5);
-    assert(std::stof(L" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stof(L"10g", &idx) == 10);
-        assert(idx == 2);
-    }
-    {
-        std::size_t idx = 0;
-        assert(std::stof(L"INF", &idx) == INFINITY);
-        assert(idx == 3);
-    }
-    {
-        std::size_t idx = 0;
-        assert(std::isnan(std::stof(L"NAN", &idx)));
-        assert(idx == 3);
-    }
-#ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::size_t idx = 0;
-        try {
-            assert(std::stof(L"1.e60", &idx) == INFINITY);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            assert(std::stof(L"1.e360", &idx) == INFINITY);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stof(L"", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stof(L"  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stof(L"a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
-    }
-#endif // TEST_HAS_NO_EXCEPTIONS
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
+  assert(std::stof(L"0") == 0);
+  assert(std::stof(L"-0") == 0);
+  assert(std::stof(L"-10.5") == -10.5);
+  assert(std::stof(L" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stof(L"10g", &idx) == 10);
+    assert(idx == 2);
+  }
+  {
+    std::size_t idx = 0;
+    assert(std::stof(L"INF", &idx) == INFINITY);
+    assert(idx == 3);
+  }
+  {
+    std::size_t idx = 0;
+    assert(std::isnan(std::stof(L"NAN", &idx)));
+    assert(idx == 3);
+  }
+#  ifndef TEST_HAS_NO_EXCEPTIONS
+  {
+    std::size_t idx = 0;
+    try {
+      assert(std::stof(L"1.e60", &idx) == INFINITY);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      assert(std::stof(L"1.e360", &idx) == INFINITY);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stof(L"", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stof(L"  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stof(L"a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
+    }
+  }
+#  endif // TEST_HAS_NO_EXCEPTIONS
+#endif   // TEST_HAS_NO_WIDE_CHARACTERS
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.conversions/stoi.pass.cpp b/libcxx/test/std/strings/string.conversions/stoi.pass.cpp
index f7650e3d245f9ad..7fe0613b7fc58de 100644
--- a/libcxx/test/std/strings/string.conversions/stoi.pass.cpp
+++ b/libcxx/test/std/strings/string.conversions/stoi.pass.cpp
@@ -17,105 +17,102 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::stoi("0") == 0);
-    assert(std::stoi("-0") == 0);
-    assert(std::stoi("-10") == -10);
-    assert(std::stoi(" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stoi("10g", &idx, 16) == 16);
-        assert(idx == 2);
-    }
+int main(int, char**) {
+  assert(std::stoi("0") == 0);
+  assert(std::stoi("-0") == 0);
+  assert(std::stoi("-10") == -10);
+  assert(std::stoi(" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stoi("10g", &idx, 16) == 16);
+    assert(idx == 2);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    if (std::numeric_limits<long>::max() > std::numeric_limits<int>::max()) {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoi("0x100000000", &idx, 16);
-            assert(false);
-        } catch (const std::out_of_range&) {
-
-        }
+  if (std::numeric_limits<long>::max() > std::numeric_limits<int>::max()) {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoi("0x100000000", &idx, 16);
+      assert(false);
+    } catch (const std::out_of_range&) {
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoi("", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoi("", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoi("  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoi("  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoi("a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoi("a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
+  }
 #endif // TEST_HAS_NO_EXCEPTIONS
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    assert(std::stoi(L"0") == 0);
-    assert(std::stoi(L"-0") == 0);
-    assert(std::stoi(L"-10") == -10);
-    assert(std::stoi(L" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stoi(L"10g", &idx, 16) == 16);
-        assert(idx == 2);
-    }
-#ifndef TEST_HAS_NO_EXCEPTIONS
-    if (std::numeric_limits<long>::max() > std::numeric_limits<int>::max()) {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoi(L"0x100000000", &idx, 16);
-            assert(false);
-        } catch (const std::out_of_range&) {
-
-        }
+  assert(std::stoi(L"0") == 0);
+  assert(std::stoi(L"-0") == 0);
+  assert(std::stoi(L"-10") == -10);
+  assert(std::stoi(L" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stoi(L"10g", &idx, 16) == 16);
+    assert(idx == 2);
+  }
+#  ifndef TEST_HAS_NO_EXCEPTIONS
+  if (std::numeric_limits<long>::max() > std::numeric_limits<int>::max()) {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoi(L"0x100000000", &idx, 16);
+      assert(false);
+    } catch (const std::out_of_range&) {
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoi(L"", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoi(L"", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoi(L"  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoi(L"  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoi(L"a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoi(L"a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-#endif // TEST_HAS_NO_EXCEPTIONS
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
+  }
+#  endif // TEST_HAS_NO_EXCEPTIONS
+#endif   // TEST_HAS_NO_WIDE_CHARACTERS
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.conversions/stol.pass.cpp b/libcxx/test/std/strings/string.conversions/stol.pass.cpp
index 2356ae87a4e7fa7..1e47bd504957575 100644
--- a/libcxx/test/std/strings/string.conversions/stol.pass.cpp
+++ b/libcxx/test/std/strings/string.conversions/stol.pass.cpp
@@ -17,107 +17,106 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::stol("0") == 0);
-    assert(std::stol("-0") == 0);
-    assert(std::stol("-10") == -10);
-    assert(std::stol(" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stol("10g", &idx, 16) == 16);
-        assert(idx == 2);
-    }
+int main(int, char**) {
+  assert(std::stol("0") == 0);
+  assert(std::stol("-0") == 0);
+  assert(std::stol("-10") == -10);
+  assert(std::stol(" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stol("10g", &idx, 16) == 16);
+    assert(idx == 2);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stol("", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stol("", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stol("  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stol("  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stol("a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stol("a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            // LWG#2009 and PR14919
-            (void)std::stol("9999999999999999999999999999999999999999999999999", &idx);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      // LWG#2009 and PR14919
+      (void)std::stol("9999999999999999999999999999999999999999999999999", &idx);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
     }
+  }
 #endif // TEST_HAS_NO_EXCEPTIONS
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    assert(std::stol(L"0") == 0);
-    assert(std::stol(L"-0") == 0);
-    assert(std::stol(L"-10") == -10);
-    assert(std::stol(L" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stol(L"10g", &idx, 16) == 16);
-        assert(idx == 2);
-    }
-#ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stol(L"", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  assert(std::stol(L"0") == 0);
+  assert(std::stol(L"-0") == 0);
+  assert(std::stol(L"-10") == -10);
+  assert(std::stol(L" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stol(L"10g", &idx, 16) == 16);
+    assert(idx == 2);
+  }
+#  ifndef TEST_HAS_NO_EXCEPTIONS
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stol(L"", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stol(L"  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stol(L"  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stol(L"a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stol(L"a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            // LWG#2009 and PR14919
-            (void)std::stol(L"9999999999999999999999999999999999999999999999999", &idx);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      // LWG#2009 and PR14919
+      (void)std::stol(L"9999999999999999999999999999999999999999999999999", &idx);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
     }
-#endif // TEST_HAS_NO_EXCEPTIONS
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
+  }
+#  endif // TEST_HAS_NO_EXCEPTIONS
+#endif   // TEST_HAS_NO_WIDE_CHARACTERS
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.conversions/stold.pass.cpp b/libcxx/test/std/strings/string.conversions/stold.pass.cpp
index dc9d3c607ae376f..ef756982ee9a036 100644
--- a/libcxx/test/std/strings/string.conversions/stold.pass.cpp
+++ b/libcxx/test/std/strings/string.conversions/stold.pass.cpp
@@ -18,136 +18,135 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::stold("0") == 0);
-    assert(std::stold("-0") == 0);
-    assert(std::stold("-10") == -10);
-    assert(std::stold(" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stold("10g", &idx) == 10);
-        assert(idx == 2);
-    }
-    {
-        std::size_t idx = 0;
-        assert(std::stold("1.e60", &idx) == 1.e60L);
-        assert(idx == 5);
-    }
-    {
-        std::size_t idx = 0;
-        assert(std::stold("INF", &idx) == INFINITY);
-        assert(idx == 3);
-    }
-    {
-        std::size_t idx = 0;
-        assert(std::isnan(std::stold("NAN", &idx)));
-        assert(idx == 3);
-    }
+int main(int, char**) {
+  assert(std::stold("0") == 0);
+  assert(std::stold("-0") == 0);
+  assert(std::stold("-10") == -10);
+  assert(std::stold(" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stold("10g", &idx) == 10);
+    assert(idx == 2);
+  }
+  {
+    std::size_t idx = 0;
+    assert(std::stold("1.e60", &idx) == 1.e60L);
+    assert(idx == 5);
+  }
+  {
+    std::size_t idx = 0;
+    assert(std::stold("INF", &idx) == INFINITY);
+    assert(idx == 3);
+  }
+  {
+    std::size_t idx = 0;
+    assert(std::isnan(std::stold("NAN", &idx)));
+    assert(idx == 3);
+  }
 
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stold("", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stold("  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stold("a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            assert(std::stold("1.e6000", &idx) == INFINITY);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
-    }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stold("", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stold("  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stold("a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      assert(std::stold("1.e6000", &idx) == INFINITY);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
+    }
+  }
 #endif // TEST_HAS_NO_EXCEPTIONS
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    assert(std::stold(L"0") == 0);
-    assert(std::stold(L"-0") == 0);
-    assert(std::stold(L"-10.5") == -10.5);
-    assert(std::stold(L" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stold(L"10g", &idx) == 10);
-        assert(idx == 2);
-    }
-    {
-        std::size_t idx = 0;
-        assert(std::stold(L"1.e60", &idx) == 1.e60L);
-        assert(idx == 5);
-    }
-    {
-        std::size_t idx = 0;
-        assert(std::stold(L"INF", &idx) == INFINITY);
-        assert(idx == 3);
-    }
-    {
-        std::size_t idx = 0;
-        assert(std::isnan(std::stold(L"NAN", &idx)));
-        assert(idx == 3);
-    }
-#ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stold(L"", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stold(L"  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stold(L"a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
-    }
-    {
-        std::size_t idx = 0;
-        try {
-            assert(std::stold(L"1.e6000", &idx) == INFINITY);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
-    }
-#endif // TEST_HAS_NO_EXCEPTIONS
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
+  assert(std::stold(L"0") == 0);
+  assert(std::stold(L"-0") == 0);
+  assert(std::stold(L"-10.5") == -10.5);
+  assert(std::stold(L" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stold(L"10g", &idx) == 10);
+    assert(idx == 2);
+  }
+  {
+    std::size_t idx = 0;
+    assert(std::stold(L"1.e60", &idx) == 1.e60L);
+    assert(idx == 5);
+  }
+  {
+    std::size_t idx = 0;
+    assert(std::stold(L"INF", &idx) == INFINITY);
+    assert(idx == 3);
+  }
+  {
+    std::size_t idx = 0;
+    assert(std::isnan(std::stold(L"NAN", &idx)));
+    assert(idx == 3);
+  }
+#  ifndef TEST_HAS_NO_EXCEPTIONS
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stold(L"", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stold(L"  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stold(L"a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
+    }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      assert(std::stold(L"1.e6000", &idx) == INFINITY);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
+    }
+  }
+#  endif // TEST_HAS_NO_EXCEPTIONS
+#endif   // TEST_HAS_NO_WIDE_CHARACTERS
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.conversions/stoll.pass.cpp b/libcxx/test/std/strings/string.conversions/stoll.pass.cpp
index fc6bd136cf4f3ad..12024a70aee32ae 100644
--- a/libcxx/test/std/strings/string.conversions/stoll.pass.cpp
+++ b/libcxx/test/std/strings/string.conversions/stoll.pass.cpp
@@ -17,107 +17,106 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::stoll("0") == 0);
-    assert(std::stoll("-0") == 0);
-    assert(std::stoll("-10") == -10);
-    assert(std::stoll(" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stoll("10g", &idx, 16) == 16);
-        assert(idx == 2);
-    }
+int main(int, char**) {
+  assert(std::stoll("0") == 0);
+  assert(std::stoll("-0") == 0);
+  assert(std::stoll("-10") == -10);
+  assert(std::stoll(" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stoll("10g", &idx, 16) == 16);
+    assert(idx == 2);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoll("", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoll("", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoll("  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoll("  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoll("a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoll("a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            // LWG#2009 and PR14919
-            (void)std::stoll("99999999999999999999999999", &idx);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      // LWG#2009 and PR14919
+      (void)std::stoll("99999999999999999999999999", &idx);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
     }
+  }
 #endif // TEST_HAS_NO_EXCEPTIONS
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    assert(std::stoll(L"0") == 0);
-    assert(std::stoll(L"-0") == 0);
-    assert(std::stoll(L"-10") == -10);
-    assert(std::stoll(L" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stoll(L"10g", &idx, 16) == 16);
-        assert(idx == 2);
-    }
-#ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoll(L"", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  assert(std::stoll(L"0") == 0);
+  assert(std::stoll(L"-0") == 0);
+  assert(std::stoll(L"-10") == -10);
+  assert(std::stoll(L" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stoll(L"10g", &idx, 16) == 16);
+    assert(idx == 2);
+  }
+#  ifndef TEST_HAS_NO_EXCEPTIONS
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoll(L"", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoll(L"  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoll(L"  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoll(L"a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoll(L"a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            // LWG#2009 and PR14919
-            (void)std::stoll(L"99999999999999999999999999", &idx);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      // LWG#2009 and PR14919
+      (void)std::stoll(L"99999999999999999999999999", &idx);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
     }
-#endif // TEST_HAS_NO_EXCEPTIONS
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
+  }
+#  endif // TEST_HAS_NO_EXCEPTIONS
+#endif   // TEST_HAS_NO_WIDE_CHARACTERS
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.conversions/stoul.pass.cpp b/libcxx/test/std/strings/string.conversions/stoul.pass.cpp
index a8d23f92959aaed..edc4a795baa2181 100644
--- a/libcxx/test/std/strings/string.conversions/stoul.pass.cpp
+++ b/libcxx/test/std/strings/string.conversions/stoul.pass.cpp
@@ -17,105 +17,104 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::stoul("0") == 0);
-    assert(std::stoul("-0") == 0);
-    assert(std::stoul(" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stoul("10g", &idx, 16) == 16);
-        assert(idx == 2);
-    }
+int main(int, char**) {
+  assert(std::stoul("0") == 0);
+  assert(std::stoul("-0") == 0);
+  assert(std::stoul(" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stoul("10g", &idx, 16) == 16);
+    assert(idx == 2);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoul("", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoul("", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoul("  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoul("  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoul("a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoul("a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            // LWG#2009 and PR14919
-            (void)std::stoul("9999999999999999999999999999999999999999999999999", &idx);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      // LWG#2009 and PR14919
+      (void)std::stoul("9999999999999999999999999999999999999999999999999", &idx);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
     }
+  }
 #endif // TEST_HAS_NO_EXCEPTIONS
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    assert(std::stoul(L"0") == 0);
-    assert(std::stoul(L"-0") == 0);
-    assert(std::stoul(L" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stoul(L"10g", &idx, 16) == 16);
-        assert(idx == 2);
-    }
-#ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoul(L"", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  assert(std::stoul(L"0") == 0);
+  assert(std::stoul(L"-0") == 0);
+  assert(std::stoul(L" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stoul(L"10g", &idx, 16) == 16);
+    assert(idx == 2);
+  }
+#  ifndef TEST_HAS_NO_EXCEPTIONS
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoul(L"", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoul(L"  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoul(L"  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoul(L"a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoul(L"a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            // LWG#2009 and PR14919
-            (void)std::stoul(L"9999999999999999999999999999999999999999999999999", &idx);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      // LWG#2009 and PR14919
+      (void)std::stoul(L"9999999999999999999999999999999999999999999999999", &idx);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
     }
-#endif // TEST_HAS_NO_EXCEPTIONS
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
+  }
+#  endif // TEST_HAS_NO_EXCEPTIONS
+#endif   // TEST_HAS_NO_WIDE_CHARACTERS
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.conversions/stoull.pass.cpp b/libcxx/test/std/strings/string.conversions/stoull.pass.cpp
index 2757cea130872e5..0a91f332c83d44a 100644
--- a/libcxx/test/std/strings/string.conversions/stoull.pass.cpp
+++ b/libcxx/test/std/strings/string.conversions/stoull.pass.cpp
@@ -17,105 +17,104 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    assert(std::stoull("0") == 0);
-    assert(std::stoull("-0") == 0);
-    assert(std::stoull(" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stoull("10g", &idx, 16) == 16);
-        assert(idx == 2);
-    }
+int main(int, char**) {
+  assert(std::stoull("0") == 0);
+  assert(std::stoull("-0") == 0);
+  assert(std::stoull(" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stoull("10g", &idx, 16) == 16);
+    assert(idx == 2);
+  }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoull("", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoull("", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoull("  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoull("  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoull("a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoull("a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            // LWG#2009 and PR14919
-            (void)std::stoull("9999999999999999999999999999999999999999999999999", &idx);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      // LWG#2009 and PR14919
+      (void)std::stoull("9999999999999999999999999999999999999999999999999", &idx);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
     }
+  }
 #endif // TEST_HAS_NO_EXCEPTIONS
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    assert(std::stoull(L"0") == 0);
-    assert(std::stoull(L"-0") == 0);
-    assert(std::stoull(L" 10") == 10);
-    {
-        std::size_t idx = 0;
-        assert(std::stoull(L"10g", &idx, 16) == 16);
-        assert(idx == 2);
-    }
-#ifndef TEST_HAS_NO_EXCEPTIONS
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoull(L"", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  assert(std::stoull(L"0") == 0);
+  assert(std::stoull(L"-0") == 0);
+  assert(std::stoull(L" 10") == 10);
+  {
+    std::size_t idx = 0;
+    assert(std::stoull(L"10g", &idx, 16) == 16);
+    assert(idx == 2);
+  }
+#  ifndef TEST_HAS_NO_EXCEPTIONS
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoull(L"", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoull(L"  - 8", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoull(L"  - 8", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            (void)std::stoull(L"a1", &idx);
-            assert(false);
-        } catch (const std::invalid_argument&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      (void)std::stoull(L"a1", &idx);
+      assert(false);
+    } catch (const std::invalid_argument&) {
+      assert(idx == 0);
     }
-    {
-        std::size_t idx = 0;
-        try {
-            // LWG#2009 and PR14919
-            (void)std::stoull(L"9999999999999999999999999999999999999999999999999", &idx);
-            assert(false);
-        } catch (const std::out_of_range&) {
-            assert(idx == 0);
-        }
+  }
+  {
+    std::size_t idx = 0;
+    try {
+      // LWG#2009 and PR14919
+      (void)std::stoull(L"9999999999999999999999999999999999999999999999999", &idx);
+      assert(false);
+    } catch (const std::out_of_range&) {
+      assert(idx == 0);
     }
-#endif // TEST_HAS_NO_EXCEPTIONS
-#endif // TEST_HAS_NO_WIDE_CHARACTERS
+  }
+#  endif // TEST_HAS_NO_EXCEPTIONS
+#endif   // TEST_HAS_NO_WIDE_CHARACTERS
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.conversions/to_string.pass.cpp b/libcxx/test/std/strings/string.conversions/to_string.pass.cpp
index 3de0232e796ed83..4731a072e89108f 100644
--- a/libcxx/test/std/strings/string.conversions/to_string.pass.cpp
+++ b/libcxx/test/std/strings/string.conversions/to_string.pass.cpp
@@ -26,99 +26,92 @@
 #include "test_macros.h"
 
 template <class T>
-void
-test_signed()
-{
-    {
-        std::string s = std::to_string(T(0));
-        assert(s.size() == 1);
-        assert(s[s.size()] == 0);
-        assert(s == "0");
-    }
-    {
-        std::string s = std::to_string(T(12345));
-        assert(s.size() == 5);
-        assert(s[s.size()] == 0);
-        assert(s == "12345");
-    }
-    {
-        std::string s = std::to_string(T(-12345));
-        assert(s.size() == 6);
-        assert(s[s.size()] == 0);
-        assert(s == "-12345");
-    }
-    {
-        std::string s = std::to_string(std::numeric_limits<T>::max());
-        assert(s.size() == std::numeric_limits<T>::digits10 + 1);
-        T t = parse_integer<T>(s);
-        assert(t == std::numeric_limits<T>::max());
-    }
-    {
-        std::string s = std::to_string(std::numeric_limits<T>::min());
-        T t = parse_integer<T>(s);
-        assert(t == std::numeric_limits<T>::min());
-    }
+void test_signed() {
+  {
+    std::string s = std::to_string(T(0));
+    assert(s.size() == 1);
+    assert(s[s.size()] == 0);
+    assert(s == "0");
+  }
+  {
+    std::string s = std::to_string(T(12345));
+    assert(s.size() == 5);
+    assert(s[s.size()] == 0);
+    assert(s == "12345");
+  }
+  {
+    std::string s = std::to_string(T(-12345));
+    assert(s.size() == 6);
+    assert(s[s.size()] == 0);
+    assert(s == "-12345");
+  }
+  {
+    std::string s = std::to_string(std::numeric_limits<T>::max());
+    assert(s.size() == std::numeric_limits<T>::digits10 + 1);
+    T t = parse_integer<T>(s);
+    assert(t == std::numeric_limits<T>::max());
+  }
+  {
+    std::string s = std::to_string(std::numeric_limits<T>::min());
+    T t           = parse_integer<T>(s);
+    assert(t == std::numeric_limits<T>::min());
+  }
 }
 
 template <class T>
-void
-test_unsigned()
-{
-    {
-        std::string s = std::to_string(T(0));
-        assert(s.size() == 1);
-        assert(s[s.size()] == 0);
-        assert(s == "0");
-    }
-    {
-        std::string s = std::to_string(T(12345));
-        assert(s.size() == 5);
-        assert(s[s.size()] == 0);
-        assert(s == "12345");
-    }
-    {
-        std::string s = std::to_string(std::numeric_limits<T>::max());
-        assert(s.size() == std::numeric_limits<T>::digits10 + 1);
-        T t = parse_integer<T>(s);
-        assert(t == std::numeric_limits<T>::max());
-    }
+void test_unsigned() {
+  {
+    std::string s = std::to_string(T(0));
+    assert(s.size() == 1);
+    assert(s[s.size()] == 0);
+    assert(s == "0");
+  }
+  {
+    std::string s = std::to_string(T(12345));
+    assert(s.size() == 5);
+    assert(s[s.size()] == 0);
+    assert(s == "12345");
+  }
+  {
+    std::string s = std::to_string(std::numeric_limits<T>::max());
+    assert(s.size() == std::numeric_limits<T>::digits10 + 1);
+    T t = parse_integer<T>(s);
+    assert(t == std::numeric_limits<T>::max());
+  }
 }
 
 template <class T>
-void
-test_float()
-{
-    {
-        std::string s = std::to_string(T(0));
-        assert(s.size() == 8);
-        assert(s[s.size()] == 0);
-        assert(s == "0.000000");
-    }
-    {
-        std::string s = std::to_string(T(12345));
-        assert(s.size() == 12);
-        assert(s[s.size()] == 0);
-        assert(s == "12345.000000");
-    }
-    {
-        std::string s = std::to_string(T(-12345));
-        assert(s.size() == 13);
-        assert(s[s.size()] == 0);
-        assert(s == "-12345.000000");
-    }
+void test_float() {
+  {
+    std::string s = std::to_string(T(0));
+    assert(s.size() == 8);
+    assert(s[s.size()] == 0);
+    assert(s == "0.000000");
+  }
+  {
+    std::string s = std::to_string(T(12345));
+    assert(s.size() == 12);
+    assert(s[s.size()] == 0);
+    assert(s == "12345.000000");
+  }
+  {
+    std::string s = std::to_string(T(-12345));
+    assert(s.size() == 13);
+    assert(s[s.size()] == 0);
+    assert(s == "-12345.000000");
+  }
 }
 
-int main(int, char**)
-{
-    test_signed<int>();
-    test_signed<long>();
-    test_signed<long long>();
-    test_unsigned<unsigned>();
-    test_unsigned<unsigned long>();
-    test_unsigned<unsigned long long>();
-    test_float<float>();
-    test_float<double>();
-    test_float<long double>();
+int main(int, char**) {
+  test_signed<int>();
+  test_signed<long>();
+  test_signed<long long>();
+  test_unsigned<unsigned>();
+  test_unsigned<unsigned long>();
+  test_unsigned<unsigned long long>();
+  test_float<float>();
+  test_float<double>();
+  test_float<long double>();
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.conversions/to_wstring.pass.cpp b/libcxx/test/std/strings/string.conversions/to_wstring.pass.cpp
index 530982defd4cd18..fff5ede848b57a1 100644
--- a/libcxx/test/std/strings/string.conversions/to_wstring.pass.cpp
+++ b/libcxx/test/std/strings/string.conversions/to_wstring.pass.cpp
@@ -28,99 +28,92 @@
 #include "test_macros.h"
 
 template <class T>
-void
-test_signed()
-{
-    {
-        std::wstring s = std::to_wstring(T(0));
-        assert(s.size() == 1);
-        assert(s[s.size()] == 0);
-        assert(s == L"0");
-    }
-    {
-        std::wstring s = std::to_wstring(T(12345));
-        assert(s.size() == 5);
-        assert(s[s.size()] == 0);
-        assert(s == L"12345");
-    }
-    {
-        std::wstring s = std::to_wstring(T(-12345));
-        assert(s.size() == 6);
-        assert(s[s.size()] == 0);
-        assert(s == L"-12345");
-    }
-    {
-        std::wstring s = std::to_wstring(std::numeric_limits<T>::max());
-        assert(s.size() == std::numeric_limits<T>::digits10 + 1);
-        T t = parse_integer<T>(s);
-        assert(t == std::numeric_limits<T>::max());
-    }
-    {
-        std::wstring s = std::to_wstring(std::numeric_limits<T>::min());
-        T t = parse_integer<T>(s);
-        assert(t == std::numeric_limits<T>::min());
-    }
+void test_signed() {
+  {
+    std::wstring s = std::to_wstring(T(0));
+    assert(s.size() == 1);
+    assert(s[s.size()] == 0);
+    assert(s == L"0");
+  }
+  {
+    std::wstring s = std::to_wstring(T(12345));
+    assert(s.size() == 5);
+    assert(s[s.size()] == 0);
+    assert(s == L"12345");
+  }
+  {
+    std::wstring s = std::to_wstring(T(-12345));
+    assert(s.size() == 6);
+    assert(s[s.size()] == 0);
+    assert(s == L"-12345");
+  }
+  {
+    std::wstring s = std::to_wstring(std::numeric_limits<T>::max());
+    assert(s.size() == std::numeric_limits<T>::digits10 + 1);
+    T t = parse_integer<T>(s);
+    assert(t == std::numeric_limits<T>::max());
+  }
+  {
+    std::wstring s = std::to_wstring(std::numeric_limits<T>::min());
+    T t            = parse_integer<T>(s);
+    assert(t == std::numeric_limits<T>::min());
+  }
 }
 
 template <class T>
-void
-test_unsigned()
-{
-    {
-        std::wstring s = std::to_wstring(T(0));
-        assert(s.size() == 1);
-        assert(s[s.size()] == 0);
-        assert(s == L"0");
-    }
-    {
-        std::wstring s = std::to_wstring(T(12345));
-        assert(s.size() == 5);
-        assert(s[s.size()] == 0);
-        assert(s == L"12345");
-    }
-    {
-        std::wstring s = std::to_wstring(std::numeric_limits<T>::max());
-        assert(s.size() == std::numeric_limits<T>::digits10 + 1);
-        T t = parse_integer<T>(s);
-        assert(t == std::numeric_limits<T>::max());
-    }
+void test_unsigned() {
+  {
+    std::wstring s = std::to_wstring(T(0));
+    assert(s.size() == 1);
+    assert(s[s.size()] == 0);
+    assert(s == L"0");
+  }
+  {
+    std::wstring s = std::to_wstring(T(12345));
+    assert(s.size() == 5);
+    assert(s[s.size()] == 0);
+    assert(s == L"12345");
+  }
+  {
+    std::wstring s = std::to_wstring(std::numeric_limits<T>::max());
+    assert(s.size() == std::numeric_limits<T>::digits10 + 1);
+    T t = parse_integer<T>(s);
+    assert(t == std::numeric_limits<T>::max());
+  }
 }
 
 template <class T>
-void
-test_float()
-{
-    {
-        std::wstring s = std::to_wstring(T(0));
-        assert(s.size() == 8);
-        assert(s[s.size()] == 0);
-        assert(s == L"0.000000");
-    }
-    {
-        std::wstring s = std::to_wstring(T(12345));
-        assert(s.size() == 12);
-        assert(s[s.size()] == 0);
-        assert(s == L"12345.000000");
-    }
-    {
-        std::wstring s = std::to_wstring(T(-12345));
-        assert(s.size() == 13);
-        assert(s[s.size()] == 0);
-        assert(s == L"-12345.000000");
-    }
+void test_float() {
+  {
+    std::wstring s = std::to_wstring(T(0));
+    assert(s.size() == 8);
+    assert(s[s.size()] == 0);
+    assert(s == L"0.000000");
+  }
+  {
+    std::wstring s = std::to_wstring(T(12345));
+    assert(s.size() == 12);
+    assert(s[s.size()] == 0);
+    assert(s == L"12345.000000");
+  }
+  {
+    std::wstring s = std::to_wstring(T(-12345));
+    assert(s.size() == 13);
+    assert(s[s.size()] == 0);
+    assert(s == L"-12345.000000");
+  }
 }
 
-int main(int, char**)
-{
-    test_signed<int>();
-    test_signed<long>();
-    test_signed<long long>();
-    test_unsigned<unsigned>();
-    test_unsigned<unsigned long>();
-    test_unsigned<unsigned long long>();
-    test_float<float>();
-    test_float<double>();
-    test_float<long double>();
+int main(int, char**) {
+  test_signed<int>();
+  test_signed<long>();
+  test_signed<long long>();
+  test_unsigned<unsigned>();
+  test_unsigned<unsigned long>();
+  test_unsigned<unsigned long long>();
+  test_float<float>();
+  test_float<double>();
+  test_float<long double>();
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/char.bad.verify.cpp b/libcxx/test/std/strings/string.view/char.bad.verify.cpp
index b1794bc3037496a..c9002102155a476 100644
--- a/libcxx/test/std/strings/string.view/char.bad.verify.cpp
+++ b/libcxx/test/std/strings/string.view/char.bad.verify.cpp
@@ -15,42 +15,42 @@
 #include "../basic.string/test_traits.h"
 
 struct NotTrivial {
-    NotTrivial() : value(3) {}
-    int value;
+  NotTrivial() : value(3) {}
+  int value;
 };
 
 struct NotStandardLayout {
 public:
-    NotStandardLayout() : one(1), two(2) {}
-    int sum() const { return one + two; } // silences "unused field 'two' warning"
-    int one;
+  NotStandardLayout() : one(1), two(2) {}
+  int sum() const { return one + two; } // silences "unused field 'two' warning"
+  int one;
+
 private:
-    int two;
+  int two;
 };
 
-int main(int, char**)
-{
-    {
-//  array
+int main(int, char**) {
+  {
+    //  array
     typedef char C[3];
     static_assert(std::is_array<C>::value, "");
     std::basic_string_view<C, test_traits<C> > sv;
-//  expected-error-re at string_view:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string_view must not be an array}}
-    }
+    //  expected-error-re at string_view:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string_view must not be an array}}
+  }
 
-    {
-//  not trivial
+  {
+    //  not trivial
     static_assert(!std::is_trivial<NotTrivial>::value, "");
     std::basic_string_view<NotTrivial, test_traits<NotTrivial> > sv;
-//  expected-error-re at string_view:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string_view must be trivial}}
-    }
+    //  expected-error-re at string_view:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string_view must be trivial}}
+  }
 
-    {
-//  not standard layout
+  {
+    //  not standard layout
     static_assert(!std::is_standard_layout<NotStandardLayout>::value, "");
     std::basic_string_view<NotStandardLayout, test_traits<NotStandardLayout> > sv;
-//  expected-error-re at string_view:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string_view must be standard-layout}}
-    }
+    //  expected-error-re at string_view:* {{{{(static_assert|static assertion)}} failed{{.*}}Character type of basic_string_view must be standard-layout}}
+  }
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/strings/string.view/range_concept_conformance.compile.pass.cpp
index a845c5eff397635..73a4dd023a88e30 100644
--- a/libcxx/test/std/strings/string.view/range_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/strings/string.view/range_concept_conformance.compile.pass.cpp
@@ -15,8 +15,6 @@
 #include <concepts>
 #include <ranges>
 
-
-
 static_assert(std::same_as<std::ranges::iterator_t<std::string_view>, std::string_view::iterator>);
 static_assert(std::ranges::common_range<std::string_view>);
 static_assert(std::ranges::random_access_range<std::string_view>);

diff  --git a/libcxx/test/std/strings/string.view/string.view.access/at.pass.cpp b/libcxx/test/std/strings/string.view/string.view.access/at.pass.cpp
index c01017493f3e6c5..95d37932f4060c3 100644
--- a/libcxx/test/std/strings/string.view/string.view.access/at.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.access/at.pass.cpp
@@ -17,44 +17,48 @@
 #include "test_macros.h"
 
 template <typename CharT>
-void test ( const CharT *s, std::size_t len ) {
-    std::basic_string_view<CharT> sv ( s, len );
-    assert ( sv.length() == len );
-    for ( std::size_t i = 0; i < len; ++i ) {
-        assert (  sv.at(i) == s[i] );
-        assert ( &sv.at(i) == s + i );
-    }
+void test(const CharT* s, std::size_t len) {
+  std::basic_string_view<CharT> sv(s, len);
+  assert(sv.length() == len);
+  for (std::size_t i = 0; i < len; ++i) {
+    assert(sv.at(i) == s[i]);
+    assert(&sv.at(i) == s + i);
+  }
 
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    try { (void)sv.at(len); } catch ( const std::out_of_range & ) { return ; }
-    assert ( false );
+  try {
+    (void)sv.at(len);
+  } catch (const std::out_of_range&) {
+    return;
+  }
+  assert(false);
 #endif
 }
 
 int main(int, char**) {
-    test ( "ABCDE", 5 );
-    test ( "a", 1 );
+  test("ABCDE", 5);
+  test("a", 1);
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test ( L"ABCDE", 5 );
-    test ( L"a", 1 );
+  test(L"ABCDE", 5);
+  test(L"a", 1);
 #endif
 
 #if TEST_STD_VER >= 11
-    test ( u"ABCDE", 5 );
-    test ( u"a", 1 );
+  test(u"ABCDE", 5);
+  test(u"a", 1);
 
-    test ( U"ABCDE", 5 );
-    test ( U"a", 1 );
+  test(U"ABCDE", 5);
+  test(U"a", 1);
 #endif
 
 #if TEST_STD_VER >= 11
-    {
-    constexpr std::basic_string_view<char> sv ( "ABC", 2 );
-    static_assert ( sv.length() ==  2,  "" );
-    static_assert ( sv.at(0) == 'A', "" );
-    static_assert ( sv.at(1) == 'B', "" );
-    }
+  {
+    constexpr std::basic_string_view<char> sv("ABC", 2);
+    static_assert(sv.length() == 2, "");
+    static_assert(sv.at(0) == 'A', "");
+    static_assert(sv.at(1) == 'B', "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.access/back.pass.cpp b/libcxx/test/std/strings/string.view/string.view.access/back.pass.cpp
index e63b80daeb03279..07861b7a89dd469 100644
--- a/libcxx/test/std/strings/string.view/string.view.access/back.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.access/back.pass.cpp
@@ -18,39 +18,39 @@
 #include "test_macros.h"
 
 template <typename CharT>
-bool test ( const CharT *s, std::size_t len ) {
-    typedef std::basic_string_view<CharT> SV;
-    SV sv ( s, len );
-    ASSERT_SAME_TYPE(decltype(sv.back()), typename SV::const_reference);
-    LIBCPP_ASSERT_NOEXCEPT(   sv.back());
-    assert ( sv.length() == len );
-    assert ( sv.back() == s[len-1] );
-    return &sv.back() == s + len - 1;
-    }
+bool test(const CharT* s, std::size_t len) {
+  typedef std::basic_string_view<CharT> SV;
+  SV sv(s, len);
+  ASSERT_SAME_TYPE(decltype(sv.back()), typename SV::const_reference);
+  LIBCPP_ASSERT_NOEXCEPT(sv.back());
+  assert(sv.length() == len);
+  assert(sv.back() == s[len - 1]);
+  return &sv.back() == s + len - 1;
+}
 
 int main(int, char**) {
-    assert ( test ( "ABCDE", 5 ));
-    assert ( test ( "a", 1 ));
+  assert(test("ABCDE", 5));
+  assert(test("a", 1));
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    assert ( test ( L"ABCDE", 5 ));
-    assert ( test ( L"a", 1 ));
+  assert(test(L"ABCDE", 5));
+  assert(test(L"a", 1));
 #endif
 
 #if TEST_STD_VER >= 11
-    assert ( test ( u"ABCDE", 5 ));
-    assert ( test ( u"a", 1 ));
+  assert(test(u"ABCDE", 5));
+  assert(test(u"a", 1));
 
-    assert ( test ( U"ABCDE", 5 ));
-    assert ( test ( U"a", 1 ));
+  assert(test(U"ABCDE", 5));
+  assert(test(U"a", 1));
 #endif
 
 #if TEST_STD_VER >= 11
-    {
-    constexpr std::basic_string_view<char> sv ( "ABC", 2 );
-    static_assert ( sv.length() ==  2,  "" );
-    static_assert ( sv.back()  == 'B', "" );
-    }
+  {
+    constexpr std::basic_string_view<char> sv("ABC", 2);
+    static_assert(sv.length() == 2, "");
+    static_assert(sv.back() == 'B', "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.access/data.pass.cpp b/libcxx/test/std/strings/string.view/string.view.access/data.pass.cpp
index bf5485b96826c91..b503e2af035735e 100644
--- a/libcxx/test/std/strings/string.view/string.view.access/data.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.access/data.pass.cpp
@@ -19,40 +19,40 @@
 #include "test_macros.h"
 
 template <typename CharT>
-void test ( const CharT *s, std::size_t len ) {
-    std::basic_string_view<CharT> sv ( s, len );
-    assert ( sv.length() == len );
-    assert ( sv.data() == s );
+void test(const CharT* s, std::size_t len) {
+  std::basic_string_view<CharT> sv(s, len);
+  assert(sv.length() == len);
+  assert(sv.data() == s);
 #if TEST_STD_VER > 14
-//  make sure we pick up std::data, too!
-    assert ( sv.data() == std::data(sv));
+  //  make sure we pick up std::data, too!
+  assert(sv.data() == std::data(sv));
 #endif
-    }
+}
 
 int main(int, char**) {
-    test ( "ABCDE", 5 );
-    test ( "a", 1 );
+  test("ABCDE", 5);
+  test("a", 1);
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test ( L"ABCDE", 5 );
-    test ( L"a", 1 );
+  test(L"ABCDE", 5);
+  test(L"a", 1);
 #endif
 
 #if TEST_STD_VER >= 11
-    test ( u"ABCDE", 5 );
-    test ( u"a", 1 );
+  test(u"ABCDE", 5);
+  test(u"a", 1);
 
-    test ( U"ABCDE", 5 );
-    test ( U"a", 1 );
+  test(U"ABCDE", 5);
+  test(U"a", 1);
 #endif
 
 #if TEST_STD_VER > 11
-    {
-    constexpr const char *s = "ABC";
-    constexpr std::basic_string_view<char> sv( s, 2 );
-    static_assert( sv.length() ==  2,  "" );
-    static_assert( sv.data() == s, "" );
-    }
+  {
+    constexpr const char* s = "ABC";
+    constexpr std::basic_string_view<char> sv(s, 2);
+    static_assert(sv.length() == 2, "");
+    static_assert(sv.data() == s, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.access/front.pass.cpp b/libcxx/test/std/strings/string.view/string.view.access/front.pass.cpp
index 72aa0258bbc0407..45edd3dc16b070f 100644
--- a/libcxx/test/std/strings/string.view/string.view.access/front.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.access/front.pass.cpp
@@ -18,39 +18,39 @@
 #include "test_macros.h"
 
 template <typename CharT>
-bool test ( const CharT *s, std::size_t len ) {
-    typedef std::basic_string_view<CharT> SV;
-    SV sv ( s, len );
-    ASSERT_SAME_TYPE(decltype(sv.front()), typename SV::const_reference);
-    LIBCPP_ASSERT_NOEXCEPT(   sv.front());
-    assert ( sv.length() == len );
-    assert ( sv.front() == s[0] );
-    return &sv.front() == s;
-    }
+bool test(const CharT* s, std::size_t len) {
+  typedef std::basic_string_view<CharT> SV;
+  SV sv(s, len);
+  ASSERT_SAME_TYPE(decltype(sv.front()), typename SV::const_reference);
+  LIBCPP_ASSERT_NOEXCEPT(sv.front());
+  assert(sv.length() == len);
+  assert(sv.front() == s[0]);
+  return &sv.front() == s;
+}
 
 int main(int, char**) {
-    assert ( test ( "ABCDE", 5 ));
-    assert ( test ( "a", 1 ));
+  assert(test("ABCDE", 5));
+  assert(test("a", 1));
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    assert ( test ( L"ABCDE", 5 ));
-    assert ( test ( L"a", 1 ));
+  assert(test(L"ABCDE", 5));
+  assert(test(L"a", 1));
 #endif
 
 #if TEST_STD_VER >= 11
-    assert ( test ( u"ABCDE", 5 ));
-    assert ( test ( u"a", 1 ));
+  assert(test(u"ABCDE", 5));
+  assert(test(u"a", 1));
 
-    assert ( test ( U"ABCDE", 5 ));
-    assert ( test ( U"a", 1 ));
+  assert(test(U"ABCDE", 5));
+  assert(test(U"a", 1));
 #endif
 
 #if TEST_STD_VER >= 11
-    {
-    constexpr std::basic_string_view<char> sv ( "ABC", 2 );
-    static_assert ( sv.length() ==  2,  "" );
-    static_assert ( sv.front()  == 'A', "" );
-    }
+  {
+    constexpr std::basic_string_view<char> sv("ABC", 2);
+    static_assert(sv.length() == 2, "");
+    static_assert(sv.front() == 'A', "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.access/index.pass.cpp b/libcxx/test/std/strings/string.view/string.view.access/index.pass.cpp
index 51c60ec0057b854..be6bbd78bd1e4b1 100644
--- a/libcxx/test/std/strings/string.view/string.view.access/index.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.access/index.pass.cpp
@@ -18,42 +18,42 @@
 #include "test_macros.h"
 
 template <typename CharT>
-void test ( const CharT *s, std::size_t len ) {
-    typedef std::basic_string_view<CharT> SV;
-    SV sv ( s, len );
-    ASSERT_SAME_TYPE(decltype(sv[0]), typename SV::const_reference);
-    LIBCPP_ASSERT_NOEXCEPT(   sv[0]);
-    assert ( sv.length() == len );
-    for ( std::size_t i = 0; i < len; ++i ) {
-        assert ( sv[i] == s[i] );
-        assert ( &sv[i] == s + i );
-        }
-    }
+void test(const CharT* s, std::size_t len) {
+  typedef std::basic_string_view<CharT> SV;
+  SV sv(s, len);
+  ASSERT_SAME_TYPE(decltype(sv[0]), typename SV::const_reference);
+  LIBCPP_ASSERT_NOEXCEPT(sv[0]);
+  assert(sv.length() == len);
+  for (std::size_t i = 0; i < len; ++i) {
+    assert(sv[i] == s[i]);
+    assert(&sv[i] == s + i);
+  }
+}
 
 int main(int, char**) {
-    test ( "ABCDE", 5 );
-    test ( "a", 1 );
+  test("ABCDE", 5);
+  test("a", 1);
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test ( L"ABCDE", 5 );
-    test ( L"a", 1 );
+  test(L"ABCDE", 5);
+  test(L"a", 1);
 #endif
 
 #if TEST_STD_VER >= 11
-    test ( u"ABCDE", 5 );
-    test ( u"a", 1 );
+  test(u"ABCDE", 5);
+  test(u"a", 1);
 
-    test ( U"ABCDE", 5 );
-    test ( U"a", 1 );
+  test(U"ABCDE", 5);
+  test(U"a", 1);
 #endif
 
 #if TEST_STD_VER > 11
-    {
-    constexpr std::basic_string_view<char> sv ( "ABC", 2 );
-    static_assert ( sv.length() ==  2,  "" );
-    static_assert ( sv[0]  == 'A', "" );
-    static_assert ( sv[1]  == 'B', "" );
-    }
+  {
+    constexpr std::basic_string_view<char> sv("ABC", 2);
+    static_assert(sv.length() == 2, "");
+    static_assert(sv[0] == 'A', "");
+    static_assert(sv[1] == 'B', "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.capacity/capacity.pass.cpp b/libcxx/test/std/strings/string.view/string.view.capacity/capacity.pass.cpp
index a9fd862d6554832..05dad28b717864d 100644
--- a/libcxx/test/std/strings/string.view/string.view.capacity/capacity.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.capacity/capacity.pass.cpp
@@ -23,98 +23,103 @@
 
 #include "test_macros.h"
 
-template<typename SV>
-void test1 () {
+template <typename SV>
+void test1() {
 #if TEST_STD_VER > 11
-    {
+  {
     constexpr SV sv1;
-    static_assert ( sv1.size() == 0, "" );
-    static_assert ( sv1.empty(), "");
-    static_assert ( sv1.size() == sv1.length(), "" );
-    static_assert ( sv1.max_size() > sv1.size(), "");
-    }
+    static_assert(sv1.size() == 0, "");
+    static_assert(sv1.empty(), "");
+    static_assert(sv1.size() == sv1.length(), "");
+    static_assert(sv1.max_size() > sv1.size(), "");
+  }
 #endif
 
-    {
+  {
     SV sv1;
     ASSERT_NOEXCEPT(sv1.size());
     ASSERT_NOEXCEPT(sv1.empty());
     ASSERT_NOEXCEPT(sv1.max_size());
     ASSERT_NOEXCEPT(sv1.length());
-    assert ( sv1.size() == 0 );
-    assert ( sv1.empty());
-    assert ( sv1.size() == sv1.length());
-    assert ( sv1.max_size() > sv1.size());
-    }
-
-    // Sanity check max_size() -- a string_view can't store more bytes than a single object
-    // can contain. Any implementation that fails this check is certainly lying.
-    {
-        typedef typename SV::value_type CharT;
-        typedef typename SV::size_type Size;
-        SV sv;
-        assert(sv.max_size() <= std::numeric_limits<Size>::max() / sizeof(CharT));
-        LIBCPP_ASSERT(sv.max_size() == std::numeric_limits<Size>::max() / sizeof(CharT));
-    }
+    assert(sv1.size() == 0);
+    assert(sv1.empty());
+    assert(sv1.size() == sv1.length());
+    assert(sv1.max_size() > sv1.size());
+  }
+
+  // Sanity check max_size() -- a string_view can't store more bytes than a single object
+  // can contain. Any implementation that fails this check is certainly lying.
+  {
+    typedef typename SV::value_type CharT;
+    typedef typename SV::size_type Size;
+    SV sv;
+    assert(sv.max_size() <= std::numeric_limits<Size>::max() / sizeof(CharT));
+    LIBCPP_ASSERT(sv.max_size() == std::numeric_limits<Size>::max() / sizeof(CharT));
+  }
 }
 
-template<typename CharT>
-void test2 ( const CharT *s, std::size_t len ) {
-    {
-    std::basic_string_view<CharT> sv1 ( s );
-    assert ( sv1.size() == len );
-    assert ( sv1.data() == s );
-    assert ( sv1.empty() == (len == 0));
-    assert ( sv1.size() == sv1.length());
-    assert ( sv1.max_size() > sv1.size());
+template <typename CharT>
+void test2(const CharT* s, std::size_t len) {
+  {
+    std::basic_string_view<CharT> sv1(s);
+    assert(sv1.size() == len);
+    assert(sv1.data() == s);
+    assert(sv1.empty() == (len == 0));
+    assert(sv1.size() == sv1.length());
+    assert(sv1.max_size() > sv1.size());
 #if TEST_STD_VER > 14
-//  make sure we pick up std::size, too!
-    assert ( sv1.size() == std::size(sv1));
-    assert ( sv1.empty() == std::empty(sv1));
+    //  make sure we pick up std::size, too!
+    assert(sv1.size() == std::size(sv1));
+    assert(sv1.empty() == std::empty(sv1));
 #endif
-    }
+  }
 }
 
 int main(int, char**) {
-    test1<std::string_view> ();
+  test1<std::string_view>();
 #ifndef TEST_HAS_NO_CHAR8_T
-    test1<std::u8string_view> ();
+  test1<std::u8string_view>();
 #endif
-    test1<std::u16string_view> ();
-    test1<std::u32string_view> ();
+  test1<std::u16string_view>();
+  test1<std::u32string_view>();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test1<std::wstring_view> ();
+  test1<std::wstring_view>();
 #endif
 
-    test2 ( "ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE", 105 );
-    test2 ( "ABCDE", 5 );
-    test2 ( "a", 1 );
-    test2 ( "", 0 );
+  test2("ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE",
+        105);
+  test2("ABCDE", 5);
+  test2("a", 1);
+  test2("", 0);
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test2 ( L"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE", 105 );
-    test2 ( L"ABCDE", 5 );
-    test2 ( L"a", 1 );
-    test2 ( L"", 0 );
+  test2(L"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE",
+        105);
+  test2(L"ABCDE", 5);
+  test2(L"a", 1);
+  test2(L"", 0);
 #endif
 
 #ifndef TEST_HAS_NO_CHAR8_T
-    test2 ( u8"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE", 105 );
-    test2 ( u8"ABCDE", 5 );
-    test2 ( u8"a", 1 );
-    test2 ( u8"", 0 );
+  test2(u8"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE",
+        105);
+  test2(u8"ABCDE", 5);
+  test2(u8"a", 1);
+  test2(u8"", 0);
 #endif
 
 #if TEST_STD_VER >= 11
-    test2 ( u"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE", 105 );
-    test2 ( u"ABCDE", 5 );
-    test2 ( u"a", 1 );
-    test2 ( u"", 0 );
-
-    test2 ( U"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE", 105 );
-    test2 ( U"ABCDE", 5 );
-    test2 ( U"a", 1 );
-    test2 ( U"", 0 );
+  test2(u"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE",
+        105);
+  test2(u"ABCDE", 5);
+  test2(u"a", 1);
+  test2(u"", 0);
+
+  test2(U"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE",
+        105);
+  test2(U"ABCDE", 5);
+  test2(U"a", 1);
+  test2(U"", 0);
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.capacity/empty.verify.cpp b/libcxx/test/std/strings/string.view/string.view.capacity/empty.verify.cpp
index 73e0af7cb5e9ce5..18a90acbcf02ee1 100644
--- a/libcxx/test/std/strings/string.view/string.view.capacity/empty.verify.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.capacity/empty.verify.cpp
@@ -17,6 +17,6 @@
 #include <string_view>
 
 void f() {
-    std::string_view c;
-    c.empty();  // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
+  std::string_view c;
+  c.empty(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.comparison/equal.pass.cpp b/libcxx/test/std/strings/string.view/string.view.comparison/equal.pass.cpp
index dbe242cca4210f2..4f00bd7f6edf19b 100644
--- a/libcxx/test/std/strings/string.view/string.view.comparison/equal.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.comparison/equal.pass.cpp
@@ -22,95 +22,91 @@
 #include "constexpr_char_traits.h"
 #include "make_string.h"
 
-template<class T>
+template <class T>
 struct ConvertibleTo {
-    T t_;
-    TEST_CONSTEXPR explicit ConvertibleTo(T t) : t_(t) {}
-    TEST_CONSTEXPR operator T() const {
-        return t_;
-    }
+  T t_;
+  TEST_CONSTEXPR explicit ConvertibleTo(T t) : t_(t) {}
+  TEST_CONSTEXPR operator T() const { return t_; }
 };
 
-template<class SV>
-TEST_CONSTEXPR_CXX14 bool test()
-{
-    typedef typename SV::value_type CharT;
-    typedef typename SV::traits_type Traits;
-
-    // Test the behavior of the operator, both with and without implicit conversions.
-    SV v[] = {
-        SV(MAKE_CSTRING(CharT, "")),
-        SV(MAKE_CSTRING(CharT, "abc")),
-        SV(MAKE_CSTRING(CharT, "abcdef")),
-        SV(MAKE_CSTRING(CharT, "acb")),
-    };
-    for (int i = 0; i < 4; ++i) {
-        for (int j = 0; j < 4; ++j) {
-            // See http://eel.is/c++draft/string.view#tab:string.view.comparison.overloads
-            bool expected = (i == j);
-            assert((v[i] == v[j]) == expected);
-            assert((v[i].data() == v[j]) == expected);
-            assert((v[i] == v[j].data()) == expected);
-            assert((ConvertibleTo<SV>(v[i]) == v[j]) == expected);
-            assert((v[i] == ConvertibleTo<SV>(v[j])) == expected);
-
-            if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
-                assert((std::basic_string<CharT, Traits>(v[i]) == v[j]) == expected);
-                assert((v[i] == std::basic_string<CharT, Traits>(v[j])) == expected);
-            }
-        }
-    }
-
-    // Test its behavior with embedded null bytes.
-    SV abc = SV(MAKE_CSTRING(CharT, "abc"));
-    SV abc0def = SV(MAKE_CSTRING(CharT, "abc\0def"), 7);
-    SV abcdef = SV(MAKE_CSTRING(CharT, "abcdef"));
-    assert((abc == abc0def) == false);
-    assert((abc == abcdef) == false);
-    assert((abc0def == abc) == false);
-    assert((abc0def == abcdef) == false);
-    assert((abcdef == abc) == false);
-    assert((abcdef == abc0def) == false);
-
-    assert((abc.data() == abc0def) == false);
-    assert((abc0def == abc.data()) == false);
-
-    if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
-        assert((std::basic_string<CharT, Traits>(abc) == abc0def) == false);
-        assert((abc0def == std::basic_string<CharT, Traits>(abc)) == false);
+template <class SV>
+TEST_CONSTEXPR_CXX14 bool test() {
+  typedef typename SV::value_type CharT;
+  typedef typename SV::traits_type Traits;
+
+  // Test the behavior of the operator, both with and without implicit conversions.
+  SV v[] = {
+      SV(MAKE_CSTRING(CharT, "")),
+      SV(MAKE_CSTRING(CharT, "abc")),
+      SV(MAKE_CSTRING(CharT, "abcdef")),
+      SV(MAKE_CSTRING(CharT, "acb")),
+  };
+  for (int i = 0; i < 4; ++i) {
+    for (int j = 0; j < 4; ++j) {
+      // See http://eel.is/c++draft/string.view#tab:string.view.comparison.overloads
+      bool expected = (i == j);
+      assert((v[i] == v[j]) == expected);
+      assert((v[i].data() == v[j]) == expected);
+      assert((v[i] == v[j].data()) == expected);
+      assert((ConvertibleTo<SV>(v[i]) == v[j]) == expected);
+      assert((v[i] == ConvertibleTo<SV>(v[j])) == expected);
+
+      if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
+        assert((std::basic_string<CharT, Traits>(v[i]) == v[j]) == expected);
+        assert((v[i] == std::basic_string<CharT, Traits>(v[j])) == expected);
+      }
     }
-
-    return true;
+  }
+
+  // Test its behavior with embedded null bytes.
+  SV abc     = SV(MAKE_CSTRING(CharT, "abc"));
+  SV abc0def = SV(MAKE_CSTRING(CharT, "abc\0def"), 7);
+  SV abcdef  = SV(MAKE_CSTRING(CharT, "abcdef"));
+  assert((abc == abc0def) == false);
+  assert((abc == abcdef) == false);
+  assert((abc0def == abc) == false);
+  assert((abc0def == abcdef) == false);
+  assert((abcdef == abc) == false);
+  assert((abcdef == abc0def) == false);
+
+  assert((abc.data() == abc0def) == false);
+  assert((abc0def == abc.data()) == false);
+
+  if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
+    assert((std::basic_string<CharT, Traits>(abc) == abc0def) == false);
+    assert((abc0def == std::basic_string<CharT, Traits>(abc)) == false);
+  }
+
+  return true;
 }
 
-int main(int, char**)
-{
-    test<std::string_view>();
+int main(int, char**) {
+  test<std::string_view>();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test<std::wstring_view>();
+  test<std::wstring_view>();
 #endif
 #if TEST_STD_VER >= 11
-    test<std::u16string_view>();
-    test<std::u32string_view>();
+  test<std::u16string_view>();
+  test<std::u32string_view>();
 #endif
 #if TEST_STD_VER > 14
-    static_assert(test<std::string_view>(), "");
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    static_assert(test<std::wstring_view>(), "");
-#endif
-    static_assert(test<std::u16string_view>(), "");
-    static_assert(test<std::u32string_view>(), "");
+  static_assert(test<std::string_view>(), "");
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  static_assert(test<std::wstring_view>(), "");
+#  endif
+  static_assert(test<std::u16string_view>(), "");
+  static_assert(test<std::u32string_view>(), "");
 #endif
 
 #if TEST_STD_VER > 11
-    test<std::basic_string_view<char, constexpr_char_traits<char>>>();
-    static_assert(test<std::basic_string_view<char, constexpr_char_traits<char>>>(), "");
+  test<std::basic_string_view<char, constexpr_char_traits<char>>>();
+  static_assert(test<std::basic_string_view<char, constexpr_char_traits<char>>>(), "");
 #endif
 
 #if TEST_STD_VER > 17
-    test<std::u8string_view>();
-    static_assert(test<std::u8string_view>());
+  test<std::u8string_view>();
+  static_assert(test<std::u8string_view>());
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.comparison/greater.pass.cpp b/libcxx/test/std/strings/string.view/string.view.comparison/greater.pass.cpp
index a3739f648b33109..b965c155ec51ba1 100644
--- a/libcxx/test/std/strings/string.view/string.view.comparison/greater.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.comparison/greater.pass.cpp
@@ -22,95 +22,91 @@
 #include "constexpr_char_traits.h"
 #include "make_string.h"
 
-template<class T>
+template <class T>
 struct ConvertibleTo {
-    T t_;
-    TEST_CONSTEXPR explicit ConvertibleTo(T t) : t_(t) {}
-    TEST_CONSTEXPR operator T() const {
-        return t_;
-    }
+  T t_;
+  TEST_CONSTEXPR explicit ConvertibleTo(T t) : t_(t) {}
+  TEST_CONSTEXPR operator T() const { return t_; }
 };
 
-template<class SV>
-TEST_CONSTEXPR_CXX14 bool test()
-{
-    typedef typename SV::value_type CharT;
-    typedef typename SV::traits_type Traits;
-
-    // Test the behavior of the operator, both with and without implicit conversions.
-    SV v[] = {
-        SV(MAKE_CSTRING(CharT, "")),
-        SV(MAKE_CSTRING(CharT, "abc")),
-        SV(MAKE_CSTRING(CharT, "abcdef")),
-        SV(MAKE_CSTRING(CharT, "acb")),
-    };
-    for (int i = 0; i < 4; ++i) {
-        for (int j = 0; j < 4; ++j) {
-            // See http://eel.is/c++draft/string.view#tab:string.view.comparison.overloads
-            bool expected = (i > j);
-            assert((v[i] > v[j]) == expected);
-            assert((v[i].data() > v[j]) == expected);
-            assert((v[i] > v[j].data()) == expected);
-            assert((ConvertibleTo<SV>(v[i]) > v[j]) == expected);
-            assert((v[i] > ConvertibleTo<SV>(v[j])) == expected);
-
-            if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
-                assert((std::basic_string<CharT, Traits>(v[i]) > v[j]) == expected);
-                assert((v[i] > std::basic_string<CharT, Traits>(v[j])) == expected);
-            }
-        }
-    }
-
-    // Test its behavior with embedded null bytes.
-    SV abc = SV(MAKE_CSTRING(CharT, "abc"));
-    SV abc0def = SV(MAKE_CSTRING(CharT, "abc\0def"), 7);
-    SV abcdef = SV(MAKE_CSTRING(CharT, "abcdef"));
-    assert((abc > abc0def) == false);
-    assert((abc > abcdef) == false);
-    assert((abc0def > abc) == true);
-    assert((abc0def > abcdef) == false);
-    assert((abcdef > abc) == true);
-    assert((abcdef > abc0def) == true);
-
-    assert((abc.data() > abc0def) == false);
-    assert((abc0def > abc.data()) == true);
-
-    if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
-        assert((std::basic_string<CharT, Traits>(abc) > abc0def) == false);
-        assert((abc0def > std::basic_string<CharT, Traits>(abc)) == true);
+template <class SV>
+TEST_CONSTEXPR_CXX14 bool test() {
+  typedef typename SV::value_type CharT;
+  typedef typename SV::traits_type Traits;
+
+  // Test the behavior of the operator, both with and without implicit conversions.
+  SV v[] = {
+      SV(MAKE_CSTRING(CharT, "")),
+      SV(MAKE_CSTRING(CharT, "abc")),
+      SV(MAKE_CSTRING(CharT, "abcdef")),
+      SV(MAKE_CSTRING(CharT, "acb")),
+  };
+  for (int i = 0; i < 4; ++i) {
+    for (int j = 0; j < 4; ++j) {
+      // See http://eel.is/c++draft/string.view#tab:string.view.comparison.overloads
+      bool expected = (i > j);
+      assert((v[i] > v[j]) == expected);
+      assert((v[i].data() > v[j]) == expected);
+      assert((v[i] > v[j].data()) == expected);
+      assert((ConvertibleTo<SV>(v[i]) > v[j]) == expected);
+      assert((v[i] > ConvertibleTo<SV>(v[j])) == expected);
+
+      if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
+        assert((std::basic_string<CharT, Traits>(v[i]) > v[j]) == expected);
+        assert((v[i] > std::basic_string<CharT, Traits>(v[j])) == expected);
+      }
     }
-
-    return true;
+  }
+
+  // Test its behavior with embedded null bytes.
+  SV abc     = SV(MAKE_CSTRING(CharT, "abc"));
+  SV abc0def = SV(MAKE_CSTRING(CharT, "abc\0def"), 7);
+  SV abcdef  = SV(MAKE_CSTRING(CharT, "abcdef"));
+  assert((abc > abc0def) == false);
+  assert((abc > abcdef) == false);
+  assert((abc0def > abc) == true);
+  assert((abc0def > abcdef) == false);
+  assert((abcdef > abc) == true);
+  assert((abcdef > abc0def) == true);
+
+  assert((abc.data() > abc0def) == false);
+  assert((abc0def > abc.data()) == true);
+
+  if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
+    assert((std::basic_string<CharT, Traits>(abc) > abc0def) == false);
+    assert((abc0def > std::basic_string<CharT, Traits>(abc)) == true);
+  }
+
+  return true;
 }
 
-int main(int, char**)
-{
-    test<std::string_view>();
+int main(int, char**) {
+  test<std::string_view>();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test<std::wstring_view>();
+  test<std::wstring_view>();
 #endif
 #if TEST_STD_VER >= 11
-    test<std::u16string_view>();
-    test<std::u32string_view>();
+  test<std::u16string_view>();
+  test<std::u32string_view>();
 #endif
 #if TEST_STD_VER > 14
-    static_assert(test<std::string_view>(), "");
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    static_assert(test<std::wstring_view>(), "");
-#endif
-    static_assert(test<std::u16string_view>(), "");
-    static_assert(test<std::u32string_view>(), "");
+  static_assert(test<std::string_view>(), "");
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  static_assert(test<std::wstring_view>(), "");
+#  endif
+  static_assert(test<std::u16string_view>(), "");
+  static_assert(test<std::u32string_view>(), "");
 #endif
 
 #if TEST_STD_VER > 11
-    test<std::basic_string_view<char, constexpr_char_traits<char>>>();
-    static_assert(test<std::basic_string_view<char, constexpr_char_traits<char>>>(), "");
+  test<std::basic_string_view<char, constexpr_char_traits<char>>>();
+  static_assert(test<std::basic_string_view<char, constexpr_char_traits<char>>>(), "");
 #endif
 
 #if TEST_STD_VER > 17
-    test<std::u8string_view>();
-    static_assert(test<std::u8string_view>());
+  test<std::u8string_view>();
+  static_assert(test<std::u8string_view>());
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.comparison/greater_equal.pass.cpp b/libcxx/test/std/strings/string.view/string.view.comparison/greater_equal.pass.cpp
index 55d291772627877..435e7db7731998a 100644
--- a/libcxx/test/std/strings/string.view/string.view.comparison/greater_equal.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.comparison/greater_equal.pass.cpp
@@ -22,95 +22,91 @@
 #include "constexpr_char_traits.h"
 #include "make_string.h"
 
-template<class T>
+template <class T>
 struct ConvertibleTo {
-    T t_;
-    TEST_CONSTEXPR explicit ConvertibleTo(T t) : t_(t) {}
-    TEST_CONSTEXPR operator T() const {
-        return t_;
-    }
+  T t_;
+  TEST_CONSTEXPR explicit ConvertibleTo(T t) : t_(t) {}
+  TEST_CONSTEXPR operator T() const { return t_; }
 };
 
-template<class SV>
-TEST_CONSTEXPR_CXX14 bool test()
-{
-    typedef typename SV::value_type CharT;
-    typedef typename SV::traits_type Traits;
-
-    // Test the behavior of the operator, both with and without implicit conversions.
-    SV v[] = {
-        SV(MAKE_CSTRING(CharT, "")),
-        SV(MAKE_CSTRING(CharT, "abc")),
-        SV(MAKE_CSTRING(CharT, "abcdef")),
-        SV(MAKE_CSTRING(CharT, "acb")),
-    };
-    for (int i = 0; i < 4; ++i) {
-        for (int j = 0; j < 4; ++j) {
-            // See http://eel.is/c++draft/string.view#tab:string.view.comparison.overloads
-            bool expected = (i >= j);
-            assert((v[i] >= v[j]) == expected);
-            assert((v[i].data() >= v[j]) == expected);
-            assert((v[i] >= v[j].data()) == expected);
-            assert((ConvertibleTo<SV>(v[i]) >= v[j]) == expected);
-            assert((v[i] >= ConvertibleTo<SV>(v[j])) == expected);
-
-            if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
-                assert((std::basic_string<CharT, Traits>(v[i]) >= v[j]) == expected);
-                assert((v[i] >= std::basic_string<CharT, Traits>(v[j])) == expected);
-            }
-        }
-    }
-
-    // Test its behavior with embedded null bytes.
-    SV abc = SV(MAKE_CSTRING(CharT, "abc"));
-    SV abc0def = SV(MAKE_CSTRING(CharT, "abc\0def"), 7);
-    SV abcdef = SV(MAKE_CSTRING(CharT, "abcdef"));
-    assert((abc >= abc0def) == false);
-    assert((abc >= abcdef) == false);
-    assert((abc0def >= abc) == true);
-    assert((abc0def >= abcdef) == false);
-    assert((abcdef >= abc) == true);
-    assert((abcdef >= abc0def) == true);
-
-    assert((abc.data() >= abc0def) == false);
-    assert((abc0def >= abc.data()) == true);
-
-    if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
-        assert((std::basic_string<CharT, Traits>(abc) >= abc0def) == false);
-        assert((abc0def >= std::basic_string<CharT, Traits>(abc)) == true);
+template <class SV>
+TEST_CONSTEXPR_CXX14 bool test() {
+  typedef typename SV::value_type CharT;
+  typedef typename SV::traits_type Traits;
+
+  // Test the behavior of the operator, both with and without implicit conversions.
+  SV v[] = {
+      SV(MAKE_CSTRING(CharT, "")),
+      SV(MAKE_CSTRING(CharT, "abc")),
+      SV(MAKE_CSTRING(CharT, "abcdef")),
+      SV(MAKE_CSTRING(CharT, "acb")),
+  };
+  for (int i = 0; i < 4; ++i) {
+    for (int j = 0; j < 4; ++j) {
+      // See http://eel.is/c++draft/string.view#tab:string.view.comparison.overloads
+      bool expected = (i >= j);
+      assert((v[i] >= v[j]) == expected);
+      assert((v[i].data() >= v[j]) == expected);
+      assert((v[i] >= v[j].data()) == expected);
+      assert((ConvertibleTo<SV>(v[i]) >= v[j]) == expected);
+      assert((v[i] >= ConvertibleTo<SV>(v[j])) == expected);
+
+      if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
+        assert((std::basic_string<CharT, Traits>(v[i]) >= v[j]) == expected);
+        assert((v[i] >= std::basic_string<CharT, Traits>(v[j])) == expected);
+      }
     }
-
-    return true;
+  }
+
+  // Test its behavior with embedded null bytes.
+  SV abc     = SV(MAKE_CSTRING(CharT, "abc"));
+  SV abc0def = SV(MAKE_CSTRING(CharT, "abc\0def"), 7);
+  SV abcdef  = SV(MAKE_CSTRING(CharT, "abcdef"));
+  assert((abc >= abc0def) == false);
+  assert((abc >= abcdef) == false);
+  assert((abc0def >= abc) == true);
+  assert((abc0def >= abcdef) == false);
+  assert((abcdef >= abc) == true);
+  assert((abcdef >= abc0def) == true);
+
+  assert((abc.data() >= abc0def) == false);
+  assert((abc0def >= abc.data()) == true);
+
+  if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
+    assert((std::basic_string<CharT, Traits>(abc) >= abc0def) == false);
+    assert((abc0def >= std::basic_string<CharT, Traits>(abc)) == true);
+  }
+
+  return true;
 }
 
-int main(int, char**)
-{
-    test<std::string_view>();
+int main(int, char**) {
+  test<std::string_view>();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test<std::wstring_view>();
+  test<std::wstring_view>();
 #endif
 #if TEST_STD_VER >= 11
-    test<std::u16string_view>();
-    test<std::u32string_view>();
+  test<std::u16string_view>();
+  test<std::u32string_view>();
 #endif
 #if TEST_STD_VER > 14
-    static_assert(test<std::string_view>(), "");
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    static_assert(test<std::wstring_view>(), "");
-#endif
-    static_assert(test<std::u16string_view>(), "");
-    static_assert(test<std::u32string_view>(), "");
+  static_assert(test<std::string_view>(), "");
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  static_assert(test<std::wstring_view>(), "");
+#  endif
+  static_assert(test<std::u16string_view>(), "");
+  static_assert(test<std::u32string_view>(), "");
 #endif
 
 #if TEST_STD_VER > 11
-    test<std::basic_string_view<char, constexpr_char_traits<char>>>();
-    static_assert(test<std::basic_string_view<char, constexpr_char_traits<char>>>(), "");
+  test<std::basic_string_view<char, constexpr_char_traits<char>>>();
+  static_assert(test<std::basic_string_view<char, constexpr_char_traits<char>>>(), "");
 #endif
 
 #if TEST_STD_VER > 17
-    test<std::u8string_view>();
-    static_assert(test<std::u8string_view>());
+  test<std::u8string_view>();
+  static_assert(test<std::u8string_view>());
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.comparison/less.pass.cpp b/libcxx/test/std/strings/string.view/string.view.comparison/less.pass.cpp
index 874bf706024351c..7461b05ce308539 100644
--- a/libcxx/test/std/strings/string.view/string.view.comparison/less.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.comparison/less.pass.cpp
@@ -22,95 +22,91 @@
 #include "constexpr_char_traits.h"
 #include "make_string.h"
 
-template<class T>
+template <class T>
 struct ConvertibleTo {
-    T t_;
-    TEST_CONSTEXPR explicit ConvertibleTo(T t) : t_(t) {}
-    TEST_CONSTEXPR operator T() const {
-        return t_;
-    }
+  T t_;
+  TEST_CONSTEXPR explicit ConvertibleTo(T t) : t_(t) {}
+  TEST_CONSTEXPR operator T() const { return t_; }
 };
 
-template<class SV>
-TEST_CONSTEXPR_CXX14 bool test()
-{
-    typedef typename SV::value_type CharT;
-    typedef typename SV::traits_type Traits;
-
-    // Test the behavior of the operator, both with and without implicit conversions.
-    SV v[] = {
-        SV(MAKE_CSTRING(CharT, "")),
-        SV(MAKE_CSTRING(CharT, "abc")),
-        SV(MAKE_CSTRING(CharT, "abcdef")),
-        SV(MAKE_CSTRING(CharT, "acb")),
-    };
-    for (int i = 0; i < 4; ++i) {
-        for (int j = 0; j < 4; ++j) {
-            // See http://eel.is/c++draft/string.view#tab:string.view.comparison.overloads
-            bool expected = (i < j);
-            assert((v[i] < v[j]) == expected);
-            assert((v[i].data() < v[j]) == expected);
-            assert((v[i] < v[j].data()) == expected);
-            assert((ConvertibleTo<SV>(v[i]) < v[j]) == expected);
-            assert((v[i] < ConvertibleTo<SV>(v[j])) == expected);
-
-            if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
-                assert((std::basic_string<CharT, Traits>(v[i]) < v[j]) == expected);
-                assert((v[i] < std::basic_string<CharT, Traits>(v[j])) == expected);
-            }
-        }
-    }
-
-    // Test its behavior with embedded null bytes.
-    SV abc = SV(MAKE_CSTRING(CharT, "abc"));
-    SV abc0def = SV(MAKE_CSTRING(CharT, "abc\0def"), 7);
-    SV abcdef = SV(MAKE_CSTRING(CharT, "abcdef"));
-    assert((abc < abc0def) == true);
-    assert((abc < abcdef) == true);
-    assert((abc0def < abc) == false);
-    assert((abc0def < abcdef) == true);
-    assert((abcdef < abc) == false);
-    assert((abcdef < abc0def) == false);
-
-    assert((abc.data() < abc0def) == true);
-    assert((abc0def < abc.data()) == false);
-
-    if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
-        assert((std::basic_string<CharT, Traits>(abc) < abc0def) == true);
-        assert((abc0def < std::basic_string<CharT, Traits>(abc)) == false);
+template <class SV>
+TEST_CONSTEXPR_CXX14 bool test() {
+  typedef typename SV::value_type CharT;
+  typedef typename SV::traits_type Traits;
+
+  // Test the behavior of the operator, both with and without implicit conversions.
+  SV v[] = {
+      SV(MAKE_CSTRING(CharT, "")),
+      SV(MAKE_CSTRING(CharT, "abc")),
+      SV(MAKE_CSTRING(CharT, "abcdef")),
+      SV(MAKE_CSTRING(CharT, "acb")),
+  };
+  for (int i = 0; i < 4; ++i) {
+    for (int j = 0; j < 4; ++j) {
+      // See http://eel.is/c++draft/string.view#tab:string.view.comparison.overloads
+      bool expected = (i < j);
+      assert((v[i] < v[j]) == expected);
+      assert((v[i].data() < v[j]) == expected);
+      assert((v[i] < v[j].data()) == expected);
+      assert((ConvertibleTo<SV>(v[i]) < v[j]) == expected);
+      assert((v[i] < ConvertibleTo<SV>(v[j])) == expected);
+
+      if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
+        assert((std::basic_string<CharT, Traits>(v[i]) < v[j]) == expected);
+        assert((v[i] < std::basic_string<CharT, Traits>(v[j])) == expected);
+      }
     }
-
-    return true;
+  }
+
+  // Test its behavior with embedded null bytes.
+  SV abc     = SV(MAKE_CSTRING(CharT, "abc"));
+  SV abc0def = SV(MAKE_CSTRING(CharT, "abc\0def"), 7);
+  SV abcdef  = SV(MAKE_CSTRING(CharT, "abcdef"));
+  assert((abc < abc0def) == true);
+  assert((abc < abcdef) == true);
+  assert((abc0def < abc) == false);
+  assert((abc0def < abcdef) == true);
+  assert((abcdef < abc) == false);
+  assert((abcdef < abc0def) == false);
+
+  assert((abc.data() < abc0def) == true);
+  assert((abc0def < abc.data()) == false);
+
+  if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
+    assert((std::basic_string<CharT, Traits>(abc) < abc0def) == true);
+    assert((abc0def < std::basic_string<CharT, Traits>(abc)) == false);
+  }
+
+  return true;
 }
 
-int main(int, char**)
-{
-    test<std::string_view>();
+int main(int, char**) {
+  test<std::string_view>();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test<std::wstring_view>();
+  test<std::wstring_view>();
 #endif
 #if TEST_STD_VER >= 11
-    test<std::u16string_view>();
-    test<std::u32string_view>();
+  test<std::u16string_view>();
+  test<std::u32string_view>();
 #endif
 #if TEST_STD_VER > 14
-    static_assert(test<std::string_view>(), "");
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    static_assert(test<std::wstring_view>(), "");
-#endif
-    static_assert(test<std::u16string_view>(), "");
-    static_assert(test<std::u32string_view>(), "");
+  static_assert(test<std::string_view>(), "");
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  static_assert(test<std::wstring_view>(), "");
+#  endif
+  static_assert(test<std::u16string_view>(), "");
+  static_assert(test<std::u32string_view>(), "");
 #endif
 
 #if TEST_STD_VER > 11
-    test<std::basic_string_view<char, constexpr_char_traits<char>>>();
-    static_assert(test<std::basic_string_view<char, constexpr_char_traits<char>>>(), "");
+  test<std::basic_string_view<char, constexpr_char_traits<char>>>();
+  static_assert(test<std::basic_string_view<char, constexpr_char_traits<char>>>(), "");
 #endif
 
 #if TEST_STD_VER > 17
-    test<std::u8string_view>();
-    static_assert(test<std::u8string_view>());
+  test<std::u8string_view>();
+  static_assert(test<std::u8string_view>());
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.comparison/less_equal.pass.cpp b/libcxx/test/std/strings/string.view/string.view.comparison/less_equal.pass.cpp
index 4e3910c0c25c33f..3192db0dc7d7d26 100644
--- a/libcxx/test/std/strings/string.view/string.view.comparison/less_equal.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.comparison/less_equal.pass.cpp
@@ -22,95 +22,91 @@
 #include "constexpr_char_traits.h"
 #include "make_string.h"
 
-template<class T>
+template <class T>
 struct ConvertibleTo {
-    T t_;
-    TEST_CONSTEXPR explicit ConvertibleTo(T t) : t_(t) {}
-    TEST_CONSTEXPR operator T() const {
-        return t_;
-    }
+  T t_;
+  TEST_CONSTEXPR explicit ConvertibleTo(T t) : t_(t) {}
+  TEST_CONSTEXPR operator T() const { return t_; }
 };
 
-template<class SV>
-TEST_CONSTEXPR_CXX14 bool test()
-{
-    typedef typename SV::value_type CharT;
-    typedef typename SV::traits_type Traits;
-
-    // Test the behavior of the operator, both with and without implicit conversions.
-    SV v[] = {
-        SV(MAKE_CSTRING(CharT, "")),
-        SV(MAKE_CSTRING(CharT, "abc")),
-        SV(MAKE_CSTRING(CharT, "abcdef")),
-        SV(MAKE_CSTRING(CharT, "acb")),
-    };
-    for (int i = 0; i < 4; ++i) {
-        for (int j = 0; j < 4; ++j) {
-            // See http://eel.is/c++draft/string.view#tab:string.view.comparison.overloads
-            bool expected = (i <= j);
-            assert((v[i] <= v[j]) == expected);
-            assert((v[i].data() <= v[j]) == expected);
-            assert((v[i] <= v[j].data()) == expected);
-            assert((ConvertibleTo<SV>(v[i]) <= v[j]) == expected);
-            assert((v[i] <= ConvertibleTo<SV>(v[j])) == expected);
-
-            if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
-                assert((std::basic_string<CharT, Traits>(v[i]) <= v[j]) == expected);
-                assert((v[i] <= std::basic_string<CharT, Traits>(v[j])) == expected);
-            }
-        }
-    }
-
-    // Test its behavior with embedded null bytes.
-    SV abc = SV(MAKE_CSTRING(CharT, "abc"));
-    SV abc0def = SV(MAKE_CSTRING(CharT, "abc\0def"), 7);
-    SV abcdef = SV(MAKE_CSTRING(CharT, "abcdef"));
-    assert((abc <= abc0def) == true);
-    assert((abc <= abcdef) == true);
-    assert((abc0def <= abc) == false);
-    assert((abc0def <= abcdef) == true);
-    assert((abcdef <= abc) == false);
-    assert((abcdef <= abc0def) == false);
-
-    assert((abc.data() <= abc0def) == true);
-    assert((abc0def <= abc.data()) == false);
-
-    if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
-        assert((std::basic_string<CharT, Traits>(abc) <= abc0def) == true);
-        assert((abc0def <= std::basic_string<CharT, Traits>(abc)) == false);
+template <class SV>
+TEST_CONSTEXPR_CXX14 bool test() {
+  typedef typename SV::value_type CharT;
+  typedef typename SV::traits_type Traits;
+
+  // Test the behavior of the operator, both with and without implicit conversions.
+  SV v[] = {
+      SV(MAKE_CSTRING(CharT, "")),
+      SV(MAKE_CSTRING(CharT, "abc")),
+      SV(MAKE_CSTRING(CharT, "abcdef")),
+      SV(MAKE_CSTRING(CharT, "acb")),
+  };
+  for (int i = 0; i < 4; ++i) {
+    for (int j = 0; j < 4; ++j) {
+      // See http://eel.is/c++draft/string.view#tab:string.view.comparison.overloads
+      bool expected = (i <= j);
+      assert((v[i] <= v[j]) == expected);
+      assert((v[i].data() <= v[j]) == expected);
+      assert((v[i] <= v[j].data()) == expected);
+      assert((ConvertibleTo<SV>(v[i]) <= v[j]) == expected);
+      assert((v[i] <= ConvertibleTo<SV>(v[j])) == expected);
+
+      if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
+        assert((std::basic_string<CharT, Traits>(v[i]) <= v[j]) == expected);
+        assert((v[i] <= std::basic_string<CharT, Traits>(v[j])) == expected);
+      }
     }
-
-    return true;
+  }
+
+  // Test its behavior with embedded null bytes.
+  SV abc     = SV(MAKE_CSTRING(CharT, "abc"));
+  SV abc0def = SV(MAKE_CSTRING(CharT, "abc\0def"), 7);
+  SV abcdef  = SV(MAKE_CSTRING(CharT, "abcdef"));
+  assert((abc <= abc0def) == true);
+  assert((abc <= abcdef) == true);
+  assert((abc0def <= abc) == false);
+  assert((abc0def <= abcdef) == true);
+  assert((abcdef <= abc) == false);
+  assert((abcdef <= abc0def) == false);
+
+  assert((abc.data() <= abc0def) == true);
+  assert((abc0def <= abc.data()) == false);
+
+  if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
+    assert((std::basic_string<CharT, Traits>(abc) <= abc0def) == true);
+    assert((abc0def <= std::basic_string<CharT, Traits>(abc)) == false);
+  }
+
+  return true;
 }
 
-int main(int, char**)
-{
-    test<std::string_view>();
+int main(int, char**) {
+  test<std::string_view>();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test<std::wstring_view>();
+  test<std::wstring_view>();
 #endif
 #if TEST_STD_VER >= 11
-    test<std::u16string_view>();
-    test<std::u32string_view>();
+  test<std::u16string_view>();
+  test<std::u32string_view>();
 #endif
 #if TEST_STD_VER > 14
-    static_assert(test<std::string_view>(), "");
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    static_assert(test<std::wstring_view>(), "");
-#endif
-    static_assert(test<std::u16string_view>(), "");
-    static_assert(test<std::u32string_view>(), "");
+  static_assert(test<std::string_view>(), "");
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  static_assert(test<std::wstring_view>(), "");
+#  endif
+  static_assert(test<std::u16string_view>(), "");
+  static_assert(test<std::u32string_view>(), "");
 #endif
 
 #if TEST_STD_VER > 11
-    test<std::basic_string_view<char, constexpr_char_traits<char>>>();
-    static_assert(test<std::basic_string_view<char, constexpr_char_traits<char>>>(), "");
+  test<std::basic_string_view<char, constexpr_char_traits<char>>>();
+  static_assert(test<std::basic_string_view<char, constexpr_char_traits<char>>>(), "");
 #endif
 
 #if TEST_STD_VER > 17
-    test<std::u8string_view>();
-    static_assert(test<std::u8string_view>());
+  test<std::u8string_view>();
+  static_assert(test<std::u8string_view>());
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.comparison/not_equal.pass.cpp b/libcxx/test/std/strings/string.view/string.view.comparison/not_equal.pass.cpp
index 867834e49319917..0082a5683933134 100644
--- a/libcxx/test/std/strings/string.view/string.view.comparison/not_equal.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.comparison/not_equal.pass.cpp
@@ -22,95 +22,91 @@
 #include "constexpr_char_traits.h"
 #include "make_string.h"
 
-template<class T>
+template <class T>
 struct ConvertibleTo {
-    T t_;
-    TEST_CONSTEXPR explicit ConvertibleTo(T t) : t_(t) {}
-    TEST_CONSTEXPR operator T() const {
-        return t_;
-    }
+  T t_;
+  TEST_CONSTEXPR explicit ConvertibleTo(T t) : t_(t) {}
+  TEST_CONSTEXPR operator T() const { return t_; }
 };
 
-template<class SV>
-TEST_CONSTEXPR_CXX14 bool test()
-{
-    typedef typename SV::value_type CharT;
-    typedef typename SV::traits_type Traits;
-
-    // Test the behavior of the operator, both with and without implicit conversions.
-    SV v[] = {
-        SV(MAKE_CSTRING(CharT, "")),
-        SV(MAKE_CSTRING(CharT, "abc")),
-        SV(MAKE_CSTRING(CharT, "abcdef")),
-        SV(MAKE_CSTRING(CharT, "acb")),
-    };
-    for (int i = 0; i < 4; ++i) {
-        for (int j = 0; j < 4; ++j) {
-            // See http://eel.is/c++draft/string.view#tab:string.view.comparison.overloads
-            bool expected = (i != j);
-            assert((v[i] != v[j]) == expected);
-            assert((v[i].data() != v[j]) == expected);
-            assert((v[i] != v[j].data()) == expected);
-            assert((ConvertibleTo<SV>(v[i]) != v[j]) == expected);
-            assert((v[i] != ConvertibleTo<SV>(v[j])) == expected);
-
-            if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
-                assert((std::basic_string<CharT, Traits>(v[i]) != v[j]) == expected);
-                assert((v[i] != std::basic_string<CharT, Traits>(v[j])) == expected);
-            }
-        }
-    }
-
-    // Test its behavior with embedded null bytes.
-    SV abc = SV(MAKE_CSTRING(CharT, "abc"));
-    SV abc0def = SV(MAKE_CSTRING(CharT, "abc\0def"), 7);
-    SV abcdef = SV(MAKE_CSTRING(CharT, "abcdef"));
-    assert((abc != abc0def) == true);
-    assert((abc != abcdef) == true);
-    assert((abc0def != abc) == true);
-    assert((abc0def != abcdef) == true);
-    assert((abcdef != abc) == true);
-    assert((abcdef != abc0def) == true);
-
-    assert((abc.data() != abc0def) == true);
-    assert((abc0def != abc.data()) == true);
-
-    if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
-        assert((std::basic_string<CharT, Traits>(abc) != abc0def) == true);
-        assert((abc0def != std::basic_string<CharT, Traits>(abc)) == true);
+template <class SV>
+TEST_CONSTEXPR_CXX14 bool test() {
+  typedef typename SV::value_type CharT;
+  typedef typename SV::traits_type Traits;
+
+  // Test the behavior of the operator, both with and without implicit conversions.
+  SV v[] = {
+      SV(MAKE_CSTRING(CharT, "")),
+      SV(MAKE_CSTRING(CharT, "abc")),
+      SV(MAKE_CSTRING(CharT, "abcdef")),
+      SV(MAKE_CSTRING(CharT, "acb")),
+  };
+  for (int i = 0; i < 4; ++i) {
+    for (int j = 0; j < 4; ++j) {
+      // See http://eel.is/c++draft/string.view#tab:string.view.comparison.overloads
+      bool expected = (i != j);
+      assert((v[i] != v[j]) == expected);
+      assert((v[i].data() != v[j]) == expected);
+      assert((v[i] != v[j].data()) == expected);
+      assert((ConvertibleTo<SV>(v[i]) != v[j]) == expected);
+      assert((v[i] != ConvertibleTo<SV>(v[j])) == expected);
+
+      if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
+        assert((std::basic_string<CharT, Traits>(v[i]) != v[j]) == expected);
+        assert((v[i] != std::basic_string<CharT, Traits>(v[j])) == expected);
+      }
     }
-
-    return true;
+  }
+
+  // Test its behavior with embedded null bytes.
+  SV abc     = SV(MAKE_CSTRING(CharT, "abc"));
+  SV abc0def = SV(MAKE_CSTRING(CharT, "abc\0def"), 7);
+  SV abcdef  = SV(MAKE_CSTRING(CharT, "abcdef"));
+  assert((abc != abc0def) == true);
+  assert((abc != abcdef) == true);
+  assert((abc0def != abc) == true);
+  assert((abc0def != abcdef) == true);
+  assert((abcdef != abc) == true);
+  assert((abcdef != abc0def) == true);
+
+  assert((abc.data() != abc0def) == true);
+  assert((abc0def != abc.data()) == true);
+
+  if (!TEST_IS_CONSTANT_EVALUATED || TEST_STD_VER >= 20) {
+    assert((std::basic_string<CharT, Traits>(abc) != abc0def) == true);
+    assert((abc0def != std::basic_string<CharT, Traits>(abc)) == true);
+  }
+
+  return true;
 }
 
-int main(int, char**)
-{
-    test<std::string_view>();
+int main(int, char**) {
+  test<std::string_view>();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test<std::wstring_view>();
+  test<std::wstring_view>();
 #endif
 #if TEST_STD_VER >= 11
-    test<std::u16string_view>();
-    test<std::u32string_view>();
+  test<std::u16string_view>();
+  test<std::u32string_view>();
 #endif
 #if TEST_STD_VER > 14
-    static_assert(test<std::string_view>(), "");
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    static_assert(test<std::wstring_view>(), "");
-#endif
-    static_assert(test<std::u16string_view>(), "");
-    static_assert(test<std::u32string_view>(), "");
+  static_assert(test<std::string_view>(), "");
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  static_assert(test<std::wstring_view>(), "");
+#  endif
+  static_assert(test<std::u16string_view>(), "");
+  static_assert(test<std::u32string_view>(), "");
 #endif
 
 #if TEST_STD_VER > 11
-    test<std::basic_string_view<char, constexpr_char_traits<char>>>();
-    static_assert(test<std::basic_string_view<char, constexpr_char_traits<char>>>(), "");
+  test<std::basic_string_view<char, constexpr_char_traits<char>>>();
+  static_assert(test<std::basic_string_view<char, constexpr_char_traits<char>>>(), "");
 #endif
 
 #if TEST_STD_VER > 17
-    test<std::u8string_view>();
-    static_assert(test<std::u8string_view>());
+  test<std::u8string_view>();
+  static_assert(test<std::u8string_view>());
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.cons/assign.pass.cpp b/libcxx/test/std/strings/string.view/string.view.cons/assign.pass.cpp
index 735ece200d2d8de..1342985bbe7d207 100644
--- a/libcxx/test/std/strings/string.view/string.view.cons/assign.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.cons/assign.pass.cpp
@@ -17,43 +17,42 @@
 
 #include "test_macros.h"
 
-template<typename T>
+template <typename T>
 #if TEST_STD_VER > 11
 constexpr
 #endif
-bool test (T sv0)
-    {
-    T sv1;
-    sv1 = sv0;
-//  We can't just say "sv0 == sv1" here because string_view::compare
-//  isn't constexpr until C++17, and we want to support back to C++14
-    return sv0.size() == sv1.size() && sv0.data() == sv1.data();
-    }
+    bool
+    test(T sv0) {
+  T sv1;
+  sv1 = sv0;
+  //  We can't just say "sv0 == sv1" here because string_view::compare
+  //  isn't constexpr until C++17, and we want to support back to C++14
+  return sv0.size() == sv1.size() && sv0.data() == sv1.data();
+}
 
 int main(int, char**) {
-
-    assert( test<std::string_view>    (  "1234"));
+  assert(test<std::string_view>("1234"));
 #ifndef TEST_HAS_NO_CHAR8_T
-    assert( test<std::u8string_view>  (u8"1234"));
+  assert(test<std::u8string_view>(u8"1234"));
 #endif
 #if TEST_STD_VER >= 11
-    assert( test<std::u16string_view> ( u"1234"));
-    assert( test<std::u32string_view> ( U"1234"));
+  assert(test<std::u16string_view>(u"1234"));
+  assert(test<std::u32string_view>(U"1234"));
 #endif
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    assert( test<std::wstring_view>   ( L"1234"));
+  assert(test<std::wstring_view>(L"1234"));
 #endif
 
 #if TEST_STD_VER > 11
-    static_assert( test<std::string_view>    ({  "abc", 3}), "");
+  static_assert(test<std::string_view>({"abc", 3}), "");
 #  ifndef TEST_HAS_NO_CHAR8_T
-    static_assert( test<std::u8string_view>  ({u8"abc", 3}), "");
-#   endif
-    static_assert( test<std::u16string_view> ({ u"abc", 3}), "");
-    static_assert( test<std::u32string_view> ({ U"abc", 3}), "");
-#   ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    static_assert( test<std::wstring_view>   ({ L"abc", 3}), "");
-#   endif
+  static_assert(test<std::u8string_view>({u8"abc", 3}), "");
+#  endif
+  static_assert(test<std::u16string_view>({u"abc", 3}), "");
+  static_assert(test<std::u32string_view>({U"abc", 3}), "");
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  static_assert(test<std::wstring_view>({L"abc", 3}), "");
+#  endif
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.cons/default.pass.cpp b/libcxx/test/std/strings/string.view/string.view.cons/default.pass.cpp
index aeb473121318118..7f32553aa48e0bf 100644
--- a/libcxx/test/std/strings/string.view/string.view.cons/default.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.cons/default.pass.cpp
@@ -17,34 +17,34 @@
 
 #include "test_macros.h"
 
-template<typename T>
-void test () {
+template <typename T>
+void test() {
 #if TEST_STD_VER > 11
-    {
+  {
     ASSERT_NOEXCEPT(T());
 
     constexpr T sv1;
-    static_assert ( sv1.size() == 0, "" );
-    static_assert ( sv1.empty(), "");
-    }
+    static_assert(sv1.size() == 0, "");
+    static_assert(sv1.empty(), "");
+  }
 #endif
 
-    {
+  {
     T sv1;
-    assert ( sv1.size() == 0 );
-    assert ( sv1.empty());
-    }
+    assert(sv1.size() == 0);
+    assert(sv1.empty());
+  }
 }
 
 int main(int, char**) {
-    test<std::string_view> ();
-    test<std::u16string_view> ();
+  test<std::string_view>();
+  test<std::u16string_view>();
 #ifndef TEST_HAS_NO_CHAR8_T
-    test<std::u8string_view> ();
+  test<std::u8string_view>();
 #endif
-    test<std::u32string_view> ();
+  test<std::u32string_view>();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test<std::wstring_view> ();
+  test<std::wstring_view>();
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.cons/from_iterator_sentinel.pass.cpp b/libcxx/test/std/strings/string.view/string.view.cons/from_iterator_sentinel.pass.cpp
index c1033631e373c77..f6f407b7876fcb5 100644
--- a/libcxx/test/std/strings/string.view/string.view.cons/from_iterator_sentinel.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.cons/from_iterator_sentinel.pass.cpp
@@ -19,14 +19,14 @@
 #include "make_string.h"
 #include "test_iterators.h"
 
-template<class It, class Sentinel, class CharT>
+template <class It, class Sentinel, class CharT>
 constexpr void test_construction(std::basic_string_view<CharT> val) {
   auto sv = std::basic_string_view<CharT>(It(val.data()), Sentinel(It(val.data() + val.size())));
   assert(sv.data() == val.data());
   assert(sv.size() == val.size());
 }
 
-template<class CharT>
+template <class CharT>
 constexpr void test_with_char() {
   const auto val = MAKE_STRING_VIEW(CharT, "test");
   test_construction<CharT*, CharT*>(val);
@@ -50,7 +50,7 @@ constexpr bool test() {
 }
 
 #ifndef TEST_HAS_NO_EXCEPTIONS
-template<class CharT>
+template <class CharT>
 struct ThrowingSentinel {
   friend bool operator==(const CharT*, ThrowingSentinel) noexcept { return true; }
   friend std::iter_
diff erence_t<const CharT*> operator-(const CharT*, ThrowingSentinel) noexcept { return {}; }
@@ -70,21 +70,23 @@ void test_throwing() {
 
 void test_throwing() {
   test_throwing<char>();
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
   test_throwing<wchar_t>();
-#endif
+#  endif
   test_throwing<char8_t>();
   test_throwing<char16_t>();
   test_throwing<char32_t>();
 }
 #endif
 
-static_assert( std::is_constructible_v<std::string_view, const char*, char*>);
-static_assert( std::is_constructible_v<std::string_view, char*, const char*>);
+static_assert(std::is_constructible_v<std::string_view, const char*, char*>);
+static_assert(std::is_constructible_v<std::string_view, char*, const char*>);
 static_assert(!std::is_constructible_v<std::string_view, char*, void*>);               // not a sentinel
 static_assert(!std::is_constructible_v<std::string_view, signed char*, signed char*>); // wrong char type
-static_assert(!std::is_constructible_v<std::string_view, random_access_iterator<char*>, random_access_iterator<char*>>); // not contiguous
-static_assert( std::is_constructible_v<std::string_view, contiguous_iterator<char*>, contiguous_iterator<char*>>);
+static_assert(!std::is_constructible_v<std::string_view,
+                                       random_access_iterator<char*>,
+                                       random_access_iterator<char*>>); // not contiguous
+static_assert(std::is_constructible_v<std::string_view, contiguous_iterator<char*>, contiguous_iterator<char*>>);
 
 int main(int, char**) {
   test();

diff  --git a/libcxx/test/std/strings/string.view/string.view.cons/from_literal.pass.cpp b/libcxx/test/std/strings/string.view/string.view.cons/from_literal.pass.cpp
index 2f1e478d088cb34..d48c2f9dc728d24 100644
--- a/libcxx/test/std/strings/string.view/string.view.cons/from_literal.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.cons/from_literal.pass.cpp
@@ -20,52 +20,53 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-template<typename CharT>
-size_t StrLen ( const CharT *s ) {
-    std::size_t retVal = 0;
-    while ( *s != 0 ) { ++retVal; ++s; }
-    return retVal;
-    }
-
-template<typename CharT>
-void test ( const CharT *s ) {
-    typedef std::basic_string_view<CharT> SV;
-//  I'd love to do this, but it would require traits::length() to be noexcept
-//  LIBCPP_ASSERT_NOEXCEPT(SV(s));
+template <typename CharT>
+size_t StrLen(const CharT* s) {
+  std::size_t retVal = 0;
+  while (*s != 0) {
+    ++retVal;
+    ++s;
+  }
+  return retVal;
+}
 
-    SV sv1 ( s );
-    assert ( sv1.size() == StrLen( s ));
-    assert ( sv1.data() == s );
-    }
+template <typename CharT>
+void test(const CharT* s) {
+  typedef std::basic_string_view<CharT> SV;
+  //  I'd love to do this, but it would require traits::length() to be noexcept
+  //  LIBCPP_ASSERT_NOEXCEPT(SV(s));
 
+  SV sv1(s);
+  assert(sv1.size() == StrLen(s));
+  assert(sv1.data() == s);
+}
 
 int main(int, char**) {
-
-    test ( "QBCDE" );
-    test ( "A" );
-    test ( "" );
+  test("QBCDE");
+  test("A");
+  test("");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test ( L"QBCDE" );
-    test ( L"A" );
-    test ( L"" );
+  test(L"QBCDE");
+  test(L"A");
+  test(L"");
 #endif
 
 #if TEST_STD_VER >= 11
-    test ( u"QBCDE" );
-    test ( u"A" );
-    test ( u"" );
+  test(u"QBCDE");
+  test(u"A");
+  test(u"");
 
-    test ( U"QBCDE" );
-    test ( U"A" );
-    test ( U"" );
+  test(U"QBCDE");
+  test(U"A");
+  test(U"");
 #endif
 
 #if TEST_STD_VER > 11
-    {
-    constexpr std::basic_string_view<char, constexpr_char_traits<char>> sv1 ( "ABCDE" );
-    static_assert ( sv1.size() == 5, "");
-    }
+  {
+    constexpr std::basic_string_view<char, constexpr_char_traits<char>> sv1("ABCDE");
+    static_assert(sv1.size() == 5, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.cons/from_ptr_len.pass.cpp b/libcxx/test/std/strings/string.view/string.view.cons/from_ptr_len.pass.cpp
index 8ff6061b48ecc7d..e59e2b2da067743 100644
--- a/libcxx/test/std/strings/string.view/string.view.cons/from_ptr_len.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.cons/from_ptr_len.pass.cpp
@@ -19,70 +19,69 @@
 
 #include "test_macros.h"
 
-template<typename CharT>
-void test ( const CharT *s, std::size_t sz ) {
-    {
+template <typename CharT>
+void test(const CharT* s, std::size_t sz) {
+  {
     typedef std::basic_string_view<CharT> SV;
     LIBCPP_ASSERT_NOEXCEPT(SV(s, sz));
 
-    SV sv1 ( s, sz );
-    assert ( sv1.size() == sz );
-    assert ( sv1.data() == s );
-    }
+    SV sv1(s, sz);
+    assert(sv1.size() == sz);
+    assert(sv1.data() == s);
+  }
 }
 
 int main(int, char**) {
-
-    test ( "QBCDE", 5 );
-    test ( "QBCDE", 2 );
-    test ( "", 0 );
+  test("QBCDE", 5);
+  test("QBCDE", 2);
+  test("", 0);
 #if TEST_STD_VER > 11
-    {
-    constexpr const char *s = "QBCDE";
-    constexpr std::basic_string_view<char> sv1 ( s, 2 );
-    static_assert ( sv1.size() == 2, "" );
-    static_assert ( sv1.data() == s, "" );
-    }
+  {
+    constexpr const char* s = "QBCDE";
+    constexpr std::basic_string_view<char> sv1(s, 2);
+    static_assert(sv1.size() == 2, "");
+    static_assert(sv1.data() == s, "");
+  }
 #endif
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test ( L"QBCDE", 5 );
-    test ( L"QBCDE", 2 );
-    test ( L"", 0 );
-#if TEST_STD_VER > 11
-    {
-    constexpr const wchar_t *s = L"QBCDE";
-    constexpr std::basic_string_view<wchar_t> sv1 ( s, 2 );
-    static_assert ( sv1.size() == 2, "" );
-    static_assert ( sv1.data() == s, "" );
-    }
-#endif
+  test(L"QBCDE", 5);
+  test(L"QBCDE", 2);
+  test(L"", 0);
+#  if TEST_STD_VER > 11
+  {
+    constexpr const wchar_t* s = L"QBCDE";
+    constexpr std::basic_string_view<wchar_t> sv1(s, 2);
+    static_assert(sv1.size() == 2, "");
+    static_assert(sv1.data() == s, "");
+  }
+#  endif
 #endif // TEST_HAS_NO_WIDE_CHARACTERS
 
 #if TEST_STD_VER >= 11
-    test ( u"QBCDE", 5 );
-    test ( u"QBCDE", 2 );
-    test ( u"", 0 );
-#if TEST_STD_VER > 11
-    {
-    constexpr const char16_t *s = u"QBCDE";
-    constexpr std::basic_string_view<char16_t> sv1 ( s, 2 );
-    static_assert ( sv1.size() == 2, "" );
-    static_assert ( sv1.data() == s, "" );
-    }
-#endif
+  test(u"QBCDE", 5);
+  test(u"QBCDE", 2);
+  test(u"", 0);
+#  if TEST_STD_VER > 11
+  {
+    constexpr const char16_t* s = u"QBCDE";
+    constexpr std::basic_string_view<char16_t> sv1(s, 2);
+    static_assert(sv1.size() == 2, "");
+    static_assert(sv1.data() == s, "");
+  }
+#  endif
 
-    test ( U"QBCDE", 5 );
-    test ( U"QBCDE", 2 );
-    test ( U"", 0 );
-#if TEST_STD_VER > 11
-    {
-    constexpr const char32_t *s = U"QBCDE";
-    constexpr std::basic_string_view<char32_t> sv1 ( s, 2 );
-    static_assert ( sv1.size() == 2, "" );
-    static_assert ( sv1.data() == s, "" );
-    }
-#endif
+  test(U"QBCDE", 5);
+  test(U"QBCDE", 2);
+  test(U"", 0);
+#  if TEST_STD_VER > 11
+  {
+    constexpr const char32_t* s = U"QBCDE";
+    constexpr std::basic_string_view<char32_t> sv1(s, 2);
+    static_assert(sv1.size() == 2, "");
+    static_assert(sv1.data() == s, "");
+  }
+#  endif
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.cons/from_range.pass.cpp b/libcxx/test/std/strings/string.view/string.view.cons/from_range.pass.cpp
index bf24d53aba890ce..742d40d15bbd87e 100644
--- a/libcxx/test/std/strings/string.view/string.view.cons/from_range.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.cons/from_range.pass.cpp
@@ -24,11 +24,11 @@
 #include "test_iterators.h"
 #include "test_range.h"
 
-template<class CharT>
+template <class CharT>
 constexpr void test() {
   auto data = MAKE_STRING_VIEW(CharT, "test");
   std::array<CharT, 4> arr;
-  for(int i = 0; i < 4; ++i) {
+  for (int i = 0; i < 4; ++i) {
     arr[i] = data[i];
   }
   auto sv = std::basic_string_view<CharT>(arr);
@@ -128,7 +128,10 @@ static_assert(!std::ranges::contiguous_range<SizedButNotContiguousRange>);
 static_assert(std::ranges::sized_range<SizedButNotContiguousRange>);
 static_assert(!std::is_constructible_v<std::string_view, SizedButNotContiguousRange>);
 
-using ContiguousButNotSizedRange = std::ranges::subrange<contiguous_iterator<char*>, sentinel_wrapper<contiguous_iterator<char*>>, std::ranges::subrange_kind::unsized>;
+using ContiguousButNotSizedRange =
+    std::ranges::subrange<contiguous_iterator<char*>,
+                          sentinel_wrapper<contiguous_iterator<char*>>,
+                          std::ranges::subrange_kind::unsized>;
 static_assert(std::ranges::contiguous_range<ContiguousButNotSizedRange>);
 static_assert(!std::ranges::sized_range<ContiguousButNotSizedRange>);
 static_assert(!std::is_constructible_v<std::string_view, ContiguousButNotSizedRange>);
@@ -141,7 +144,7 @@ struct WithStringViewConversionOperator {
   operator std::string_view() const { return {}; }
 };
 
-static_assert(std::is_constructible_v<std::string_view, WithStringViewConversionOperator>); // lvalue
+static_assert(std::is_constructible_v<std::string_view, WithStringViewConversionOperator>);        // lvalue
 static_assert(std::is_constructible_v<std::string_view, const WithStringViewConversionOperator&>); // const lvalue
 static_assert(std::is_constructible_v<std::string_view, WithStringViewConversionOperator&&>);      // rvalue
 
@@ -150,11 +153,14 @@ void test_throwing() {
   struct ThrowingData {
     char* begin() const { return nullptr; }
     char* end() const { return nullptr; }
-    char* data() const { throw 42; return nullptr; }
+    char* data() const {
+      throw 42;
+      return nullptr;
+    }
   };
   try {
     ThrowingData x;
-    (void) std::string_view(x);
+    (void)std::string_view(x);
     assert(false);
   } catch (int i) {
     assert(i == 42);
@@ -163,11 +169,14 @@ void test_throwing() {
   struct ThrowingSize {
     char* begin() const { return nullptr; }
     char* end() const { return nullptr; }
-    std::size_t size() const { throw 42; return 0; }
+    std::size_t size() const {
+      throw 42;
+      return 0;
+    }
   };
   try {
     ThrowingSize x;
-    (void) std::string_view(x);
+    (void)std::string_view(x);
     assert(false);
   } catch (int i) {
     assert(i == 42);
@@ -186,4 +195,3 @@ int main(int, char**) {
 
   return 0;
 }
-

diff  --git a/libcxx/test/std/strings/string.view/string.view.cons/from_string.pass.cpp b/libcxx/test/std/strings/string.view/string.view.cons/from_string.pass.cpp
index b30a8a9019b9a75..5b4cb20436381ca 100644
--- a/libcxx/test/std/strings/string.view/string.view.cons/from_string.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.cons/from_string.pass.cpp
@@ -21,48 +21,46 @@
 
 struct dummy_char_traits : public std::char_traits<char> {};
 
-template<typename CharT, typename Traits>
-void test ( const std::basic_string<CharT, Traits> &str ) {
-    typedef std::basic_string_view<CharT, Traits> SV;
-    ASSERT_NOEXCEPT(SV(str));
-
-    SV sv1 ( str );
-    assert ( sv1.size() == str.size());
-    assert ( sv1.data() == str.data());
+template <typename CharT, typename Traits>
+void test(const std::basic_string<CharT, Traits>& str) {
+  typedef std::basic_string_view<CharT, Traits> SV;
+  ASSERT_NOEXCEPT(SV(str));
+
+  SV sv1(str);
+  assert(sv1.size() == str.size());
+  assert(sv1.data() == str.data());
 }
 
 int main(int, char**) {
-
-    test ( std::string("QBCDE") );
-    test ( std::string("") );
-    test ( std::string() );
+  test(std::string("QBCDE"));
+  test(std::string(""));
+  test(std::string());
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test ( std::wstring(L"QBCDE") );
-    test ( std::wstring(L"") );
-    test ( std::wstring() );
+  test(std::wstring(L"QBCDE"));
+  test(std::wstring(L""));
+  test(std::wstring());
 #endif
 
 #ifndef TEST_HAS_NO_CHAR8_T
-    test ( std::u8string{u8"QBCDE"} );
-    test ( std::u8string{u8""} );
-    test ( std::u8string{} );
+  test(std::u8string{u8"QBCDE"});
+  test(std::u8string{u8""});
+  test(std::u8string{});
 #endif
 
 #if TEST_STD_VER >= 11
-    test ( std::u16string{u"QBCDE"} );
-    test ( std::u16string{u""} );
-    test ( std::u16string{} );
+  test(std::u16string{u"QBCDE"});
+  test(std::u16string{u""});
+  test(std::u16string{});
 
-    test ( std::u32string{U"QBCDE"} );
-    test ( std::u32string{U""} );
-    test ( std::u32string{} );
+  test(std::u32string{U"QBCDE"});
+  test(std::u32string{U""});
+  test(std::u32string{});
 #endif
 
-    test ( std::basic_string<char, dummy_char_traits>("QBCDE") );
-    test ( std::basic_string<char, dummy_char_traits>("") );
-    test ( std::basic_string<char, dummy_char_traits>() );
-
+  test(std::basic_string<char, dummy_char_traits>("QBCDE"));
+  test(std::basic_string<char, dummy_char_traits>(""));
+  test(std::basic_string<char, dummy_char_traits>());
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.cons/implicit_deduction_guides.pass.cpp b/libcxx/test/std/strings/string.view/string.view.cons/implicit_deduction_guides.pass.cpp
index 35c10da4bb86e55..534b024480febea 100644
--- a/libcxx/test/std/strings/string.view/string.view.cons/implicit_deduction_guides.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.cons/implicit_deduction_guides.pass.cpp
@@ -25,12 +25,11 @@
 // (2)  basic_string_view(const basic_string_view&)
 // (3)  basic_string_view(const CharT*, size_type)
 // (4)  basic_string_view(const CharT*)
-int main(int, char**)
-{
-  { // Testing (1)
-    // Nothing to do. Cannot deduce without any arguments.
-  }
-  { // Testing (2)
+int main(int, char**) {
+  {
+      // Testing (1)
+      // Nothing to do. Cannot deduce without any arguments.
+  } { // Testing (2)
     const std::string_view sin("abc");
     std::basic_string_view s(sin);
     ASSERT_SAME_TYPE(decltype(s), std::string_view);

diff  --git a/libcxx/test/std/strings/string.view/string.view.deduct/iterator_sentinel.pass.cpp b/libcxx/test/std/strings/string.view/string.view.deduct/iterator_sentinel.pass.cpp
index 6b811f7944340fd..21d881cbcab6058 100644
--- a/libcxx/test/std/strings/string.view/string.view.deduct/iterator_sentinel.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.deduct/iterator_sentinel.pass.cpp
@@ -19,7 +19,7 @@
 #include "test_macros.h"
 #include "test_iterators.h"
 
-template<class It, class Sentinel, class CharT>
+template <class It, class Sentinel, class CharT>
 constexpr void test_ctad(std::basic_string_view<CharT> val) {
   auto sv = std::basic_string_view(It(val.data()), Sentinel(It(val.data() + val.size())));
   ASSERT_SAME_TYPE(decltype(sv), std::basic_string_view<CharT>);
@@ -27,7 +27,7 @@ constexpr void test_ctad(std::basic_string_view<CharT> val) {
   assert(sv.size() == val.size());
 }
 
-template<class CharT>
+template <class CharT>
 constexpr void test_with_char() {
   const auto val = MAKE_STRING_VIEW(CharT, "test");
   test_ctad<CharT*, CharT*>(val);

diff  --git a/libcxx/test/std/strings/string.view/string.view.deduct/range.pass.cpp b/libcxx/test/std/strings/string.view/string.view.deduct/range.pass.cpp
index 3284201e0c121d6..8bf88c70417fe14 100644
--- a/libcxx/test/std/strings/string.view/string.view.deduct/range.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.deduct/range.pass.cpp
@@ -19,10 +19,10 @@
 #include "test_iterators.h"
 #include "test_macros.h"
 
-template<class CharT>
+template <class CharT>
 void test() {
   auto val = MAKE_STRING(CharT, "test");
-  auto sv = std::basic_string_view(val);
+  auto sv  = std::basic_string_view(val);
   ASSERT_SAME_TYPE(decltype(sv), std::basic_string_view<CharT>);
   assert(sv.size() == val.size());
   assert(sv.data() == val.data());
@@ -39,7 +39,7 @@ void test() {
   test<char>();
 
   struct Widget {
-    const char16_t *data_ = u"foo";
+    const char16_t* data_ = u"foo";
     contiguous_iterator<const char16_t*> begin() const { return contiguous_iterator<const char16_t*>(data_); }
     contiguous_iterator<const char16_t*> end() const { return contiguous_iterator<const char16_t*>(data_ + 3); }
   };
@@ -52,4 +52,3 @@ int main(int, char**) {
 
   return 0;
 }
-

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_char_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_char_size.pass.cpp
index 15f61ab4c318616..879eef336c42578 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_char_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_char_size.pass.cpp
@@ -19,28 +19,22 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, typename S::value_type c, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(c, pos));
-    assert(s.find(c, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x + 1 <= s.size());
+void test(const S& s, typename S::value_type c, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(c, pos));
+  assert(s.find(c, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x + 1 <= s.size());
 }
 
 template <class S>
-void
-test(const S& s, typename S::value_type c, typename S::size_type x)
-{
-    assert(s.find(c) == x);
-    if (x != S::npos)
-        assert(0 <= x && x + 1 <= s.size());
+void test(const S& s, typename S::value_type c, typename S::size_type x) {
+  assert(s.find(c) == x);
+  if (x != S::npos)
+    assert(0 <= x && x + 1 <= s.size());
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test(S(""), 'c', 0, S::npos);
     test(S(""), 'c', 1, S::npos);
@@ -67,22 +61,22 @@ int main(int, char**)
     test(S("abcde"), 'c', 2);
     test(S("abcdeabcde"), 'c', 2);
     test(S("abcdeabcdeabcdeabcde"), 'c', 2);
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find( 'c', 0 ) == SV::npos, "" );
-    static_assert (sv1.find( 'c', 1 ) == SV::npos, "" );
-    static_assert (sv2.find( 'c', 0 ) == 2, "" );
-    static_assert (sv2.find( 'c', 1 ) == 2, "" );
-    static_assert (sv2.find( 'c', 2 ) == 2, "" );
-    static_assert (sv2.find( 'c', 3 ) == SV::npos, "" );
-    static_assert (sv2.find( 'c', 4 ) == SV::npos, "" );
-    }
+    static_assert(sv1.find('c', 0) == SV::npos, "");
+    static_assert(sv1.find('c', 1) == SV::npos, "");
+    static_assert(sv2.find('c', 0) == 2, "");
+    static_assert(sv2.find('c', 1) == 2, "");
+    static_assert(sv2.find('c', 2) == 2, "");
+    static_assert(sv2.find('c', 3) == SV::npos, "");
+    static_assert(sv2.find('c', 4) == SV::npos, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_char_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_char_size.pass.cpp
index 10a92713f168195..04336f6c451a720 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_char_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_char_size.pass.cpp
@@ -19,29 +19,23 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, typename S::value_type c, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(c, pos));
-    assert(s.find_first_not_of(c, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+void test(const S& s, typename S::value_type c, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(c, pos));
+  assert(s.find_first_not_of(c, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-void
-test(const S& s, typename S::value_type c, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(c));
-    assert(s.find_first_not_of(c) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+void test(const S& s, typename S::value_type c, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(c));
+  assert(s.find_first_not_of(c) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test(S(""), 'q', 0, S::npos);
     test(S(""), 'q', 1, S::npos);
@@ -70,20 +64,20 @@ int main(int, char**)
     test(S("csope"), 'q', 0);
     test(S("gfsmthlkon"), 'q', 0);
     test(S("laenfsbridchgotmkqpj"), 'q', 0);
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find_first_not_of( 'q', 0 ) == SV::npos, "" );
-    static_assert (sv1.find_first_not_of( 'q', 1 ) == SV::npos, "" );
-    static_assert (sv2.find_first_not_of( 'q', 0 ) == 0, "" );
-    static_assert (sv2.find_first_not_of( 'q', 1 ) == 1, "" );
-    static_assert (sv2.find_first_not_of( 'q', 5 ) == SV::npos, "" );
-    }
+    static_assert(sv1.find_first_not_of('q', 0) == SV::npos, "");
+    static_assert(sv1.find_first_not_of('q', 1) == SV::npos, "");
+    static_assert(sv2.find_first_not_of('q', 0) == 0, "");
+    static_assert(sv2.find_first_not_of('q', 1) == 1, "");
+    static_assert(sv2.find_first_not_of('q', 5) == SV::npos, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_pointer_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_pointer_size.pass.cpp
index 90da2a471e9015b..08c2da64413b65f 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_pointer_size.pass.cpp
@@ -19,151 +19,143 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str, pos));
-    assert(s.find_first_not_of(str, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+void test(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str, pos));
+  assert(s.find_first_not_of(str, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type x)
-{
-    assert(s.find_first_not_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+void test(const S& s, const typename S::value_type* str, typename S::size_type x) {
+  assert(s.find_first_not_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), "", 0, S::npos);
-    test(S(""), "laenf", 0, S::npos);
-    test(S(""), "pqlnkmbdjo", 0, S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
-    test(S(""), "", 1, S::npos);
-    test(S(""), "bjaht", 1, S::npos);
-    test(S(""), "hjlcmgpket", 1, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
-    test(S("fodgq"), "", 0, 0);
-    test(S("qanej"), "dfkap", 0, 0);
-    test(S("clbao"), "ihqrfebgad", 0, 0);
-    test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, S::npos);
-    test(S("srdfq"), "", 1, 1);
-    test(S("oemth"), "ikcrq", 1, 1);
-    test(S("cdaih"), "dmajblfhsg", 1, 3);
-    test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, S::npos);
-    test(S("cshmd"), "", 2, 2);
-    test(S("lhcdo"), "oebqi", 2, 2);
-    test(S("qnsoh"), "kojhpmbsfe", 2, S::npos);
-    test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, S::npos);
-    test(S("fmtsp"), "", 4, 4);
-    test(S("khbpm"), "aobjd", 4, 4);
-    test(S("pbsji"), "pcbahntsje", 4, 4);
-    test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, S::npos);
-    test(S("eqmpa"), "", 5, S::npos);
-    test(S("omigs"), "kocgb", 5, S::npos);
-    test(S("onmje"), "fbslrjiqkm", 5, S::npos);
-    test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, S::npos);
-    test(S("schfa"), "", 6, S::npos);
-    test(S("igdsc"), "qngpd", 6, S::npos);
-    test(S("brqgo"), "rodhqklgmb", 6, S::npos);
-    test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, S::npos);
-    test(S("hcjitbfapl"), "", 0, 0);
-    test(S("daiprenocl"), "ashjd", 0, 2);
-    test(S("litpcfdghe"), "mgojkldsqh", 0, 1);
-    test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, S::npos);
-    test(S("qpghtfbaji"), "", 1, 1);
-    test(S("gfshlcmdjr"), "nadkh", 1, 1);
-    test(S("nkodajteqp"), "ofdrqmkebl", 1, 4);
-    test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, S::npos);
-    test(S("crnklpmegd"), "", 5, 5);
-    test(S("jsbtafedoc"), "prqgn", 5, 5);
-    test(S("qnmodrtkeb"), "pejafmnokr", 5, 6);
-    test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, S::npos);
-    test(S("lmofqdhpki"), "", 9, 9);
-    test(S("hnefkqimca"), "rtjpa", 9, S::npos);
-    test(S("drtasbgmfp"), "ktsrmnqagd", 9, 9);
-    test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, S::npos);
-    test(S("elgofjmbrq"), "", 10, S::npos);
-    test(S("mjqdgalkpc"), "dplqa", 10, S::npos);
-    test(S("kthqnfcerm"), "dkacjoptns", 10, S::npos);
-    test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, S::npos);
-    test(S("eqsgalomhb"), "", 11, S::npos);
-    test(S("akiteljmoh"), "lofbc", 11, S::npos);
-    test(S("hlbdfreqjo"), "astoegbfpn", 11, S::npos);
-    test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), "", 0, 0);
-    test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, 0);
-    test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, 1);
-    test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, S::npos);
-    test(S("jlnkraeodhcspfgbqitm"), "", 1, 1);
-    test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, 1);
-    test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 3);
-    test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, S::npos);
-    test(S("hdpkobnsalmcfijregtq"), "", 10, 10);
-    test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 11);
-    test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 13);
-    test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, S::npos);
-    test(S("niptglfbosehkamrdqcj"), "", 19, 19);
-    test(S("copqdhstbingamjfkler"), "djkqc", 19, 19);
-    test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, S::npos);
-    test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, S::npos);
-    test(S("eaintpchlqsbdgrkjofm"), "", 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, S::npos);
-    test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, S::npos);
-    test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), "", 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, S::npos);
-    test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, S::npos);
-    test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, S::npos);
+void test0() {
+  test(S(""), "", 0, S::npos);
+  test(S(""), "laenf", 0, S::npos);
+  test(S(""), "pqlnkmbdjo", 0, S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
+  test(S(""), "", 1, S::npos);
+  test(S(""), "bjaht", 1, S::npos);
+  test(S(""), "hjlcmgpket", 1, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
+  test(S("fodgq"), "", 0, 0);
+  test(S("qanej"), "dfkap", 0, 0);
+  test(S("clbao"), "ihqrfebgad", 0, 0);
+  test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, S::npos);
+  test(S("srdfq"), "", 1, 1);
+  test(S("oemth"), "ikcrq", 1, 1);
+  test(S("cdaih"), "dmajblfhsg", 1, 3);
+  test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, S::npos);
+  test(S("cshmd"), "", 2, 2);
+  test(S("lhcdo"), "oebqi", 2, 2);
+  test(S("qnsoh"), "kojhpmbsfe", 2, S::npos);
+  test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, S::npos);
+  test(S("fmtsp"), "", 4, 4);
+  test(S("khbpm"), "aobjd", 4, 4);
+  test(S("pbsji"), "pcbahntsje", 4, 4);
+  test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, S::npos);
+  test(S("eqmpa"), "", 5, S::npos);
+  test(S("omigs"), "kocgb", 5, S::npos);
+  test(S("onmje"), "fbslrjiqkm", 5, S::npos);
+  test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, S::npos);
+  test(S("schfa"), "", 6, S::npos);
+  test(S("igdsc"), "qngpd", 6, S::npos);
+  test(S("brqgo"), "rodhqklgmb", 6, S::npos);
+  test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, S::npos);
+  test(S("hcjitbfapl"), "", 0, 0);
+  test(S("daiprenocl"), "ashjd", 0, 2);
+  test(S("litpcfdghe"), "mgojkldsqh", 0, 1);
+  test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, S::npos);
+  test(S("qpghtfbaji"), "", 1, 1);
+  test(S("gfshlcmdjr"), "nadkh", 1, 1);
+  test(S("nkodajteqp"), "ofdrqmkebl", 1, 4);
+  test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, S::npos);
+  test(S("crnklpmegd"), "", 5, 5);
+  test(S("jsbtafedoc"), "prqgn", 5, 5);
+  test(S("qnmodrtkeb"), "pejafmnokr", 5, 6);
+  test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, S::npos);
+  test(S("lmofqdhpki"), "", 9, 9);
+  test(S("hnefkqimca"), "rtjpa", 9, S::npos);
+  test(S("drtasbgmfp"), "ktsrmnqagd", 9, 9);
+  test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, S::npos);
+  test(S("elgofjmbrq"), "", 10, S::npos);
+  test(S("mjqdgalkpc"), "dplqa", 10, S::npos);
+  test(S("kthqnfcerm"), "dkacjoptns", 10, S::npos);
+  test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, S::npos);
+  test(S("eqsgalomhb"), "", 11, S::npos);
+  test(S("akiteljmoh"), "lofbc", 11, S::npos);
+  test(S("hlbdfreqjo"), "astoegbfpn", 11, S::npos);
+  test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), "", 0, 0);
+  test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, 0);
+  test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, 1);
+  test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, S::npos);
+  test(S("jlnkraeodhcspfgbqitm"), "", 1, 1);
+  test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, 1);
+  test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 3);
+  test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, S::npos);
+  test(S("hdpkobnsalmcfijregtq"), "", 10, 10);
+  test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 11);
+  test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 13);
+  test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, S::npos);
+  test(S("niptglfbosehkamrdqcj"), "", 19, 19);
+  test(S("copqdhstbingamjfkler"), "djkqc", 19, 19);
+  test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, S::npos);
+  test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, S::npos);
+  test(S("eaintpchlqsbdgrkjofm"), "", 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, S::npos);
+  test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, S::npos);
+  test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), "", 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, S::npos);
+  test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, S::npos);
+  test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, S::npos);
 }
 
 template <class S>
-void test1()
-{
-    test(S(""), "", S::npos);
-    test(S(""), "laenf", S::npos);
-    test(S(""), "pqlnkmbdjo", S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", S::npos);
-    test(S("nhmko"), "", 0);
-    test(S("lahfb"), "irkhs", 0);
-    test(S("gmfhd"), "kantesmpgj", 2);
-    test(S("odaft"), "oknlrstdpiqmjbaghcfe", S::npos);
-    test(S("eolhfgpjqk"), "", 0);
-    test(S("nbatdlmekr"), "bnrpe", 2);
-    test(S("jdmciepkaq"), "jtdaefblso", 2);
-    test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", S::npos);
-    test(S("gprdcokbnjhlsfmtieqa"), "", 0);
-    test(S("qjghlnftcaismkropdeb"), "bjaht", 0);
-    test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 1);
-    test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", S::npos);
+void test1() {
+  test(S(""), "", S::npos);
+  test(S(""), "laenf", S::npos);
+  test(S(""), "pqlnkmbdjo", S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", S::npos);
+  test(S("nhmko"), "", 0);
+  test(S("lahfb"), "irkhs", 0);
+  test(S("gmfhd"), "kantesmpgj", 2);
+  test(S("odaft"), "oknlrstdpiqmjbaghcfe", S::npos);
+  test(S("eolhfgpjqk"), "", 0);
+  test(S("nbatdlmekr"), "bnrpe", 2);
+  test(S("jdmciepkaq"), "jtdaefblso", 2);
+  test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", S::npos);
+  test(S("gprdcokbnjhlsfmtieqa"), "", 0);
+  test(S("qjghlnftcaismkropdeb"), "bjaht", 0);
+  test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 1);
+  test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", S::npos);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find_first_not_of( "",      0) == SV::npos, "" );
-    static_assert (sv1.find_first_not_of( "irkhs", 0) == SV::npos, "" );
-    static_assert (sv2.find_first_not_of( "",      0) == 0, "" );
-    static_assert (sv2.find_first_not_of( "gfsrt", 0) == 0, "" );
-    static_assert (sv2.find_first_not_of( "lecar", 0) == 1, "" );
-    }
+    static_assert(sv1.find_first_not_of("", 0) == SV::npos, "");
+    static_assert(sv1.find_first_not_of("irkhs", 0) == SV::npos, "");
+    static_assert(sv2.find_first_not_of("", 0) == 0, "");
+    static_assert(sv2.find_first_not_of("gfsrt", 0) == 0, "");
+    static_assert(sv2.find_first_not_of("lecar", 0) == 1, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_pointer_size_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_pointer_size_size.pass.cpp
index 69cefa7a52045ab..c061d9955822b07 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_pointer_size_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_pointer_size_size.pass.cpp
@@ -19,378 +19,374 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type n, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str, pos, n));
-    assert(s.find_first_not_of(str, pos, n) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+void test(const S& s,
+          const typename S::value_type* str,
+          typename S::size_type pos,
+          typename S::size_type n,
+          typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str, pos, n));
+  assert(s.find_first_not_of(str, pos, n) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), "", 0, 0, S::npos);
-    test(S(""), "irkhs", 0, 0, S::npos);
-    test(S(""), "kante", 0, 1, S::npos);
-    test(S(""), "oknlr", 0, 2, S::npos);
-    test(S(""), "pcdro", 0, 4, S::npos);
-    test(S(""), "bnrpe", 0, 5, S::npos);
-    test(S(""), "jtdaefblso", 0, 0, S::npos);
-    test(S(""), "oselktgbca", 0, 1, S::npos);
-    test(S(""), "eqgaplhckj", 0, 5, S::npos);
-    test(S(""), "bjahtcmnlp", 0, 9, S::npos);
-    test(S(""), "hjlcmgpket", 0, 10, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
-    test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
-    test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
-    test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
-    test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
-    test(S(""), "", 1, 0, S::npos);
-    test(S(""), "lbtqd", 1, 0, S::npos);
-    test(S(""), "tboim", 1, 1, S::npos);
-    test(S(""), "slcer", 1, 2, S::npos);
-    test(S(""), "cbjfs", 1, 4, S::npos);
-    test(S(""), "aqibs", 1, 5, S::npos);
-    test(S(""), "gtfblmqinc", 1, 0, S::npos);
-    test(S(""), "mkqpbtdalg", 1, 1, S::npos);
-    test(S(""), "kphatlimcd", 1, 5, S::npos);
-    test(S(""), "pblasqogic", 1, 9, S::npos);
-    test(S(""), "arosdhcfme", 1, 10, S::npos);
-    test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
-    test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
-    test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
-    test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
-    test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
-    test(S("eaint"), "", 0, 0, 0);
-    test(S("binja"), "gfsrt", 0, 0, 0);
-    test(S("latkm"), "pfsoc", 0, 1, 0);
-    test(S("lecfr"), "tpflm", 0, 2, 0);
-    test(S("eqkst"), "sgkec", 0, 4, 1);
-    test(S("cdafr"), "romds", 0, 5, 0);
-    test(S("prbhe"), "qhjistlgmr", 0, 0, 0);
-    test(S("lbisk"), "pedfirsglo", 0, 1, 0);
-    test(S("hrlpd"), "aqcoslgrmk", 0, 5, 0);
-    test(S("ehmja"), "dabckmepqj", 0, 9, 1);
-    test(S("mhqgd"), "pqscrjthli", 0, 10, 0);
-    test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, 0);
-    test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, 0);
-    test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, 0);
-    test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, S::npos);
-    test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, S::npos);
-    test(S("clrgb"), "", 1, 0, 1);
-    test(S("tjmek"), "osmia", 1, 0, 1);
-    test(S("bgstp"), "ckonl", 1, 1, 1);
-    test(S("hstrk"), "ilcaj", 1, 2, 1);
-    test(S("kmspj"), "lasiq", 1, 4, 1);
-    test(S("tjboh"), "kfqmr", 1, 5, 1);
-    test(S("ilbcj"), "klnitfaobg", 1, 0, 1);
-    test(S("jkngf"), "gjhmdlqikp", 1, 1, 1);
-    test(S("gfcql"), "skbgtahqej", 1, 5, 1);
-    test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 1);
-    test(S("bthpg"), "bjgfmnlkio", 1, 10, 1);
-    test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, 1);
-    test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, 1);
-    test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 3);
-    test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, S::npos);
-    test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, S::npos);
-    test(S("ndrhl"), "", 2, 0, 2);
-    test(S("mrecp"), "otkgb", 2, 0, 2);
-    test(S("qlasf"), "cqsjl", 2, 1, 2);
-    test(S("smaqd"), "dpifl", 2, 2, 2);
-    test(S("hjeni"), "oapht", 2, 4, 2);
-    test(S("ocmfj"), "cifts", 2, 5, 2);
-    test(S("hmftq"), "nmsckbgalo", 2, 0, 2);
-    test(S("fklad"), "tpksqhamle", 2, 1, 2);
-    test(S("dirnm"), "tpdrchmkji", 2, 5, 3);
-    test(S("hrgdc"), "ijagfkblst", 2, 9, 3);
-    test(S("ifakg"), "kpocsignjb", 2, 10, 2);
-    test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, 2);
-    test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, 2);
-    test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 2);
-    test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, S::npos);
-    test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, S::npos);
-    test(S("cjgao"), "", 4, 0, 4);
-    test(S("kjplq"), "mabns", 4, 0, 4);
-    test(S("herni"), "bdnrp", 4, 1, 4);
-    test(S("tadrb"), "scidp", 4, 2, 4);
-    test(S("pkfeo"), "agbjl", 4, 4, 4);
-    test(S("hoser"), "jfmpr", 4, 5, S::npos);
-    test(S("kgrsp"), "rbpefghsmj", 4, 0, 4);
-    test(S("pgejb"), "apsfntdoqc", 4, 1, 4);
-    test(S("thlnq"), "ndkjeisgcl", 4, 5, 4);
-    test(S("nbmit"), "rnfpqatdeo", 4, 9, S::npos);
-    test(S("jgmib"), "bntjlqrfik", 4, 10, S::npos);
-    test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, 4);
-    test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, 4);
-    test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, S::npos);
-    test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, S::npos);
-    test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, S::npos);
-    test(S("klopi"), "", 5, 0, S::npos);
-    test(S("dajhn"), "psthd", 5, 0, S::npos);
-    test(S("jbgno"), "rpmjd", 5, 1, S::npos);
-    test(S("hkjae"), "dfsmk", 5, 2, S::npos);
+void test0() {
+  test(S(""), "", 0, 0, S::npos);
+  test(S(""), "irkhs", 0, 0, S::npos);
+  test(S(""), "kante", 0, 1, S::npos);
+  test(S(""), "oknlr", 0, 2, S::npos);
+  test(S(""), "pcdro", 0, 4, S::npos);
+  test(S(""), "bnrpe", 0, 5, S::npos);
+  test(S(""), "jtdaefblso", 0, 0, S::npos);
+  test(S(""), "oselktgbca", 0, 1, S::npos);
+  test(S(""), "eqgaplhckj", 0, 5, S::npos);
+  test(S(""), "bjahtcmnlp", 0, 9, S::npos);
+  test(S(""), "hjlcmgpket", 0, 10, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
+  test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
+  test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
+  test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
+  test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
+  test(S(""), "", 1, 0, S::npos);
+  test(S(""), "lbtqd", 1, 0, S::npos);
+  test(S(""), "tboim", 1, 1, S::npos);
+  test(S(""), "slcer", 1, 2, S::npos);
+  test(S(""), "cbjfs", 1, 4, S::npos);
+  test(S(""), "aqibs", 1, 5, S::npos);
+  test(S(""), "gtfblmqinc", 1, 0, S::npos);
+  test(S(""), "mkqpbtdalg", 1, 1, S::npos);
+  test(S(""), "kphatlimcd", 1, 5, S::npos);
+  test(S(""), "pblasqogic", 1, 9, S::npos);
+  test(S(""), "arosdhcfme", 1, 10, S::npos);
+  test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
+  test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
+  test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
+  test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
+  test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
+  test(S("eaint"), "", 0, 0, 0);
+  test(S("binja"), "gfsrt", 0, 0, 0);
+  test(S("latkm"), "pfsoc", 0, 1, 0);
+  test(S("lecfr"), "tpflm", 0, 2, 0);
+  test(S("eqkst"), "sgkec", 0, 4, 1);
+  test(S("cdafr"), "romds", 0, 5, 0);
+  test(S("prbhe"), "qhjistlgmr", 0, 0, 0);
+  test(S("lbisk"), "pedfirsglo", 0, 1, 0);
+  test(S("hrlpd"), "aqcoslgrmk", 0, 5, 0);
+  test(S("ehmja"), "dabckmepqj", 0, 9, 1);
+  test(S("mhqgd"), "pqscrjthli", 0, 10, 0);
+  test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, 0);
+  test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, 0);
+  test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, 0);
+  test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, S::npos);
+  test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, S::npos);
+  test(S("clrgb"), "", 1, 0, 1);
+  test(S("tjmek"), "osmia", 1, 0, 1);
+  test(S("bgstp"), "ckonl", 1, 1, 1);
+  test(S("hstrk"), "ilcaj", 1, 2, 1);
+  test(S("kmspj"), "lasiq", 1, 4, 1);
+  test(S("tjboh"), "kfqmr", 1, 5, 1);
+  test(S("ilbcj"), "klnitfaobg", 1, 0, 1);
+  test(S("jkngf"), "gjhmdlqikp", 1, 1, 1);
+  test(S("gfcql"), "skbgtahqej", 1, 5, 1);
+  test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 1);
+  test(S("bthpg"), "bjgfmnlkio", 1, 10, 1);
+  test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, 1);
+  test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, 1);
+  test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 3);
+  test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, S::npos);
+  test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, S::npos);
+  test(S("ndrhl"), "", 2, 0, 2);
+  test(S("mrecp"), "otkgb", 2, 0, 2);
+  test(S("qlasf"), "cqsjl", 2, 1, 2);
+  test(S("smaqd"), "dpifl", 2, 2, 2);
+  test(S("hjeni"), "oapht", 2, 4, 2);
+  test(S("ocmfj"), "cifts", 2, 5, 2);
+  test(S("hmftq"), "nmsckbgalo", 2, 0, 2);
+  test(S("fklad"), "tpksqhamle", 2, 1, 2);
+  test(S("dirnm"), "tpdrchmkji", 2, 5, 3);
+  test(S("hrgdc"), "ijagfkblst", 2, 9, 3);
+  test(S("ifakg"), "kpocsignjb", 2, 10, 2);
+  test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, 2);
+  test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, 2);
+  test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 2);
+  test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, S::npos);
+  test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, S::npos);
+  test(S("cjgao"), "", 4, 0, 4);
+  test(S("kjplq"), "mabns", 4, 0, 4);
+  test(S("herni"), "bdnrp", 4, 1, 4);
+  test(S("tadrb"), "scidp", 4, 2, 4);
+  test(S("pkfeo"), "agbjl", 4, 4, 4);
+  test(S("hoser"), "jfmpr", 4, 5, S::npos);
+  test(S("kgrsp"), "rbpefghsmj", 4, 0, 4);
+  test(S("pgejb"), "apsfntdoqc", 4, 1, 4);
+  test(S("thlnq"), "ndkjeisgcl", 4, 5, 4);
+  test(S("nbmit"), "rnfpqatdeo", 4, 9, S::npos);
+  test(S("jgmib"), "bntjlqrfik", 4, 10, S::npos);
+  test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, 4);
+  test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, 4);
+  test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, S::npos);
+  test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, S::npos);
+  test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, S::npos);
+  test(S("klopi"), "", 5, 0, S::npos);
+  test(S("dajhn"), "psthd", 5, 0, S::npos);
+  test(S("jbgno"), "rpmjd", 5, 1, S::npos);
+  test(S("hkjae"), "dfsmk", 5, 2, S::npos);
 }
 
 template <class S>
-void test1()
-{
-    test(S("gbhqo"), "skqne", 5, 4, S::npos);
-    test(S("ktdor"), "kipnf", 5, 5, S::npos);
-    test(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos);
-    test(S("egmjk"), "fsmjcdairn", 5, 1, S::npos);
-    test(S("armql"), "pcdgltbrfj", 5, 5, S::npos);
-    test(S("cdhjo"), "aekfctpirg", 5, 9, S::npos);
-    test(S("jcons"), "ledihrsgpf", 5, 10, S::npos);
-    test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos);
-    test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos);
-    test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, S::npos);
-    test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, S::npos);
-    test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos);
-    test(S("gajqn"), "", 6, 0, S::npos);
-    test(S("stedk"), "hrnat", 6, 0, S::npos);
-    test(S("tjkaf"), "gsqdt", 6, 1, S::npos);
-    test(S("dthpe"), "bspkd", 6, 2, S::npos);
-    test(S("klhde"), "ohcmb", 6, 4, S::npos);
-    test(S("bhlki"), "heatr", 6, 5, S::npos);
-    test(S("lqmoh"), "pmblckedfn", 6, 0, S::npos);
-    test(S("mtqin"), "aceqmsrbik", 6, 1, S::npos);
-    test(S("dpqbr"), "lmbtdehjrn", 6, 5, S::npos);
-    test(S("kdhmo"), "teqmcrlgib", 6, 9, S::npos);
-    test(S("jblqp"), "njolbmspac", 6, 10, S::npos);
-    test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos);
-    test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos);
-    test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, S::npos);
-    test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos);
-    test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos);
-    test(S("jnkrfhotgl"), "", 0, 0, 0);
-    test(S("dltjfngbko"), "rqegt", 0, 0, 0);
-    test(S("bmjlpkiqde"), "dashm", 0, 1, 0);
-    test(S("skrflobnqm"), "jqirk", 0, 2, 0);
-    test(S("jkpldtshrm"), "rckeg", 0, 4, 0);
-    test(S("ghasdbnjqo"), "jscie", 0, 5, 0);
-    test(S("igrkhpbqjt"), "efsphndliq", 0, 0, 0);
-    test(S("ikthdgcamf"), "gdicosleja", 0, 1, 0);
-    test(S("pcofgeniam"), "qcpjibosfl", 0, 5, 2);
-    test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 4);
-    test(S("itphbqsker"), "dtablcrseo", 0, 10, 0);
-    test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, 0);
-    test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, 0);
-    test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 0);
-    test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 1);
-    test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, S::npos);
-    test(S("shbcqnmoar"), "", 1, 0, 1);
-    test(S("bdoshlmfin"), "ontrs", 1, 0, 1);
-    test(S("khfrebnsgq"), "pfkna", 1, 1, 1);
-    test(S("getcrsaoji"), "ekosa", 1, 2, 2);
-    test(S("fjiknedcpq"), "anqhk", 1, 4, 1);
-    test(S("tkejgnafrm"), "jekca", 1, 5, 4);
-    test(S("jnakolqrde"), "ikemsjgacf", 1, 0, 1);
-    test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, 1);
-    test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 3);
-    test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 1);
-    test(S("cigfqkated"), "sqcflrgtim", 1, 10, 5);
-    test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, 1);
-    test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, 1);
-    test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 5);
-    test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 5);
-    test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, S::npos);
-    test(S("ectnhskflp"), "", 5, 0, 5);
-    test(S("fgtianblpq"), "pijag", 5, 0, 5);
-    test(S("mfeqklirnh"), "jrckd", 5, 1, 5);
-    test(S("astedncjhk"), "qcloh", 5, 2, 5);
-    test(S("fhlqgcajbr"), "thlmp", 5, 4, 5);
-    test(S("epfhocmdng"), "qidmo", 5, 5, 5);
-    test(S("apcnsibger"), "lnegpsjqrd", 5, 0, 5);
-    test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 6);
-    test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 5);
-    test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 6);
-    test(S("jbhcfposld"), "trfqgmckbe", 5, 10, 5);
-    test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, 5);
-    test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, 5);
-    test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 6);
-    test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 8);
-    test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, S::npos);
-    test(S("shoiedtcjb"), "", 9, 0, 9);
-    test(S("ebcinjgads"), "tqbnh", 9, 0, 9);
-    test(S("dqmregkcfl"), "akmle", 9, 1, 9);
-    test(S("ngcrieqajf"), "iqfkm", 9, 2, 9);
-    test(S("qosmilgnjb"), "tqjsr", 9, 4, 9);
-    test(S("ikabsjtdfl"), "jplqg", 9, 5, S::npos);
-    test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, 9);
-    test(S("fdnplotmgh"), "morkglpesn", 9, 1, 9);
-    test(S("fdbicojerm"), "dmicerngat", 9, 5, S::npos);
-    test(S("mbtafndjcq"), "radgeskbtc", 9, 9, 9);
-    test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 9);
-    test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, 9);
-    test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 9);
-    test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 9);
-    test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, S::npos);
-    test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, S::npos);
-    test(S("ncjpmaekbs"), "", 10, 0, S::npos);
-    test(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos);
-    test(S("pqfhsgilen"), "qnpor", 10, 1, S::npos);
-    test(S("gqtjsbdckh"), "otdma", 10, 2, S::npos);
-    test(S("cfkqpjlegi"), "efhjg", 10, 4, S::npos);
-    test(S("beanrfodgj"), "odpte", 10, 5, S::npos);
-    test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos);
-    test(S("iomkfthagj"), "oaklidrbqg", 10, 1, S::npos);
+void test1() {
+  test(S("gbhqo"), "skqne", 5, 4, S::npos);
+  test(S("ktdor"), "kipnf", 5, 5, S::npos);
+  test(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos);
+  test(S("egmjk"), "fsmjcdairn", 5, 1, S::npos);
+  test(S("armql"), "pcdgltbrfj", 5, 5, S::npos);
+  test(S("cdhjo"), "aekfctpirg", 5, 9, S::npos);
+  test(S("jcons"), "ledihrsgpf", 5, 10, S::npos);
+  test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos);
+  test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos);
+  test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, S::npos);
+  test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, S::npos);
+  test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos);
+  test(S("gajqn"), "", 6, 0, S::npos);
+  test(S("stedk"), "hrnat", 6, 0, S::npos);
+  test(S("tjkaf"), "gsqdt", 6, 1, S::npos);
+  test(S("dthpe"), "bspkd", 6, 2, S::npos);
+  test(S("klhde"), "ohcmb", 6, 4, S::npos);
+  test(S("bhlki"), "heatr", 6, 5, S::npos);
+  test(S("lqmoh"), "pmblckedfn", 6, 0, S::npos);
+  test(S("mtqin"), "aceqmsrbik", 6, 1, S::npos);
+  test(S("dpqbr"), "lmbtdehjrn", 6, 5, S::npos);
+  test(S("kdhmo"), "teqmcrlgib", 6, 9, S::npos);
+  test(S("jblqp"), "njolbmspac", 6, 10, S::npos);
+  test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos);
+  test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos);
+  test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, S::npos);
+  test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos);
+  test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos);
+  test(S("jnkrfhotgl"), "", 0, 0, 0);
+  test(S("dltjfngbko"), "rqegt", 0, 0, 0);
+  test(S("bmjlpkiqde"), "dashm", 0, 1, 0);
+  test(S("skrflobnqm"), "jqirk", 0, 2, 0);
+  test(S("jkpldtshrm"), "rckeg", 0, 4, 0);
+  test(S("ghasdbnjqo"), "jscie", 0, 5, 0);
+  test(S("igrkhpbqjt"), "efsphndliq", 0, 0, 0);
+  test(S("ikthdgcamf"), "gdicosleja", 0, 1, 0);
+  test(S("pcofgeniam"), "qcpjibosfl", 0, 5, 2);
+  test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 4);
+  test(S("itphbqsker"), "dtablcrseo", 0, 10, 0);
+  test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, 0);
+  test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, 0);
+  test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 0);
+  test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 1);
+  test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, S::npos);
+  test(S("shbcqnmoar"), "", 1, 0, 1);
+  test(S("bdoshlmfin"), "ontrs", 1, 0, 1);
+  test(S("khfrebnsgq"), "pfkna", 1, 1, 1);
+  test(S("getcrsaoji"), "ekosa", 1, 2, 2);
+  test(S("fjiknedcpq"), "anqhk", 1, 4, 1);
+  test(S("tkejgnafrm"), "jekca", 1, 5, 4);
+  test(S("jnakolqrde"), "ikemsjgacf", 1, 0, 1);
+  test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, 1);
+  test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 3);
+  test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 1);
+  test(S("cigfqkated"), "sqcflrgtim", 1, 10, 5);
+  test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, 1);
+  test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, 1);
+  test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 5);
+  test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 5);
+  test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, S::npos);
+  test(S("ectnhskflp"), "", 5, 0, 5);
+  test(S("fgtianblpq"), "pijag", 5, 0, 5);
+  test(S("mfeqklirnh"), "jrckd", 5, 1, 5);
+  test(S("astedncjhk"), "qcloh", 5, 2, 5);
+  test(S("fhlqgcajbr"), "thlmp", 5, 4, 5);
+  test(S("epfhocmdng"), "qidmo", 5, 5, 5);
+  test(S("apcnsibger"), "lnegpsjqrd", 5, 0, 5);
+  test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 6);
+  test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 5);
+  test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 6);
+  test(S("jbhcfposld"), "trfqgmckbe", 5, 10, 5);
+  test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, 5);
+  test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, 5);
+  test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 6);
+  test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 8);
+  test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, S::npos);
+  test(S("shoiedtcjb"), "", 9, 0, 9);
+  test(S("ebcinjgads"), "tqbnh", 9, 0, 9);
+  test(S("dqmregkcfl"), "akmle", 9, 1, 9);
+  test(S("ngcrieqajf"), "iqfkm", 9, 2, 9);
+  test(S("qosmilgnjb"), "tqjsr", 9, 4, 9);
+  test(S("ikabsjtdfl"), "jplqg", 9, 5, S::npos);
+  test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, 9);
+  test(S("fdnplotmgh"), "morkglpesn", 9, 1, 9);
+  test(S("fdbicojerm"), "dmicerngat", 9, 5, S::npos);
+  test(S("mbtafndjcq"), "radgeskbtc", 9, 9, 9);
+  test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 9);
+  test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, 9);
+  test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 9);
+  test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 9);
+  test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, S::npos);
+  test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, S::npos);
+  test(S("ncjpmaekbs"), "", 10, 0, S::npos);
+  test(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos);
+  test(S("pqfhsgilen"), "qnpor", 10, 1, S::npos);
+  test(S("gqtjsbdckh"), "otdma", 10, 2, S::npos);
+  test(S("cfkqpjlegi"), "efhjg", 10, 4, S::npos);
+  test(S("beanrfodgj"), "odpte", 10, 5, S::npos);
+  test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos);
+  test(S("iomkfthagj"), "oaklidrbqg", 10, 1, S::npos);
 }
 
 template <class S>
-void test2()
-{
-    test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, S::npos);
-    test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, S::npos);
-    test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, S::npos);
-    test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos);
-    test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, S::npos);
-    test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, S::npos);
-    test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, S::npos);
-    test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos);
-    test(S("cqjohampgd"), "", 11, 0, S::npos);
-    test(S("hobitmpsan"), "aocjb", 11, 0, S::npos);
-    test(S("tjehkpsalm"), "jbrnk", 11, 1, S::npos);
-    test(S("ngfbojitcl"), "tqedg", 11, 2, S::npos);
-    test(S("rcfkdbhgjo"), "nqskp", 11, 4, S::npos);
-    test(S("qghptonrea"), "eaqkl", 11, 5, S::npos);
-    test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos);
-    test(S("hlmgabenti"), "lsftgajqpm", 11, 1, S::npos);
-    test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, S::npos);
-    test(S("jqedtkornm"), "shkncmiaqj", 11, 9, S::npos);
-    test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, S::npos);
-    test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos);
-    test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos);
-    test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, S::npos);
-    test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos);
-    test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos);
-    test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, 0);
-    test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, 0);
-    test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 0);
-    test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 0);
-    test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 0);
-    test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 0);
-    test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, 0);
-    test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 0);
-    test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 0);
-    test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 0);
-    test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 0);
-    test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, 0);
-    test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 0);
-    test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 0);
-    test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 11);
-    test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, S::npos);
-    test(S("febhmqtjanokscdirpgl"), "", 1, 0, 1);
-    test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, 1);
-    test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 1);
-    test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 2);
-    test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 2);
-    test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 1);
-    test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, 1);
-    test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 1);
-    test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 1);
-    test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 3);
-    test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 2);
-    test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, 1);
-    test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 1);
-    test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 2);
-    test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 13);
-    test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, S::npos);
-    test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, 10);
-    test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, 10);
-    test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 10);
-    test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 10);
-    test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 11);
-    test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 10);
-    test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, 10);
-    test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 10);
-    test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 10);
-    test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 11);
-    test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 10);
-    test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, 10);
-    test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 10);
-    test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 11);
-    test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 11);
-    test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, S::npos);
-    test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, 19);
-    test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, 19);
-    test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 19);
-    test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 19);
-    test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 19);
-    test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, S::npos);
-    test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, 19);
-    test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 19);
-    test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 19);
-    test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 19);
-    test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 19);
-    test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, 19);
-    test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 19);
-    test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, S::npos);
-    test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, S::npos);
-    test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, S::npos);
-    test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos);
-    test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos);
-    test(S("grkpahljcftesdmonqib"), "odife", 20, 1, S::npos);
-    test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, S::npos);
-    test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, S::npos);
-    test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, S::npos);
-    test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos);
-    test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, S::npos);
-    test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, S::npos);
-    test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, S::npos);
-    test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, S::npos);
-    test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos);
+void test2() {
+  test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, S::npos);
+  test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, S::npos);
+  test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, S::npos);
+  test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos);
+  test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, S::npos);
+  test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, S::npos);
+  test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, S::npos);
+  test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos);
+  test(S("cqjohampgd"), "", 11, 0, S::npos);
+  test(S("hobitmpsan"), "aocjb", 11, 0, S::npos);
+  test(S("tjehkpsalm"), "jbrnk", 11, 1, S::npos);
+  test(S("ngfbojitcl"), "tqedg", 11, 2, S::npos);
+  test(S("rcfkdbhgjo"), "nqskp", 11, 4, S::npos);
+  test(S("qghptonrea"), "eaqkl", 11, 5, S::npos);
+  test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos);
+  test(S("hlmgabenti"), "lsftgajqpm", 11, 1, S::npos);
+  test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, S::npos);
+  test(S("jqedtkornm"), "shkncmiaqj", 11, 9, S::npos);
+  test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, S::npos);
+  test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos);
+  test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos);
+  test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, S::npos);
+  test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos);
+  test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos);
+  test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, 0);
+  test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, 0);
+  test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 0);
+  test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 0);
+  test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 0);
+  test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 0);
+  test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, 0);
+  test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 0);
+  test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 0);
+  test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 0);
+  test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 0);
+  test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, 0);
+  test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 0);
+  test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 0);
+  test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 11);
+  test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, S::npos);
+  test(S("febhmqtjanokscdirpgl"), "", 1, 0, 1);
+  test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, 1);
+  test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 1);
+  test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 2);
+  test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 2);
+  test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 1);
+  test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, 1);
+  test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 1);
+  test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 1);
+  test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 3);
+  test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 2);
+  test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, 1);
+  test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 1);
+  test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 2);
+  test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 13);
+  test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, S::npos);
+  test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, 10);
+  test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, 10);
+  test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 10);
+  test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 10);
+  test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 11);
+  test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 10);
+  test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, 10);
+  test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 10);
+  test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 10);
+  test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 11);
+  test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 10);
+  test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, 10);
+  test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 10);
+  test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 11);
+  test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 11);
+  test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, S::npos);
+  test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, 19);
+  test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, 19);
+  test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 19);
+  test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 19);
+  test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 19);
+  test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, S::npos);
+  test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, 19);
+  test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 19);
+  test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 19);
+  test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 19);
+  test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 19);
+  test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, 19);
+  test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 19);
+  test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, S::npos);
+  test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, S::npos);
+  test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, S::npos);
+  test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos);
+  test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos);
+  test(S("grkpahljcftesdmonqib"), "odife", 20, 1, S::npos);
+  test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, S::npos);
+  test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, S::npos);
+  test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, S::npos);
+  test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos);
+  test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, S::npos);
+  test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, S::npos);
+  test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, S::npos);
+  test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, S::npos);
+  test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos);
 }
 
 template <class S>
-void test3()
-{
-    test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, S::npos);
-    test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, S::npos);
-    test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, S::npos);
-    test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos);
-    test(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos);
-    test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos);
-    test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, S::npos);
-    test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, S::npos);
-    test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, S::npos);
-    test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, S::npos);
-    test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos);
-    test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, S::npos);
-    test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, S::npos);
-    test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, S::npos);
-    test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, S::npos);
-    test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos);
-    test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, S::npos);
-    test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, S::npos);
-    test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, S::npos);
-    test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos);
+void test3() {
+  test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, S::npos);
+  test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, S::npos);
+  test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, S::npos);
+  test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos);
+  test(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos);
+  test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos);
+  test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, S::npos);
+  test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, S::npos);
+  test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, S::npos);
+  test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, S::npos);
+  test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos);
+  test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, S::npos);
+  test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, S::npos);
+  test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, S::npos);
+  test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, S::npos);
+  test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos);
+  test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, S::npos);
+  test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, S::npos);
+  test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, S::npos);
+  test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
     test2<S>();
     test3<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find_first_not_of( "",      0, 0) == SV::npos, "" );
-    static_assert (sv1.find_first_not_of( "irkhs", 0, 5) == SV::npos, "" );
-    static_assert (sv2.find_first_not_of( "",      0, 0) == 0, "" );
-    static_assert (sv2.find_first_not_of( "gfsrt", 0, 5) == 0, "" );
-    static_assert (sv2.find_first_not_of( "lecar", 0, 5) == 1, "" );
-    }
+    static_assert(sv1.find_first_not_of("", 0, 0) == SV::npos, "");
+    static_assert(sv1.find_first_not_of("irkhs", 0, 5) == SV::npos, "");
+    static_assert(sv2.find_first_not_of("", 0, 0) == 0, "");
+    static_assert(sv2.find_first_not_of("gfsrt", 0, 5) == 0, "");
+    static_assert(sv2.find_first_not_of("lecar", 0, 5) == 1, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_string_view_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_string_view_size.pass.cpp
index 3067f17ea127b8b..bf93082ddb5c013 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_string_view_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_first_not_of_string_view_size.pass.cpp
@@ -18,137 +18,130 @@
 #include "test_macros.h"
 
 template <class S>
-void
-test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str, pos));
-    assert(s.find_first_not_of(str, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_not_of(str, pos));
+  assert(s.find_first_not_of(str, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-void
-test(const S& s, const S& str, typename S::size_type x)
-{
-    assert(s.find_first_not_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+void test(const S& s, const S& str, typename S::size_type x) {
+  assert(s.find_first_not_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), S(""), 0, S::npos);
-    test(S(""), S("laenf"), 0, S::npos);
-    test(S(""), S("pqlnkmbdjo"), 0, S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
-    test(S(""), S(""), 1, S::npos);
-    test(S(""), S("bjaht"), 1, S::npos);
-    test(S(""), S("hjlcmgpket"), 1, S::npos);
-    test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
-    test(S("fodgq"), S(""), 0, 0);
-    test(S("qanej"), S("dfkap"), 0, 0);
-    test(S("clbao"), S("ihqrfebgad"), 0, 0);
-    test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, S::npos);
-    test(S("srdfq"), S(""), 1, 1);
-    test(S("oemth"), S("ikcrq"), 1, 1);
-    test(S("cdaih"), S("dmajblfhsg"), 1, 3);
-    test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, S::npos);
-    test(S("cshmd"), S(""), 2, 2);
-    test(S("lhcdo"), S("oebqi"), 2, 2);
-    test(S("qnsoh"), S("kojhpmbsfe"), 2, S::npos);
-    test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, S::npos);
-    test(S("fmtsp"), S(""), 4, 4);
-    test(S("khbpm"), S("aobjd"), 4, 4);
-    test(S("pbsji"), S("pcbahntsje"), 4, 4);
-    test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, S::npos);
-    test(S("eqmpa"), S(""), 5, S::npos);
-    test(S("omigs"), S("kocgb"), 5, S::npos);
-    test(S("onmje"), S("fbslrjiqkm"), 5, S::npos);
-    test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, S::npos);
-    test(S("schfa"), S(""), 6, S::npos);
-    test(S("igdsc"), S("qngpd"), 6, S::npos);
-    test(S("brqgo"), S("rodhqklgmb"), 6, S::npos);
-    test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, S::npos);
-    test(S("hcjitbfapl"), S(""), 0, 0);
-    test(S("daiprenocl"), S("ashjd"), 0, 2);
-    test(S("litpcfdghe"), S("mgojkldsqh"), 0, 1);
-    test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, S::npos);
-    test(S("qpghtfbaji"), S(""), 1, 1);
-    test(S("gfshlcmdjr"), S("nadkh"), 1, 1);
-    test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 4);
-    test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, S::npos);
-    test(S("crnklpmegd"), S(""), 5, 5);
-    test(S("jsbtafedoc"), S("prqgn"), 5, 5);
-    test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 6);
-    test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, S::npos);
-    test(S("lmofqdhpki"), S(""), 9, 9);
-    test(S("hnefkqimca"), S("rtjpa"), 9, S::npos);
-    test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, 9);
-    test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, S::npos);
-    test(S("elgofjmbrq"), S(""), 10, S::npos);
-    test(S("mjqdgalkpc"), S("dplqa"), 10, S::npos);
-    test(S("kthqnfcerm"), S("dkacjoptns"), 10, S::npos);
-    test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, S::npos);
-    test(S("eqsgalomhb"), S(""), 11, S::npos);
-    test(S("akiteljmoh"), S("lofbc"), 11, S::npos);
-    test(S("hlbdfreqjo"), S("astoegbfpn"), 11, S::npos);
-    test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), S(""), 0, 0);
-    test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, 0);
-    test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, 1);
-    test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, S::npos);
-    test(S("jlnkraeodhcspfgbqitm"), S(""), 1, 1);
-    test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, 1);
-    test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 3);
-    test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, S::npos);
-    test(S("hdpkobnsalmcfijregtq"), S(""), 10, 10);
-    test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 11);
-    test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 13);
-    test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, S::npos);
-    test(S("niptglfbosehkamrdqcj"), S(""), 19, 19);
-    test(S("copqdhstbingamjfkler"), S("djkqc"), 19, 19);
-    test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, S::npos);
-    test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, S::npos);
-    test(S("eaintpchlqsbdgrkjofm"), S(""), 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, S::npos);
-    test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, S::npos);
-    test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, S::npos);
-    test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, S::npos);
-    test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, S::npos);
+void test0() {
+  test(S(""), S(""), 0, S::npos);
+  test(S(""), S("laenf"), 0, S::npos);
+  test(S(""), S("pqlnkmbdjo"), 0, S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
+  test(S(""), S(""), 1, S::npos);
+  test(S(""), S("bjaht"), 1, S::npos);
+  test(S(""), S("hjlcmgpket"), 1, S::npos);
+  test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
+  test(S("fodgq"), S(""), 0, 0);
+  test(S("qanej"), S("dfkap"), 0, 0);
+  test(S("clbao"), S("ihqrfebgad"), 0, 0);
+  test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, S::npos);
+  test(S("srdfq"), S(""), 1, 1);
+  test(S("oemth"), S("ikcrq"), 1, 1);
+  test(S("cdaih"), S("dmajblfhsg"), 1, 3);
+  test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, S::npos);
+  test(S("cshmd"), S(""), 2, 2);
+  test(S("lhcdo"), S("oebqi"), 2, 2);
+  test(S("qnsoh"), S("kojhpmbsfe"), 2, S::npos);
+  test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, S::npos);
+  test(S("fmtsp"), S(""), 4, 4);
+  test(S("khbpm"), S("aobjd"), 4, 4);
+  test(S("pbsji"), S("pcbahntsje"), 4, 4);
+  test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, S::npos);
+  test(S("eqmpa"), S(""), 5, S::npos);
+  test(S("omigs"), S("kocgb"), 5, S::npos);
+  test(S("onmje"), S("fbslrjiqkm"), 5, S::npos);
+  test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, S::npos);
+  test(S("schfa"), S(""), 6, S::npos);
+  test(S("igdsc"), S("qngpd"), 6, S::npos);
+  test(S("brqgo"), S("rodhqklgmb"), 6, S::npos);
+  test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, S::npos);
+  test(S("hcjitbfapl"), S(""), 0, 0);
+  test(S("daiprenocl"), S("ashjd"), 0, 2);
+  test(S("litpcfdghe"), S("mgojkldsqh"), 0, 1);
+  test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, S::npos);
+  test(S("qpghtfbaji"), S(""), 1, 1);
+  test(S("gfshlcmdjr"), S("nadkh"), 1, 1);
+  test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 4);
+  test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, S::npos);
+  test(S("crnklpmegd"), S(""), 5, 5);
+  test(S("jsbtafedoc"), S("prqgn"), 5, 5);
+  test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 6);
+  test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, S::npos);
+  test(S("lmofqdhpki"), S(""), 9, 9);
+  test(S("hnefkqimca"), S("rtjpa"), 9, S::npos);
+  test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, 9);
+  test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, S::npos);
+  test(S("elgofjmbrq"), S(""), 10, S::npos);
+  test(S("mjqdgalkpc"), S("dplqa"), 10, S::npos);
+  test(S("kthqnfcerm"), S("dkacjoptns"), 10, S::npos);
+  test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, S::npos);
+  test(S("eqsgalomhb"), S(""), 11, S::npos);
+  test(S("akiteljmoh"), S("lofbc"), 11, S::npos);
+  test(S("hlbdfreqjo"), S("astoegbfpn"), 11, S::npos);
+  test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), S(""), 0, 0);
+  test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, 0);
+  test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, 1);
+  test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, S::npos);
+  test(S("jlnkraeodhcspfgbqitm"), S(""), 1, 1);
+  test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, 1);
+  test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 3);
+  test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, S::npos);
+  test(S("hdpkobnsalmcfijregtq"), S(""), 10, 10);
+  test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 11);
+  test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 13);
+  test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, S::npos);
+  test(S("niptglfbosehkamrdqcj"), S(""), 19, 19);
+  test(S("copqdhstbingamjfkler"), S("djkqc"), 19, 19);
+  test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, S::npos);
+  test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, S::npos);
+  test(S("eaintpchlqsbdgrkjofm"), S(""), 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, S::npos);
+  test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, S::npos);
+  test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, S::npos);
+  test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, S::npos);
+  test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, S::npos);
 }
 
 template <class S>
-void test1()
-{
-    test(S(""), S(""), S::npos);
-    test(S(""), S("laenf"), S::npos);
-    test(S(""), S("pqlnkmbdjo"), S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
-    test(S("nhmko"), S(""), 0);
-    test(S("lahfb"), S("irkhs"), 0);
-    test(S("gmfhd"), S("kantesmpgj"), 2);
-    test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), S::npos);
-    test(S("eolhfgpjqk"), S(""), 0);
-    test(S("nbatdlmekr"), S("bnrpe"), 2);
-    test(S("jdmciepkaq"), S("jtdaefblso"), 2);
-    test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), S::npos);
-    test(S("gprdcokbnjhlsfmtieqa"), S(""), 0);
-    test(S("qjghlnftcaismkropdeb"), S("bjaht"), 0);
-    test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 1);
-    test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), S::npos);
+void test1() {
+  test(S(""), S(""), S::npos);
+  test(S(""), S("laenf"), S::npos);
+  test(S(""), S("pqlnkmbdjo"), S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
+  test(S("nhmko"), S(""), 0);
+  test(S("lahfb"), S("irkhs"), 0);
+  test(S("gmfhd"), S("kantesmpgj"), 2);
+  test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), S::npos);
+  test(S("eolhfgpjqk"), S(""), 0);
+  test(S("nbatdlmekr"), S("bnrpe"), 2);
+  test(S("jdmciepkaq"), S("jtdaefblso"), 2);
+  test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), S::npos);
+  test(S("gprdcokbnjhlsfmtieqa"), S(""), 0);
+  test(S("qjghlnftcaismkropdeb"), S("bjaht"), 0);
+  test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 1);
+  test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), S::npos);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
-    }
+  }
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_first_of_char_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_first_of_char_size.pass.cpp
index ff6af094760d70d..05b745b71307e0b 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_first_of_char_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_first_of_char_size.pass.cpp
@@ -19,28 +19,22 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, typename S::value_type c, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(c, pos));
-    assert(s.find_first_of(c, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+void test(const S& s, typename S::value_type c, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(c, pos));
+  assert(s.find_first_of(c, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-void
-test(const S& s, typename S::value_type c, typename S::size_type x)
-{
-    assert(s.find_first_of(c) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+void test(const S& s, typename S::value_type c, typename S::size_type x) {
+  assert(s.find_first_of(c) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test(S(""), 'e', 0, S::npos);
     test(S(""), 'e', 1, S::npos);
@@ -67,20 +61,20 @@ int main(int, char**)
     test(S("csope"), 'e', 4);
     test(S("gfsmthlkon"), 'e', S::npos);
     test(S("laenfsbridchgotmkqpj"), 'e', 2);
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find_first_of( 'e', 0 ) == SV::npos, "" );
-    static_assert (sv1.find_first_of( 'e', 1 ) == SV::npos, "" );
-    static_assert (sv2.find_first_of( 'q', 0 ) == SV::npos, "" );
-    static_assert (sv2.find_first_of( 'e', 1 ) == 4, "" );
-    static_assert (sv2.find_first_of( 'e', 5 ) == SV::npos, "" );
-    }
+    static_assert(sv1.find_first_of('e', 0) == SV::npos, "");
+    static_assert(sv1.find_first_of('e', 1) == SV::npos, "");
+    static_assert(sv2.find_first_of('q', 0) == SV::npos, "");
+    static_assert(sv2.find_first_of('e', 1) == 4, "");
+    static_assert(sv2.find_first_of('e', 5) == SV::npos, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_first_of_pointer_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_first_of_pointer_size.pass.cpp
index 01fef4d3585f058..30f73129e281ecb 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_first_of_pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_first_of_pointer_size.pass.cpp
@@ -19,152 +19,144 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str, pos));
-    assert(s.find_first_of(str, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+void test(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str, pos));
+  assert(s.find_first_of(str, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str));
-    assert(s.find_first_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+void test(const S& s, const typename S::value_type* str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str));
+  assert(s.find_first_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), "", 0, S::npos);
-    test(S(""), "laenf", 0, S::npos);
-    test(S(""), "pqlnkmbdjo", 0, S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
-    test(S(""), "", 1, S::npos);
-    test(S(""), "bjaht", 1, S::npos);
-    test(S(""), "hjlcmgpket", 1, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
-    test(S("fodgq"), "", 0, S::npos);
-    test(S("qanej"), "dfkap", 0, 1);
-    test(S("clbao"), "ihqrfebgad", 0, 2);
-    test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, 0);
-    test(S("srdfq"), "", 1, S::npos);
-    test(S("oemth"), "ikcrq", 1, S::npos);
-    test(S("cdaih"), "dmajblfhsg", 1, 1);
-    test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, 1);
-    test(S("cshmd"), "", 2, S::npos);
-    test(S("lhcdo"), "oebqi", 2, 4);
-    test(S("qnsoh"), "kojhpmbsfe", 2, 2);
-    test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, 2);
-    test(S("fmtsp"), "", 4, S::npos);
-    test(S("khbpm"), "aobjd", 4, S::npos);
-    test(S("pbsji"), "pcbahntsje", 4, S::npos);
-    test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, 4);
-    test(S("eqmpa"), "", 5, S::npos);
-    test(S("omigs"), "kocgb", 5, S::npos);
-    test(S("onmje"), "fbslrjiqkm", 5, S::npos);
-    test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, S::npos);
-    test(S("schfa"), "", 6, S::npos);
-    test(S("igdsc"), "qngpd", 6, S::npos);
-    test(S("brqgo"), "rodhqklgmb", 6, S::npos);
-    test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, S::npos);
-    test(S("hcjitbfapl"), "", 0, S::npos);
-    test(S("daiprenocl"), "ashjd", 0, 0);
-    test(S("litpcfdghe"), "mgojkldsqh", 0, 0);
-    test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, 0);
-    test(S("qpghtfbaji"), "", 1, S::npos);
-    test(S("gfshlcmdjr"), "nadkh", 1, 3);
-    test(S("nkodajteqp"), "ofdrqmkebl", 1, 1);
-    test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, 1);
-    test(S("crnklpmegd"), "", 5, S::npos);
-    test(S("jsbtafedoc"), "prqgn", 5, S::npos);
-    test(S("qnmodrtkeb"), "pejafmnokr", 5, 5);
-    test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, 5);
-    test(S("lmofqdhpki"), "", 9, S::npos);
-    test(S("hnefkqimca"), "rtjpa", 9, 9);
-    test(S("drtasbgmfp"), "ktsrmnqagd", 9, S::npos);
-    test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, 9);
-    test(S("elgofjmbrq"), "", 10, S::npos);
-    test(S("mjqdgalkpc"), "dplqa", 10, S::npos);
-    test(S("kthqnfcerm"), "dkacjoptns", 10, S::npos);
-    test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, S::npos);
-    test(S("eqsgalomhb"), "", 11, S::npos);
-    test(S("akiteljmoh"), "lofbc", 11, S::npos);
-    test(S("hlbdfreqjo"), "astoegbfpn", 11, S::npos);
-    test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), "", 0, S::npos);
-    test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, 3);
-    test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, 0);
-    test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, 0);
-    test(S("jlnkraeodhcspfgbqitm"), "", 1, S::npos);
-    test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, 3);
-    test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 1);
-    test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, 1);
-    test(S("hdpkobnsalmcfijregtq"), "", 10, S::npos);
-    test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 10);
-    test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 10);
-    test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, 10);
-    test(S("niptglfbosehkamrdqcj"), "", 19, S::npos);
-    test(S("copqdhstbingamjfkler"), "djkqc", 19, S::npos);
-    test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, 19);
-    test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, 19);
-    test(S("eaintpchlqsbdgrkjofm"), "", 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, S::npos);
-    test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, S::npos);
-    test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), "", 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, S::npos);
-    test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, S::npos);
-    test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, S::npos);
+void test0() {
+  test(S(""), "", 0, S::npos);
+  test(S(""), "laenf", 0, S::npos);
+  test(S(""), "pqlnkmbdjo", 0, S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
+  test(S(""), "", 1, S::npos);
+  test(S(""), "bjaht", 1, S::npos);
+  test(S(""), "hjlcmgpket", 1, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
+  test(S("fodgq"), "", 0, S::npos);
+  test(S("qanej"), "dfkap", 0, 1);
+  test(S("clbao"), "ihqrfebgad", 0, 2);
+  test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, 0);
+  test(S("srdfq"), "", 1, S::npos);
+  test(S("oemth"), "ikcrq", 1, S::npos);
+  test(S("cdaih"), "dmajblfhsg", 1, 1);
+  test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, 1);
+  test(S("cshmd"), "", 2, S::npos);
+  test(S("lhcdo"), "oebqi", 2, 4);
+  test(S("qnsoh"), "kojhpmbsfe", 2, 2);
+  test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, 2);
+  test(S("fmtsp"), "", 4, S::npos);
+  test(S("khbpm"), "aobjd", 4, S::npos);
+  test(S("pbsji"), "pcbahntsje", 4, S::npos);
+  test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, 4);
+  test(S("eqmpa"), "", 5, S::npos);
+  test(S("omigs"), "kocgb", 5, S::npos);
+  test(S("onmje"), "fbslrjiqkm", 5, S::npos);
+  test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, S::npos);
+  test(S("schfa"), "", 6, S::npos);
+  test(S("igdsc"), "qngpd", 6, S::npos);
+  test(S("brqgo"), "rodhqklgmb", 6, S::npos);
+  test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, S::npos);
+  test(S("hcjitbfapl"), "", 0, S::npos);
+  test(S("daiprenocl"), "ashjd", 0, 0);
+  test(S("litpcfdghe"), "mgojkldsqh", 0, 0);
+  test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, 0);
+  test(S("qpghtfbaji"), "", 1, S::npos);
+  test(S("gfshlcmdjr"), "nadkh", 1, 3);
+  test(S("nkodajteqp"), "ofdrqmkebl", 1, 1);
+  test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, 1);
+  test(S("crnklpmegd"), "", 5, S::npos);
+  test(S("jsbtafedoc"), "prqgn", 5, S::npos);
+  test(S("qnmodrtkeb"), "pejafmnokr", 5, 5);
+  test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, 5);
+  test(S("lmofqdhpki"), "", 9, S::npos);
+  test(S("hnefkqimca"), "rtjpa", 9, 9);
+  test(S("drtasbgmfp"), "ktsrmnqagd", 9, S::npos);
+  test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, 9);
+  test(S("elgofjmbrq"), "", 10, S::npos);
+  test(S("mjqdgalkpc"), "dplqa", 10, S::npos);
+  test(S("kthqnfcerm"), "dkacjoptns", 10, S::npos);
+  test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, S::npos);
+  test(S("eqsgalomhb"), "", 11, S::npos);
+  test(S("akiteljmoh"), "lofbc", 11, S::npos);
+  test(S("hlbdfreqjo"), "astoegbfpn", 11, S::npos);
+  test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), "", 0, S::npos);
+  test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, 3);
+  test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, 0);
+  test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, 0);
+  test(S("jlnkraeodhcspfgbqitm"), "", 1, S::npos);
+  test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, 3);
+  test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 1);
+  test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, 1);
+  test(S("hdpkobnsalmcfijregtq"), "", 10, S::npos);
+  test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 10);
+  test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 10);
+  test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, 10);
+  test(S("niptglfbosehkamrdqcj"), "", 19, S::npos);
+  test(S("copqdhstbingamjfkler"), "djkqc", 19, S::npos);
+  test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, 19);
+  test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, 19);
+  test(S("eaintpchlqsbdgrkjofm"), "", 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, S::npos);
+  test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, S::npos);
+  test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), "", 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, S::npos);
+  test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, S::npos);
+  test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, S::npos);
 }
 
 template <class S>
-void test1()
-{
-    test(S(""), "", S::npos);
-    test(S(""), "laenf", S::npos);
-    test(S(""), "pqlnkmbdjo", S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", S::npos);
-    test(S("nhmko"), "", S::npos);
-    test(S("lahfb"), "irkhs", 2);
-    test(S("gmfhd"), "kantesmpgj", 0);
-    test(S("odaft"), "oknlrstdpiqmjbaghcfe", 0);
-    test(S("eolhfgpjqk"), "", S::npos);
-    test(S("nbatdlmekr"), "bnrpe", 0);
-    test(S("jdmciepkaq"), "jtdaefblso", 0);
-    test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", 0);
-    test(S("gprdcokbnjhlsfmtieqa"), "", S::npos);
-    test(S("qjghlnftcaismkropdeb"), "bjaht", 1);
-    test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 0);
-    test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", 0);
+void test1() {
+  test(S(""), "", S::npos);
+  test(S(""), "laenf", S::npos);
+  test(S(""), "pqlnkmbdjo", S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", S::npos);
+  test(S("nhmko"), "", S::npos);
+  test(S("lahfb"), "irkhs", 2);
+  test(S("gmfhd"), "kantesmpgj", 0);
+  test(S("odaft"), "oknlrstdpiqmjbaghcfe", 0);
+  test(S("eolhfgpjqk"), "", S::npos);
+  test(S("nbatdlmekr"), "bnrpe", 0);
+  test(S("jdmciepkaq"), "jtdaefblso", 0);
+  test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", 0);
+  test(S("gprdcokbnjhlsfmtieqa"), "", S::npos);
+  test(S("qjghlnftcaismkropdeb"), "bjaht", 1);
+  test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 0);
+  test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", 0);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find_first_of( "",      0) == SV::npos, "" );
-    static_assert (sv1.find_first_of( "irkhs", 0) == SV::npos, "" );
-    static_assert (sv2.find_first_of( "",      0) == SV::npos, "" );
-    static_assert (sv2.find_first_of( "gfsrt", 0) == SV::npos, "" );
-    static_assert (sv2.find_first_of( "lecar", 0) == 0, "" );
-    }
+    static_assert(sv1.find_first_of("", 0) == SV::npos, "");
+    static_assert(sv1.find_first_of("irkhs", 0) == SV::npos, "");
+    static_assert(sv2.find_first_of("", 0) == SV::npos, "");
+    static_assert(sv2.find_first_of("gfsrt", 0) == SV::npos, "");
+    static_assert(sv2.find_first_of("lecar", 0) == 0, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_first_of_pointer_size_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_first_of_pointer_size_size.pass.cpp
index af68f94bddaf98f..de02d04519c8673 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_first_of_pointer_size_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_first_of_pointer_size_size.pass.cpp
@@ -19,378 +19,374 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type n, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str, pos, n));
-    assert(s.find_first_of(str, pos, n) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+void test(const S& s,
+          const typename S::value_type* str,
+          typename S::size_type pos,
+          typename S::size_type n,
+          typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str, pos, n));
+  assert(s.find_first_of(str, pos, n) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), "", 0, 0, S::npos);
-    test(S(""), "irkhs", 0, 0, S::npos);
-    test(S(""), "kante", 0, 1, S::npos);
-    test(S(""), "oknlr", 0, 2, S::npos);
-    test(S(""), "pcdro", 0, 4, S::npos);
-    test(S(""), "bnrpe", 0, 5, S::npos);
-    test(S(""), "jtdaefblso", 0, 0, S::npos);
-    test(S(""), "oselktgbca", 0, 1, S::npos);
-    test(S(""), "eqgaplhckj", 0, 5, S::npos);
-    test(S(""), "bjahtcmnlp", 0, 9, S::npos);
-    test(S(""), "hjlcmgpket", 0, 10, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
-    test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
-    test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
-    test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
-    test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
-    test(S(""), "", 1, 0, S::npos);
-    test(S(""), "lbtqd", 1, 0, S::npos);
-    test(S(""), "tboim", 1, 1, S::npos);
-    test(S(""), "slcer", 1, 2, S::npos);
-    test(S(""), "cbjfs", 1, 4, S::npos);
-    test(S(""), "aqibs", 1, 5, S::npos);
-    test(S(""), "gtfblmqinc", 1, 0, S::npos);
-    test(S(""), "mkqpbtdalg", 1, 1, S::npos);
-    test(S(""), "kphatlimcd", 1, 5, S::npos);
-    test(S(""), "pblasqogic", 1, 9, S::npos);
-    test(S(""), "arosdhcfme", 1, 10, S::npos);
-    test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
-    test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
-    test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
-    test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
-    test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
-    test(S("eaint"), "", 0, 0, S::npos);
-    test(S("binja"), "gfsrt", 0, 0, S::npos);
-    test(S("latkm"), "pfsoc", 0, 1, S::npos);
-    test(S("lecfr"), "tpflm", 0, 2, S::npos);
-    test(S("eqkst"), "sgkec", 0, 4, 0);
-    test(S("cdafr"), "romds", 0, 5, 1);
-    test(S("prbhe"), "qhjistlgmr", 0, 0, S::npos);
-    test(S("lbisk"), "pedfirsglo", 0, 1, S::npos);
-    test(S("hrlpd"), "aqcoslgrmk", 0, 5, S::npos);
-    test(S("ehmja"), "dabckmepqj", 0, 9, 0);
-    test(S("mhqgd"), "pqscrjthli", 0, 10, 1);
-    test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, S::npos);
-    test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, S::npos);
-    test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, S::npos);
-    test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, 0);
-    test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, 0);
-    test(S("clrgb"), "", 1, 0, S::npos);
-    test(S("tjmek"), "osmia", 1, 0, S::npos);
-    test(S("bgstp"), "ckonl", 1, 1, S::npos);
-    test(S("hstrk"), "ilcaj", 1, 2, S::npos);
-    test(S("kmspj"), "lasiq", 1, 4, 2);
-    test(S("tjboh"), "kfqmr", 1, 5, S::npos);
-    test(S("ilbcj"), "klnitfaobg", 1, 0, S::npos);
-    test(S("jkngf"), "gjhmdlqikp", 1, 1, 3);
-    test(S("gfcql"), "skbgtahqej", 1, 5, S::npos);
-    test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 2);
-    test(S("bthpg"), "bjgfmnlkio", 1, 10, 4);
-    test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, S::npos);
-    test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, S::npos);
-    test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 1);
-    test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, 1);
-    test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, 1);
-    test(S("ndrhl"), "", 2, 0, S::npos);
-    test(S("mrecp"), "otkgb", 2, 0, S::npos);
-    test(S("qlasf"), "cqsjl", 2, 1, S::npos);
-    test(S("smaqd"), "dpifl", 2, 2, 4);
-    test(S("hjeni"), "oapht", 2, 4, S::npos);
-    test(S("ocmfj"), "cifts", 2, 5, 3);
-    test(S("hmftq"), "nmsckbgalo", 2, 0, S::npos);
-    test(S("fklad"), "tpksqhamle", 2, 1, S::npos);
-    test(S("dirnm"), "tpdrchmkji", 2, 5, 2);
-    test(S("hrgdc"), "ijagfkblst", 2, 9, 2);
-    test(S("ifakg"), "kpocsignjb", 2, 10, 3);
-    test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, S::npos);
-    test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, S::npos);
-    test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 3);
-    test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, 2);
-    test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, 2);
-    test(S("cjgao"), "", 4, 0, S::npos);
-    test(S("kjplq"), "mabns", 4, 0, S::npos);
-    test(S("herni"), "bdnrp", 4, 1, S::npos);
-    test(S("tadrb"), "scidp", 4, 2, S::npos);
-    test(S("pkfeo"), "agbjl", 4, 4, S::npos);
-    test(S("hoser"), "jfmpr", 4, 5, 4);
-    test(S("kgrsp"), "rbpefghsmj", 4, 0, S::npos);
-    test(S("pgejb"), "apsfntdoqc", 4, 1, S::npos);
-    test(S("thlnq"), "ndkjeisgcl", 4, 5, S::npos);
-    test(S("nbmit"), "rnfpqatdeo", 4, 9, 4);
-    test(S("jgmib"), "bntjlqrfik", 4, 10, 4);
-    test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, S::npos);
-    test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, S::npos);
-    test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 4);
-    test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 4);
-    test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, 4);
-    test(S("klopi"), "", 5, 0, S::npos);
-    test(S("dajhn"), "psthd", 5, 0, S::npos);
-    test(S("jbgno"), "rpmjd", 5, 1, S::npos);
-    test(S("hkjae"), "dfsmk", 5, 2, S::npos);
+void test0() {
+  test(S(""), "", 0, 0, S::npos);
+  test(S(""), "irkhs", 0, 0, S::npos);
+  test(S(""), "kante", 0, 1, S::npos);
+  test(S(""), "oknlr", 0, 2, S::npos);
+  test(S(""), "pcdro", 0, 4, S::npos);
+  test(S(""), "bnrpe", 0, 5, S::npos);
+  test(S(""), "jtdaefblso", 0, 0, S::npos);
+  test(S(""), "oselktgbca", 0, 1, S::npos);
+  test(S(""), "eqgaplhckj", 0, 5, S::npos);
+  test(S(""), "bjahtcmnlp", 0, 9, S::npos);
+  test(S(""), "hjlcmgpket", 0, 10, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
+  test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
+  test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
+  test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
+  test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
+  test(S(""), "", 1, 0, S::npos);
+  test(S(""), "lbtqd", 1, 0, S::npos);
+  test(S(""), "tboim", 1, 1, S::npos);
+  test(S(""), "slcer", 1, 2, S::npos);
+  test(S(""), "cbjfs", 1, 4, S::npos);
+  test(S(""), "aqibs", 1, 5, S::npos);
+  test(S(""), "gtfblmqinc", 1, 0, S::npos);
+  test(S(""), "mkqpbtdalg", 1, 1, S::npos);
+  test(S(""), "kphatlimcd", 1, 5, S::npos);
+  test(S(""), "pblasqogic", 1, 9, S::npos);
+  test(S(""), "arosdhcfme", 1, 10, S::npos);
+  test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
+  test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
+  test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
+  test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
+  test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
+  test(S("eaint"), "", 0, 0, S::npos);
+  test(S("binja"), "gfsrt", 0, 0, S::npos);
+  test(S("latkm"), "pfsoc", 0, 1, S::npos);
+  test(S("lecfr"), "tpflm", 0, 2, S::npos);
+  test(S("eqkst"), "sgkec", 0, 4, 0);
+  test(S("cdafr"), "romds", 0, 5, 1);
+  test(S("prbhe"), "qhjistlgmr", 0, 0, S::npos);
+  test(S("lbisk"), "pedfirsglo", 0, 1, S::npos);
+  test(S("hrlpd"), "aqcoslgrmk", 0, 5, S::npos);
+  test(S("ehmja"), "dabckmepqj", 0, 9, 0);
+  test(S("mhqgd"), "pqscrjthli", 0, 10, 1);
+  test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, S::npos);
+  test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, S::npos);
+  test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, S::npos);
+  test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, 0);
+  test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, 0);
+  test(S("clrgb"), "", 1, 0, S::npos);
+  test(S("tjmek"), "osmia", 1, 0, S::npos);
+  test(S("bgstp"), "ckonl", 1, 1, S::npos);
+  test(S("hstrk"), "ilcaj", 1, 2, S::npos);
+  test(S("kmspj"), "lasiq", 1, 4, 2);
+  test(S("tjboh"), "kfqmr", 1, 5, S::npos);
+  test(S("ilbcj"), "klnitfaobg", 1, 0, S::npos);
+  test(S("jkngf"), "gjhmdlqikp", 1, 1, 3);
+  test(S("gfcql"), "skbgtahqej", 1, 5, S::npos);
+  test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 2);
+  test(S("bthpg"), "bjgfmnlkio", 1, 10, 4);
+  test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, S::npos);
+  test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, S::npos);
+  test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 1);
+  test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, 1);
+  test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, 1);
+  test(S("ndrhl"), "", 2, 0, S::npos);
+  test(S("mrecp"), "otkgb", 2, 0, S::npos);
+  test(S("qlasf"), "cqsjl", 2, 1, S::npos);
+  test(S("smaqd"), "dpifl", 2, 2, 4);
+  test(S("hjeni"), "oapht", 2, 4, S::npos);
+  test(S("ocmfj"), "cifts", 2, 5, 3);
+  test(S("hmftq"), "nmsckbgalo", 2, 0, S::npos);
+  test(S("fklad"), "tpksqhamle", 2, 1, S::npos);
+  test(S("dirnm"), "tpdrchmkji", 2, 5, 2);
+  test(S("hrgdc"), "ijagfkblst", 2, 9, 2);
+  test(S("ifakg"), "kpocsignjb", 2, 10, 3);
+  test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, S::npos);
+  test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, S::npos);
+  test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 3);
+  test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, 2);
+  test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, 2);
+  test(S("cjgao"), "", 4, 0, S::npos);
+  test(S("kjplq"), "mabns", 4, 0, S::npos);
+  test(S("herni"), "bdnrp", 4, 1, S::npos);
+  test(S("tadrb"), "scidp", 4, 2, S::npos);
+  test(S("pkfeo"), "agbjl", 4, 4, S::npos);
+  test(S("hoser"), "jfmpr", 4, 5, 4);
+  test(S("kgrsp"), "rbpefghsmj", 4, 0, S::npos);
+  test(S("pgejb"), "apsfntdoqc", 4, 1, S::npos);
+  test(S("thlnq"), "ndkjeisgcl", 4, 5, S::npos);
+  test(S("nbmit"), "rnfpqatdeo", 4, 9, 4);
+  test(S("jgmib"), "bntjlqrfik", 4, 10, 4);
+  test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, S::npos);
+  test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, S::npos);
+  test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 4);
+  test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 4);
+  test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, 4);
+  test(S("klopi"), "", 5, 0, S::npos);
+  test(S("dajhn"), "psthd", 5, 0, S::npos);
+  test(S("jbgno"), "rpmjd", 5, 1, S::npos);
+  test(S("hkjae"), "dfsmk", 5, 2, S::npos);
 }
 
 template <class S>
-void test1()
-{
-    test(S("gbhqo"), "skqne", 5, 4, S::npos);
-    test(S("ktdor"), "kipnf", 5, 5, S::npos);
-    test(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos);
-    test(S("egmjk"), "fsmjcdairn", 5, 1, S::npos);
-    test(S("armql"), "pcdgltbrfj", 5, 5, S::npos);
-    test(S("cdhjo"), "aekfctpirg", 5, 9, S::npos);
-    test(S("jcons"), "ledihrsgpf", 5, 10, S::npos);
-    test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos);
-    test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos);
-    test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, S::npos);
-    test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, S::npos);
-    test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos);
-    test(S("gajqn"), "", 6, 0, S::npos);
-    test(S("stedk"), "hrnat", 6, 0, S::npos);
-    test(S("tjkaf"), "gsqdt", 6, 1, S::npos);
-    test(S("dthpe"), "bspkd", 6, 2, S::npos);
-    test(S("klhde"), "ohcmb", 6, 4, S::npos);
-    test(S("bhlki"), "heatr", 6, 5, S::npos);
-    test(S("lqmoh"), "pmblckedfn", 6, 0, S::npos);
-    test(S("mtqin"), "aceqmsrbik", 6, 1, S::npos);
-    test(S("dpqbr"), "lmbtdehjrn", 6, 5, S::npos);
-    test(S("kdhmo"), "teqmcrlgib", 6, 9, S::npos);
-    test(S("jblqp"), "njolbmspac", 6, 10, S::npos);
-    test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos);
-    test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos);
-    test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, S::npos);
-    test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos);
-    test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos);
-    test(S("jnkrfhotgl"), "", 0, 0, S::npos);
-    test(S("dltjfngbko"), "rqegt", 0, 0, S::npos);
-    test(S("bmjlpkiqde"), "dashm", 0, 1, 8);
-    test(S("skrflobnqm"), "jqirk", 0, 2, 8);
-    test(S("jkpldtshrm"), "rckeg", 0, 4, 1);
-    test(S("ghasdbnjqo"), "jscie", 0, 5, 3);
-    test(S("igrkhpbqjt"), "efsphndliq", 0, 0, S::npos);
-    test(S("ikthdgcamf"), "gdicosleja", 0, 1, 5);
-    test(S("pcofgeniam"), "qcpjibosfl", 0, 5, 0);
-    test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 0);
-    test(S("itphbqsker"), "dtablcrseo", 0, 10, 1);
-    test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, S::npos);
-    test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, S::npos);
-    test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 4);
-    test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 0);
-    test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, 0);
-    test(S("shbcqnmoar"), "", 1, 0, S::npos);
-    test(S("bdoshlmfin"), "ontrs", 1, 0, S::npos);
-    test(S("khfrebnsgq"), "pfkna", 1, 1, S::npos);
-    test(S("getcrsaoji"), "ekosa", 1, 2, 1);
-    test(S("fjiknedcpq"), "anqhk", 1, 4, 4);
-    test(S("tkejgnafrm"), "jekca", 1, 5, 1);
-    test(S("jnakolqrde"), "ikemsjgacf", 1, 0, S::npos);
-    test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, S::npos);
-    test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 1);
-    test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 4);
-    test(S("cigfqkated"), "sqcflrgtim", 1, 10, 1);
-    test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, S::npos);
-    test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, S::npos);
-    test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 1);
-    test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 1);
-    test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, 1);
-    test(S("ectnhskflp"), "", 5, 0, S::npos);
-    test(S("fgtianblpq"), "pijag", 5, 0, S::npos);
-    test(S("mfeqklirnh"), "jrckd", 5, 1, S::npos);
-    test(S("astedncjhk"), "qcloh", 5, 2, 6);
-    test(S("fhlqgcajbr"), "thlmp", 5, 4, S::npos);
-    test(S("epfhocmdng"), "qidmo", 5, 5, 6);
-    test(S("apcnsibger"), "lnegpsjqrd", 5, 0, S::npos);
-    test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 5);
-    test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 7);
-    test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 5);
-    test(S("jbhcfposld"), "trfqgmckbe", 5, 10, S::npos);
-    test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, S::npos);
-    test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, S::npos);
-    test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 5);
-    test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 5);
-    test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, 5);
-    test(S("shoiedtcjb"), "", 9, 0, S::npos);
-    test(S("ebcinjgads"), "tqbnh", 9, 0, S::npos);
-    test(S("dqmregkcfl"), "akmle", 9, 1, S::npos);
-    test(S("ngcrieqajf"), "iqfkm", 9, 2, S::npos);
-    test(S("qosmilgnjb"), "tqjsr", 9, 4, S::npos);
-    test(S("ikabsjtdfl"), "jplqg", 9, 5, 9);
-    test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, S::npos);
-    test(S("fdnplotmgh"), "morkglpesn", 9, 1, S::npos);
-    test(S("fdbicojerm"), "dmicerngat", 9, 5, 9);
-    test(S("mbtafndjcq"), "radgeskbtc", 9, 9, S::npos);
-    test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, S::npos);
-    test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, S::npos);
-    test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, S::npos);
-    test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, S::npos);
-    test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 9);
-    test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, 9);
-    test(S("ncjpmaekbs"), "", 10, 0, S::npos);
-    test(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos);
-    test(S("pqfhsgilen"), "qnpor", 10, 1, S::npos);
-    test(S("gqtjsbdckh"), "otdma", 10, 2, S::npos);
-    test(S("cfkqpjlegi"), "efhjg", 10, 4, S::npos);
-    test(S("beanrfodgj"), "odpte", 10, 5, S::npos);
-    test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos);
-    test(S("iomkfthagj"), "oaklidrbqg", 10, 1, S::npos);
+void test1() {
+  test(S("gbhqo"), "skqne", 5, 4, S::npos);
+  test(S("ktdor"), "kipnf", 5, 5, S::npos);
+  test(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos);
+  test(S("egmjk"), "fsmjcdairn", 5, 1, S::npos);
+  test(S("armql"), "pcdgltbrfj", 5, 5, S::npos);
+  test(S("cdhjo"), "aekfctpirg", 5, 9, S::npos);
+  test(S("jcons"), "ledihrsgpf", 5, 10, S::npos);
+  test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos);
+  test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos);
+  test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, S::npos);
+  test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, S::npos);
+  test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos);
+  test(S("gajqn"), "", 6, 0, S::npos);
+  test(S("stedk"), "hrnat", 6, 0, S::npos);
+  test(S("tjkaf"), "gsqdt", 6, 1, S::npos);
+  test(S("dthpe"), "bspkd", 6, 2, S::npos);
+  test(S("klhde"), "ohcmb", 6, 4, S::npos);
+  test(S("bhlki"), "heatr", 6, 5, S::npos);
+  test(S("lqmoh"), "pmblckedfn", 6, 0, S::npos);
+  test(S("mtqin"), "aceqmsrbik", 6, 1, S::npos);
+  test(S("dpqbr"), "lmbtdehjrn", 6, 5, S::npos);
+  test(S("kdhmo"), "teqmcrlgib", 6, 9, S::npos);
+  test(S("jblqp"), "njolbmspac", 6, 10, S::npos);
+  test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos);
+  test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos);
+  test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, S::npos);
+  test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos);
+  test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos);
+  test(S("jnkrfhotgl"), "", 0, 0, S::npos);
+  test(S("dltjfngbko"), "rqegt", 0, 0, S::npos);
+  test(S("bmjlpkiqde"), "dashm", 0, 1, 8);
+  test(S("skrflobnqm"), "jqirk", 0, 2, 8);
+  test(S("jkpldtshrm"), "rckeg", 0, 4, 1);
+  test(S("ghasdbnjqo"), "jscie", 0, 5, 3);
+  test(S("igrkhpbqjt"), "efsphndliq", 0, 0, S::npos);
+  test(S("ikthdgcamf"), "gdicosleja", 0, 1, 5);
+  test(S("pcofgeniam"), "qcpjibosfl", 0, 5, 0);
+  test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 0);
+  test(S("itphbqsker"), "dtablcrseo", 0, 10, 1);
+  test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, S::npos);
+  test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, S::npos);
+  test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 4);
+  test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 0);
+  test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, 0);
+  test(S("shbcqnmoar"), "", 1, 0, S::npos);
+  test(S("bdoshlmfin"), "ontrs", 1, 0, S::npos);
+  test(S("khfrebnsgq"), "pfkna", 1, 1, S::npos);
+  test(S("getcrsaoji"), "ekosa", 1, 2, 1);
+  test(S("fjiknedcpq"), "anqhk", 1, 4, 4);
+  test(S("tkejgnafrm"), "jekca", 1, 5, 1);
+  test(S("jnakolqrde"), "ikemsjgacf", 1, 0, S::npos);
+  test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, S::npos);
+  test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 1);
+  test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 4);
+  test(S("cigfqkated"), "sqcflrgtim", 1, 10, 1);
+  test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, S::npos);
+  test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, S::npos);
+  test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 1);
+  test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 1);
+  test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, 1);
+  test(S("ectnhskflp"), "", 5, 0, S::npos);
+  test(S("fgtianblpq"), "pijag", 5, 0, S::npos);
+  test(S("mfeqklirnh"), "jrckd", 5, 1, S::npos);
+  test(S("astedncjhk"), "qcloh", 5, 2, 6);
+  test(S("fhlqgcajbr"), "thlmp", 5, 4, S::npos);
+  test(S("epfhocmdng"), "qidmo", 5, 5, 6);
+  test(S("apcnsibger"), "lnegpsjqrd", 5, 0, S::npos);
+  test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 5);
+  test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 7);
+  test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 5);
+  test(S("jbhcfposld"), "trfqgmckbe", 5, 10, S::npos);
+  test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, S::npos);
+  test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, S::npos);
+  test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 5);
+  test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 5);
+  test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, 5);
+  test(S("shoiedtcjb"), "", 9, 0, S::npos);
+  test(S("ebcinjgads"), "tqbnh", 9, 0, S::npos);
+  test(S("dqmregkcfl"), "akmle", 9, 1, S::npos);
+  test(S("ngcrieqajf"), "iqfkm", 9, 2, S::npos);
+  test(S("qosmilgnjb"), "tqjsr", 9, 4, S::npos);
+  test(S("ikabsjtdfl"), "jplqg", 9, 5, 9);
+  test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, S::npos);
+  test(S("fdnplotmgh"), "morkglpesn", 9, 1, S::npos);
+  test(S("fdbicojerm"), "dmicerngat", 9, 5, 9);
+  test(S("mbtafndjcq"), "radgeskbtc", 9, 9, S::npos);
+  test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, S::npos);
+  test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, S::npos);
+  test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, S::npos);
+  test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, S::npos);
+  test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 9);
+  test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, 9);
+  test(S("ncjpmaekbs"), "", 10, 0, S::npos);
+  test(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos);
+  test(S("pqfhsgilen"), "qnpor", 10, 1, S::npos);
+  test(S("gqtjsbdckh"), "otdma", 10, 2, S::npos);
+  test(S("cfkqpjlegi"), "efhjg", 10, 4, S::npos);
+  test(S("beanrfodgj"), "odpte", 10, 5, S::npos);
+  test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos);
+  test(S("iomkfthagj"), "oaklidrbqg", 10, 1, S::npos);
 }
 
 template <class S>
-void test2()
-{
-    test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, S::npos);
-    test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, S::npos);
-    test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, S::npos);
-    test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos);
-    test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, S::npos);
-    test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, S::npos);
-    test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, S::npos);
-    test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos);
-    test(S("cqjohampgd"), "", 11, 0, S::npos);
-    test(S("hobitmpsan"), "aocjb", 11, 0, S::npos);
-    test(S("tjehkpsalm"), "jbrnk", 11, 1, S::npos);
-    test(S("ngfbojitcl"), "tqedg", 11, 2, S::npos);
-    test(S("rcfkdbhgjo"), "nqskp", 11, 4, S::npos);
-    test(S("qghptonrea"), "eaqkl", 11, 5, S::npos);
-    test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos);
-    test(S("hlmgabenti"), "lsftgajqpm", 11, 1, S::npos);
-    test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, S::npos);
-    test(S("jqedtkornm"), "shkncmiaqj", 11, 9, S::npos);
-    test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, S::npos);
-    test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos);
-    test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos);
-    test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, S::npos);
-    test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos);
-    test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos);
-    test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, S::npos);
-    test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, S::npos);
-    test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 4);
-    test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 3);
-    test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 3);
-    test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 3);
-    test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, S::npos);
-    test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 19);
-    test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 2);
-    test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 2);
-    test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 2);
-    test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, S::npos);
-    test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 16);
-    test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 1);
-    test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 0);
-    test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, 0);
-    test(S("febhmqtjanokscdirpgl"), "", 1, 0, S::npos);
-    test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, S::npos);
-    test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 6);
-    test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 1);
-    test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 1);
-    test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 6);
-    test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, S::npos);
-    test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 19);
-    test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 4);
-    test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 1);
-    test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 1);
-    test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, S::npos);
-    test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 7);
-    test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 1);
-    test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 1);
-    test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, 1);
-    test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, S::npos);
-    test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, S::npos);
-    test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 12);
-    test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, S::npos);
-    test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 10);
-    test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 15);
-    test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, S::npos);
-    test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, S::npos);
-    test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 11);
-    test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 10);
-    test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 11);
-    test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, S::npos);
-    test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 18);
-    test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 10);
-    test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 10);
-    test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, 10);
-    test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, S::npos);
-    test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, S::npos);
-    test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, S::npos);
-    test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, S::npos);
-    test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, S::npos);
-    test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 19);
-    test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, S::npos);
-    test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, S::npos);
-    test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, S::npos);
-    test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, S::npos);
-    test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, S::npos);
-    test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, S::npos);
-    test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, S::npos);
-    test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 19);
-    test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 19);
-    test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, 19);
-    test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos);
-    test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos);
-    test(S("grkpahljcftesdmonqib"), "odife", 20, 1, S::npos);
-    test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, S::npos);
-    test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, S::npos);
-    test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, S::npos);
-    test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos);
-    test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, S::npos);
-    test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, S::npos);
-    test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, S::npos);
-    test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, S::npos);
-    test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos);
+void test2() {
+  test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, S::npos);
+  test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, S::npos);
+  test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, S::npos);
+  test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos);
+  test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, S::npos);
+  test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, S::npos);
+  test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, S::npos);
+  test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos);
+  test(S("cqjohampgd"), "", 11, 0, S::npos);
+  test(S("hobitmpsan"), "aocjb", 11, 0, S::npos);
+  test(S("tjehkpsalm"), "jbrnk", 11, 1, S::npos);
+  test(S("ngfbojitcl"), "tqedg", 11, 2, S::npos);
+  test(S("rcfkdbhgjo"), "nqskp", 11, 4, S::npos);
+  test(S("qghptonrea"), "eaqkl", 11, 5, S::npos);
+  test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos);
+  test(S("hlmgabenti"), "lsftgajqpm", 11, 1, S::npos);
+  test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, S::npos);
+  test(S("jqedtkornm"), "shkncmiaqj", 11, 9, S::npos);
+  test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, S::npos);
+  test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos);
+  test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos);
+  test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, S::npos);
+  test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos);
+  test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos);
+  test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, S::npos);
+  test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, S::npos);
+  test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 4);
+  test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 3);
+  test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 3);
+  test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 3);
+  test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, S::npos);
+  test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 19);
+  test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 2);
+  test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 2);
+  test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 2);
+  test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, S::npos);
+  test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 16);
+  test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 1);
+  test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 0);
+  test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, 0);
+  test(S("febhmqtjanokscdirpgl"), "", 1, 0, S::npos);
+  test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, S::npos);
+  test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 6);
+  test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 1);
+  test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 1);
+  test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 6);
+  test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, S::npos);
+  test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 19);
+  test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 4);
+  test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 1);
+  test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 1);
+  test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, S::npos);
+  test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 7);
+  test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 1);
+  test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 1);
+  test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, 1);
+  test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, S::npos);
+  test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, S::npos);
+  test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 12);
+  test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, S::npos);
+  test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 10);
+  test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 15);
+  test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, S::npos);
+  test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, S::npos);
+  test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 11);
+  test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 10);
+  test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 11);
+  test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, S::npos);
+  test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 18);
+  test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 10);
+  test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 10);
+  test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, 10);
+  test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, S::npos);
+  test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, S::npos);
+  test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, S::npos);
+  test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, S::npos);
+  test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, S::npos);
+  test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 19);
+  test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, S::npos);
+  test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, S::npos);
+  test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, S::npos);
+  test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, S::npos);
+  test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, S::npos);
+  test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, S::npos);
+  test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, S::npos);
+  test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 19);
+  test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 19);
+  test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, 19);
+  test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos);
+  test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos);
+  test(S("grkpahljcftesdmonqib"), "odife", 20, 1, S::npos);
+  test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, S::npos);
+  test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, S::npos);
+  test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, S::npos);
+  test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos);
+  test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, S::npos);
+  test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, S::npos);
+  test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, S::npos);
+  test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, S::npos);
+  test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos);
 }
 
 template <class S>
-void test3()
-{
-    test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, S::npos);
-    test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, S::npos);
-    test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, S::npos);
-    test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos);
-    test(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos);
-    test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos);
-    test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, S::npos);
-    test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, S::npos);
-    test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, S::npos);
-    test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, S::npos);
-    test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos);
-    test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, S::npos);
-    test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, S::npos);
-    test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, S::npos);
-    test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, S::npos);
-    test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos);
-    test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, S::npos);
-    test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, S::npos);
-    test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, S::npos);
-    test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos);
+void test3() {
+  test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, S::npos);
+  test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, S::npos);
+  test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, S::npos);
+  test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos);
+  test(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos);
+  test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos);
+  test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, S::npos);
+  test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, S::npos);
+  test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, S::npos);
+  test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, S::npos);
+  test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos);
+  test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, S::npos);
+  test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, S::npos);
+  test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, S::npos);
+  test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, S::npos);
+  test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos);
+  test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, S::npos);
+  test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, S::npos);
+  test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, S::npos);
+  test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
     test2<S>();
     test3<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find_first_of( "",      0, 0) == SV::npos, "" );
-    static_assert (sv1.find_first_of( "irkhs", 0, 5) == SV::npos, "" );
-    static_assert (sv2.find_first_of( "",      0, 0) == SV::npos, "" );
-    static_assert (sv2.find_first_of( "gfsrt", 0, 5) == SV::npos, "" );
-    static_assert (sv2.find_first_of( "lecar", 0, 5) == 0, "" );
-    }
+    static_assert(sv1.find_first_of("", 0, 0) == SV::npos, "");
+    static_assert(sv1.find_first_of("irkhs", 0, 5) == SV::npos, "");
+    static_assert(sv2.find_first_of("", 0, 0) == SV::npos, "");
+    static_assert(sv2.find_first_of("gfsrt", 0, 5) == SV::npos, "");
+    static_assert(sv2.find_first_of("lecar", 0, 5) == 0, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_first_of_string_view_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_first_of_string_view_size.pass.cpp
index 62bfe9fd5f6da6d..285aa8ad8c7fb7b 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_first_of_string_view_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_first_of_string_view_size.pass.cpp
@@ -18,138 +18,131 @@
 #include "test_macros.h"
 
 template <class S>
-void
-test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str, pos));
-    assert(s.find_first_of(str, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x < s.size());
+void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str, pos));
+  assert(s.find_first_of(str, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x < s.size());
 }
 
 template <class S>
-void
-test(const S& s, const S& str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str));
-    assert(s.find_first_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+void test(const S& s, const S& str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_first_of(str));
+  assert(s.find_first_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), S(""), 0, S::npos);
-    test(S(""), S("laenf"), 0, S::npos);
-    test(S(""), S("pqlnkmbdjo"), 0, S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
-    test(S(""), S(""), 1, S::npos);
-    test(S(""), S("bjaht"), 1, S::npos);
-    test(S(""), S("hjlcmgpket"), 1, S::npos);
-    test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
-    test(S("fodgq"), S(""), 0, S::npos);
-    test(S("qanej"), S("dfkap"), 0, 1);
-    test(S("clbao"), S("ihqrfebgad"), 0, 2);
-    test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, 0);
-    test(S("srdfq"), S(""), 1, S::npos);
-    test(S("oemth"), S("ikcrq"), 1, S::npos);
-    test(S("cdaih"), S("dmajblfhsg"), 1, 1);
-    test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, 1);
-    test(S("cshmd"), S(""), 2, S::npos);
-    test(S("lhcdo"), S("oebqi"), 2, 4);
-    test(S("qnsoh"), S("kojhpmbsfe"), 2, 2);
-    test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, 2);
-    test(S("fmtsp"), S(""), 4, S::npos);
-    test(S("khbpm"), S("aobjd"), 4, S::npos);
-    test(S("pbsji"), S("pcbahntsje"), 4, S::npos);
-    test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, 4);
-    test(S("eqmpa"), S(""), 5, S::npos);
-    test(S("omigs"), S("kocgb"), 5, S::npos);
-    test(S("onmje"), S("fbslrjiqkm"), 5, S::npos);
-    test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, S::npos);
-    test(S("schfa"), S(""), 6, S::npos);
-    test(S("igdsc"), S("qngpd"), 6, S::npos);
-    test(S("brqgo"), S("rodhqklgmb"), 6, S::npos);
-    test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, S::npos);
-    test(S("hcjitbfapl"), S(""), 0, S::npos);
-    test(S("daiprenocl"), S("ashjd"), 0, 0);
-    test(S("litpcfdghe"), S("mgojkldsqh"), 0, 0);
-    test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, 0);
-    test(S("qpghtfbaji"), S(""), 1, S::npos);
-    test(S("gfshlcmdjr"), S("nadkh"), 1, 3);
-    test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 1);
-    test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, 1);
-    test(S("crnklpmegd"), S(""), 5, S::npos);
-    test(S("jsbtafedoc"), S("prqgn"), 5, S::npos);
-    test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 5);
-    test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, 5);
-    test(S("lmofqdhpki"), S(""), 9, S::npos);
-    test(S("hnefkqimca"), S("rtjpa"), 9, 9);
-    test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, S::npos);
-    test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, 9);
-    test(S("elgofjmbrq"), S(""), 10, S::npos);
-    test(S("mjqdgalkpc"), S("dplqa"), 10, S::npos);
-    test(S("kthqnfcerm"), S("dkacjoptns"), 10, S::npos);
-    test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, S::npos);
-    test(S("eqsgalomhb"), S(""), 11, S::npos);
-    test(S("akiteljmoh"), S("lofbc"), 11, S::npos);
-    test(S("hlbdfreqjo"), S("astoegbfpn"), 11, S::npos);
-    test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), S(""), 0, S::npos);
-    test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, 3);
-    test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, 0);
-    test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, 0);
-    test(S("jlnkraeodhcspfgbqitm"), S(""), 1, S::npos);
-    test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, 3);
-    test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 1);
-    test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, 1);
-    test(S("hdpkobnsalmcfijregtq"), S(""), 10, S::npos);
-    test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 10);
-    test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 10);
-    test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, 10);
-    test(S("niptglfbosehkamrdqcj"), S(""), 19, S::npos);
-    test(S("copqdhstbingamjfkler"), S("djkqc"), 19, S::npos);
-    test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, 19);
-    test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, 19);
-    test(S("eaintpchlqsbdgrkjofm"), S(""), 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, S::npos);
-    test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, S::npos);
-    test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, S::npos);
-    test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, S::npos);
-    test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, S::npos);
+void test0() {
+  test(S(""), S(""), 0, S::npos);
+  test(S(""), S("laenf"), 0, S::npos);
+  test(S(""), S("pqlnkmbdjo"), 0, S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
+  test(S(""), S(""), 1, S::npos);
+  test(S(""), S("bjaht"), 1, S::npos);
+  test(S(""), S("hjlcmgpket"), 1, S::npos);
+  test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
+  test(S("fodgq"), S(""), 0, S::npos);
+  test(S("qanej"), S("dfkap"), 0, 1);
+  test(S("clbao"), S("ihqrfebgad"), 0, 2);
+  test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, 0);
+  test(S("srdfq"), S(""), 1, S::npos);
+  test(S("oemth"), S("ikcrq"), 1, S::npos);
+  test(S("cdaih"), S("dmajblfhsg"), 1, 1);
+  test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, 1);
+  test(S("cshmd"), S(""), 2, S::npos);
+  test(S("lhcdo"), S("oebqi"), 2, 4);
+  test(S("qnsoh"), S("kojhpmbsfe"), 2, 2);
+  test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, 2);
+  test(S("fmtsp"), S(""), 4, S::npos);
+  test(S("khbpm"), S("aobjd"), 4, S::npos);
+  test(S("pbsji"), S("pcbahntsje"), 4, S::npos);
+  test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, 4);
+  test(S("eqmpa"), S(""), 5, S::npos);
+  test(S("omigs"), S("kocgb"), 5, S::npos);
+  test(S("onmje"), S("fbslrjiqkm"), 5, S::npos);
+  test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, S::npos);
+  test(S("schfa"), S(""), 6, S::npos);
+  test(S("igdsc"), S("qngpd"), 6, S::npos);
+  test(S("brqgo"), S("rodhqklgmb"), 6, S::npos);
+  test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, S::npos);
+  test(S("hcjitbfapl"), S(""), 0, S::npos);
+  test(S("daiprenocl"), S("ashjd"), 0, 0);
+  test(S("litpcfdghe"), S("mgojkldsqh"), 0, 0);
+  test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, 0);
+  test(S("qpghtfbaji"), S(""), 1, S::npos);
+  test(S("gfshlcmdjr"), S("nadkh"), 1, 3);
+  test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 1);
+  test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, 1);
+  test(S("crnklpmegd"), S(""), 5, S::npos);
+  test(S("jsbtafedoc"), S("prqgn"), 5, S::npos);
+  test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 5);
+  test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, 5);
+  test(S("lmofqdhpki"), S(""), 9, S::npos);
+  test(S("hnefkqimca"), S("rtjpa"), 9, 9);
+  test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, S::npos);
+  test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, 9);
+  test(S("elgofjmbrq"), S(""), 10, S::npos);
+  test(S("mjqdgalkpc"), S("dplqa"), 10, S::npos);
+  test(S("kthqnfcerm"), S("dkacjoptns"), 10, S::npos);
+  test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, S::npos);
+  test(S("eqsgalomhb"), S(""), 11, S::npos);
+  test(S("akiteljmoh"), S("lofbc"), 11, S::npos);
+  test(S("hlbdfreqjo"), S("astoegbfpn"), 11, S::npos);
+  test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), S(""), 0, S::npos);
+  test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, 3);
+  test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, 0);
+  test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, 0);
+  test(S("jlnkraeodhcspfgbqitm"), S(""), 1, S::npos);
+  test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, 3);
+  test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 1);
+  test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, 1);
+  test(S("hdpkobnsalmcfijregtq"), S(""), 10, S::npos);
+  test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 10);
+  test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 10);
+  test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, 10);
+  test(S("niptglfbosehkamrdqcj"), S(""), 19, S::npos);
+  test(S("copqdhstbingamjfkler"), S("djkqc"), 19, S::npos);
+  test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, 19);
+  test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, 19);
+  test(S("eaintpchlqsbdgrkjofm"), S(""), 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, S::npos);
+  test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, S::npos);
+  test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, S::npos);
+  test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, S::npos);
+  test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, S::npos);
 }
 
 template <class S>
-void test1()
-{
-    test(S(""), S(""), S::npos);
-    test(S(""), S("laenf"), S::npos);
-    test(S(""), S("pqlnkmbdjo"), S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
-    test(S("nhmko"), S(""), S::npos);
-    test(S("lahfb"), S("irkhs"), 2);
-    test(S("gmfhd"), S("kantesmpgj"), 0);
-    test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), 0);
-    test(S("eolhfgpjqk"), S(""), S::npos);
-    test(S("nbatdlmekr"), S("bnrpe"), 0);
-    test(S("jdmciepkaq"), S("jtdaefblso"), 0);
-    test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), 0);
-    test(S("gprdcokbnjhlsfmtieqa"), S(""), S::npos);
-    test(S("qjghlnftcaismkropdeb"), S("bjaht"), 1);
-    test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 0);
-    test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), 0);
+void test1() {
+  test(S(""), S(""), S::npos);
+  test(S(""), S("laenf"), S::npos);
+  test(S(""), S("pqlnkmbdjo"), S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
+  test(S("nhmko"), S(""), S::npos);
+  test(S("lahfb"), S("irkhs"), 2);
+  test(S("gmfhd"), S("kantesmpgj"), 0);
+  test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), 0);
+  test(S("eolhfgpjqk"), S(""), S::npos);
+  test(S("nbatdlmekr"), S("bnrpe"), 0);
+  test(S("jdmciepkaq"), S("jtdaefblso"), 0);
+  test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), 0);
+  test(S("gprdcokbnjhlsfmtieqa"), S(""), S::npos);
+  test(S("qjghlnftcaismkropdeb"), S("bjaht"), 1);
+  test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 0);
+  test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), 0);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
-    }
+  }
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_char_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_char_size.pass.cpp
index 1a3b93793751557..392e689b8be4db5 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_char_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_char_size.pass.cpp
@@ -19,29 +19,23 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, typename S::value_type c, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(c, pos));
-    assert(s.find_last_not_of(c, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+void test(const S& s, typename S::value_type c, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(c, pos));
+  assert(s.find_last_not_of(c, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-void
-test(const S& s, typename S::value_type c, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(c));
-    assert(s.find_last_not_of(c) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+void test(const S& s, typename S::value_type c, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(c));
+  assert(s.find_last_not_of(c) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test(S(""), 'i', 0, S::npos);
     test(S(""), 'i', 1, S::npos);
@@ -68,20 +62,20 @@ int main(int, char**)
     test(S("csope"), 'i', 4);
     test(S("gfsmthlkon"), 'i', 9);
     test(S("laenfsbridchgotmkqpj"), 'i', 19);
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find_last_not_of( 'i', 0 ) == SV::npos, "" );
-    static_assert (sv1.find_last_not_of( 'i', 1 ) == SV::npos, "" );
-    static_assert (sv2.find_last_not_of( 'a', 0 ) == SV::npos, "" );
-    static_assert (sv2.find_last_not_of( 'a', 1 ) == 1, "" );
-    static_assert (sv2.find_last_not_of( 'e', 5 ) == 3, "" );
-    }
+    static_assert(sv1.find_last_not_of('i', 0) == SV::npos, "");
+    static_assert(sv1.find_last_not_of('i', 1) == SV::npos, "");
+    static_assert(sv2.find_last_not_of('a', 0) == SV::npos, "");
+    static_assert(sv2.find_last_not_of('a', 1) == 1, "");
+    static_assert(sv2.find_last_not_of('e', 5) == 3, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_pointer_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_pointer_size.pass.cpp
index ba59de8368c4610..c81c88f0cfa0724 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_pointer_size.pass.cpp
@@ -19,151 +19,143 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str, pos));
-    assert(s.find_last_not_of(str, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+void test(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str, pos));
+  assert(s.find_last_not_of(str, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type x)
-{
-    assert(s.find_last_not_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+void test(const S& s, const typename S::value_type* str, typename S::size_type x) {
+  assert(s.find_last_not_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), "", 0, S::npos);
-    test(S(""), "laenf", 0, S::npos);
-    test(S(""), "pqlnkmbdjo", 0, S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
-    test(S(""), "", 1, S::npos);
-    test(S(""), "bjaht", 1, S::npos);
-    test(S(""), "hjlcmgpket", 1, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
-    test(S("fodgq"), "", 0, 0);
-    test(S("qanej"), "dfkap", 0, 0);
-    test(S("clbao"), "ihqrfebgad", 0, 0);
-    test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, S::npos);
-    test(S("srdfq"), "", 1, 1);
-    test(S("oemth"), "ikcrq", 1, 1);
-    test(S("cdaih"), "dmajblfhsg", 1, 0);
-    test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, S::npos);
-    test(S("cshmd"), "", 2, 2);
-    test(S("lhcdo"), "oebqi", 2, 2);
-    test(S("qnsoh"), "kojhpmbsfe", 2, 1);
-    test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, S::npos);
-    test(S("fmtsp"), "", 4, 4);
-    test(S("khbpm"), "aobjd", 4, 4);
-    test(S("pbsji"), "pcbahntsje", 4, 4);
-    test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, S::npos);
-    test(S("eqmpa"), "", 5, 4);
-    test(S("omigs"), "kocgb", 5, 4);
-    test(S("onmje"), "fbslrjiqkm", 5, 4);
-    test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, S::npos);
-    test(S("schfa"), "", 6, 4);
-    test(S("igdsc"), "qngpd", 6, 4);
-    test(S("brqgo"), "rodhqklgmb", 6, S::npos);
-    test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, S::npos);
-    test(S("hcjitbfapl"), "", 0, 0);
-    test(S("daiprenocl"), "ashjd", 0, S::npos);
-    test(S("litpcfdghe"), "mgojkldsqh", 0, S::npos);
-    test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, S::npos);
-    test(S("qpghtfbaji"), "", 1, 1);
-    test(S("gfshlcmdjr"), "nadkh", 1, 1);
-    test(S("nkodajteqp"), "ofdrqmkebl", 1, 0);
-    test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, S::npos);
-    test(S("crnklpmegd"), "", 5, 5);
-    test(S("jsbtafedoc"), "prqgn", 5, 5);
-    test(S("qnmodrtkeb"), "pejafmnokr", 5, 4);
-    test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, S::npos);
-    test(S("lmofqdhpki"), "", 9, 9);
-    test(S("hnefkqimca"), "rtjpa", 9, 8);
-    test(S("drtasbgmfp"), "ktsrmnqagd", 9, 9);
-    test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, S::npos);
-    test(S("elgofjmbrq"), "", 10, 9);
-    test(S("mjqdgalkpc"), "dplqa", 10, 9);
-    test(S("kthqnfcerm"), "dkacjoptns", 10, 9);
-    test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, S::npos);
-    test(S("eqsgalomhb"), "", 11, 9);
-    test(S("akiteljmoh"), "lofbc", 11, 9);
-    test(S("hlbdfreqjo"), "astoegbfpn", 11, 8);
-    test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), "", 0, 0);
-    test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, 0);
-    test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, S::npos);
-    test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, S::npos);
-    test(S("jlnkraeodhcspfgbqitm"), "", 1, 1);
-    test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, 1);
-    test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 0);
-    test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, S::npos);
-    test(S("hdpkobnsalmcfijregtq"), "", 10, 10);
-    test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 9);
-    test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 9);
-    test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, S::npos);
-    test(S("niptglfbosehkamrdqcj"), "", 19, 19);
-    test(S("copqdhstbingamjfkler"), "djkqc", 19, 19);
-    test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, 16);
-    test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, S::npos);
-    test(S("eaintpchlqsbdgrkjofm"), "", 20, 19);
-    test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, 18);
-    test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, 19);
-    test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), "", 21, 19);
-    test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, 19);
-    test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, 19);
-    test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, S::npos);
+void test0() {
+  test(S(""), "", 0, S::npos);
+  test(S(""), "laenf", 0, S::npos);
+  test(S(""), "pqlnkmbdjo", 0, S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
+  test(S(""), "", 1, S::npos);
+  test(S(""), "bjaht", 1, S::npos);
+  test(S(""), "hjlcmgpket", 1, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
+  test(S("fodgq"), "", 0, 0);
+  test(S("qanej"), "dfkap", 0, 0);
+  test(S("clbao"), "ihqrfebgad", 0, 0);
+  test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, S::npos);
+  test(S("srdfq"), "", 1, 1);
+  test(S("oemth"), "ikcrq", 1, 1);
+  test(S("cdaih"), "dmajblfhsg", 1, 0);
+  test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, S::npos);
+  test(S("cshmd"), "", 2, 2);
+  test(S("lhcdo"), "oebqi", 2, 2);
+  test(S("qnsoh"), "kojhpmbsfe", 2, 1);
+  test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, S::npos);
+  test(S("fmtsp"), "", 4, 4);
+  test(S("khbpm"), "aobjd", 4, 4);
+  test(S("pbsji"), "pcbahntsje", 4, 4);
+  test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, S::npos);
+  test(S("eqmpa"), "", 5, 4);
+  test(S("omigs"), "kocgb", 5, 4);
+  test(S("onmje"), "fbslrjiqkm", 5, 4);
+  test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, S::npos);
+  test(S("schfa"), "", 6, 4);
+  test(S("igdsc"), "qngpd", 6, 4);
+  test(S("brqgo"), "rodhqklgmb", 6, S::npos);
+  test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, S::npos);
+  test(S("hcjitbfapl"), "", 0, 0);
+  test(S("daiprenocl"), "ashjd", 0, S::npos);
+  test(S("litpcfdghe"), "mgojkldsqh", 0, S::npos);
+  test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, S::npos);
+  test(S("qpghtfbaji"), "", 1, 1);
+  test(S("gfshlcmdjr"), "nadkh", 1, 1);
+  test(S("nkodajteqp"), "ofdrqmkebl", 1, 0);
+  test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, S::npos);
+  test(S("crnklpmegd"), "", 5, 5);
+  test(S("jsbtafedoc"), "prqgn", 5, 5);
+  test(S("qnmodrtkeb"), "pejafmnokr", 5, 4);
+  test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, S::npos);
+  test(S("lmofqdhpki"), "", 9, 9);
+  test(S("hnefkqimca"), "rtjpa", 9, 8);
+  test(S("drtasbgmfp"), "ktsrmnqagd", 9, 9);
+  test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, S::npos);
+  test(S("elgofjmbrq"), "", 10, 9);
+  test(S("mjqdgalkpc"), "dplqa", 10, 9);
+  test(S("kthqnfcerm"), "dkacjoptns", 10, 9);
+  test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, S::npos);
+  test(S("eqsgalomhb"), "", 11, 9);
+  test(S("akiteljmoh"), "lofbc", 11, 9);
+  test(S("hlbdfreqjo"), "astoegbfpn", 11, 8);
+  test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), "", 0, 0);
+  test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, 0);
+  test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, S::npos);
+  test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, S::npos);
+  test(S("jlnkraeodhcspfgbqitm"), "", 1, 1);
+  test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, 1);
+  test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 0);
+  test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, S::npos);
+  test(S("hdpkobnsalmcfijregtq"), "", 10, 10);
+  test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 9);
+  test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 9);
+  test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, S::npos);
+  test(S("niptglfbosehkamrdqcj"), "", 19, 19);
+  test(S("copqdhstbingamjfkler"), "djkqc", 19, 19);
+  test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, 16);
+  test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, S::npos);
+  test(S("eaintpchlqsbdgrkjofm"), "", 20, 19);
+  test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, 18);
+  test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, 19);
+  test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), "", 21, 19);
+  test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, 19);
+  test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, 19);
+  test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, S::npos);
 }
 
 template <class S>
-void test1()
-{
-    test(S(""), "", S::npos);
-    test(S(""), "laenf", S::npos);
-    test(S(""), "pqlnkmbdjo", S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", S::npos);
-    test(S("nhmko"), "", 4);
-    test(S("lahfb"), "irkhs", 4);
-    test(S("gmfhd"), "kantesmpgj", 4);
-    test(S("odaft"), "oknlrstdpiqmjbaghcfe", S::npos);
-    test(S("eolhfgpjqk"), "", 9);
-    test(S("nbatdlmekr"), "bnrpe", 8);
-    test(S("jdmciepkaq"), "jtdaefblso", 9);
-    test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", S::npos);
-    test(S("gprdcokbnjhlsfmtieqa"), "", 19);
-    test(S("qjghlnftcaismkropdeb"), "bjaht", 18);
-    test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 17);
-    test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", S::npos);
+void test1() {
+  test(S(""), "", S::npos);
+  test(S(""), "laenf", S::npos);
+  test(S(""), "pqlnkmbdjo", S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", S::npos);
+  test(S("nhmko"), "", 4);
+  test(S("lahfb"), "irkhs", 4);
+  test(S("gmfhd"), "kantesmpgj", 4);
+  test(S("odaft"), "oknlrstdpiqmjbaghcfe", S::npos);
+  test(S("eolhfgpjqk"), "", 9);
+  test(S("nbatdlmekr"), "bnrpe", 8);
+  test(S("jdmciepkaq"), "jtdaefblso", 9);
+  test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", S::npos);
+  test(S("gprdcokbnjhlsfmtieqa"), "", 19);
+  test(S("qjghlnftcaismkropdeb"), "bjaht", 18);
+  test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 17);
+  test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", S::npos);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find_last_not_of( "",      0) == SV::npos, "" );
-    static_assert (sv1.find_last_not_of( "irkhs", 5) == SV::npos, "" );
-    static_assert (sv2.find_last_not_of( "",      0) == 0, "" );
-    static_assert (sv2.find_last_not_of( "gfsrt", 5) == 4, "" );
-    static_assert (sv2.find_last_not_of( "lecar", 5) == 3, "" );
-    }
+    static_assert(sv1.find_last_not_of("", 0) == SV::npos, "");
+    static_assert(sv1.find_last_not_of("irkhs", 5) == SV::npos, "");
+    static_assert(sv2.find_last_not_of("", 0) == 0, "");
+    static_assert(sv2.find_last_not_of("gfsrt", 5) == 4, "");
+    static_assert(sv2.find_last_not_of("lecar", 5) == 3, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_pointer_size_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_pointer_size_size.pass.cpp
index 37198114363320a..86d00c5fad5677f 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_pointer_size_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_pointer_size_size.pass.cpp
@@ -19,378 +19,374 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type n, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str, pos, n));
-    assert(s.find_last_not_of(str, pos, n) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+void test(const S& s,
+          const typename S::value_type* str,
+          typename S::size_type pos,
+          typename S::size_type n,
+          typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str, pos, n));
+  assert(s.find_last_not_of(str, pos, n) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), "", 0, 0, S::npos);
-    test(S(""), "irkhs", 0, 0, S::npos);
-    test(S(""), "kante", 0, 1, S::npos);
-    test(S(""), "oknlr", 0, 2, S::npos);
-    test(S(""), "pcdro", 0, 4, S::npos);
-    test(S(""), "bnrpe", 0, 5, S::npos);
-    test(S(""), "jtdaefblso", 0, 0, S::npos);
-    test(S(""), "oselktgbca", 0, 1, S::npos);
-    test(S(""), "eqgaplhckj", 0, 5, S::npos);
-    test(S(""), "bjahtcmnlp", 0, 9, S::npos);
-    test(S(""), "hjlcmgpket", 0, 10, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
-    test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
-    test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
-    test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
-    test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
-    test(S(""), "", 1, 0, S::npos);
-    test(S(""), "lbtqd", 1, 0, S::npos);
-    test(S(""), "tboim", 1, 1, S::npos);
-    test(S(""), "slcer", 1, 2, S::npos);
-    test(S(""), "cbjfs", 1, 4, S::npos);
-    test(S(""), "aqibs", 1, 5, S::npos);
-    test(S(""), "gtfblmqinc", 1, 0, S::npos);
-    test(S(""), "mkqpbtdalg", 1, 1, S::npos);
-    test(S(""), "kphatlimcd", 1, 5, S::npos);
-    test(S(""), "pblasqogic", 1, 9, S::npos);
-    test(S(""), "arosdhcfme", 1, 10, S::npos);
-    test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
-    test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
-    test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
-    test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
-    test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
-    test(S("eaint"), "", 0, 0, 0);
-    test(S("binja"), "gfsrt", 0, 0, 0);
-    test(S("latkm"), "pfsoc", 0, 1, 0);
-    test(S("lecfr"), "tpflm", 0, 2, 0);
-    test(S("eqkst"), "sgkec", 0, 4, S::npos);
-    test(S("cdafr"), "romds", 0, 5, 0);
-    test(S("prbhe"), "qhjistlgmr", 0, 0, 0);
-    test(S("lbisk"), "pedfirsglo", 0, 1, 0);
-    test(S("hrlpd"), "aqcoslgrmk", 0, 5, 0);
-    test(S("ehmja"), "dabckmepqj", 0, 9, S::npos);
-    test(S("mhqgd"), "pqscrjthli", 0, 10, 0);
-    test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, 0);
-    test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, 0);
-    test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, 0);
-    test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, S::npos);
-    test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, S::npos);
-    test(S("clrgb"), "", 1, 0, 1);
-    test(S("tjmek"), "osmia", 1, 0, 1);
-    test(S("bgstp"), "ckonl", 1, 1, 1);
-    test(S("hstrk"), "ilcaj", 1, 2, 1);
-    test(S("kmspj"), "lasiq", 1, 4, 1);
-    test(S("tjboh"), "kfqmr", 1, 5, 1);
-    test(S("ilbcj"), "klnitfaobg", 1, 0, 1);
-    test(S("jkngf"), "gjhmdlqikp", 1, 1, 1);
-    test(S("gfcql"), "skbgtahqej", 1, 5, 1);
-    test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 1);
-    test(S("bthpg"), "bjgfmnlkio", 1, 10, 1);
-    test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, 1);
-    test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, 1);
-    test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, S::npos);
-    test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, S::npos);
-    test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, S::npos);
-    test(S("ndrhl"), "", 2, 0, 2);
-    test(S("mrecp"), "otkgb", 2, 0, 2);
-    test(S("qlasf"), "cqsjl", 2, 1, 2);
-    test(S("smaqd"), "dpifl", 2, 2, 2);
-    test(S("hjeni"), "oapht", 2, 4, 2);
-    test(S("ocmfj"), "cifts", 2, 5, 2);
-    test(S("hmftq"), "nmsckbgalo", 2, 0, 2);
-    test(S("fklad"), "tpksqhamle", 2, 1, 2);
-    test(S("dirnm"), "tpdrchmkji", 2, 5, 1);
-    test(S("hrgdc"), "ijagfkblst", 2, 9, 1);
-    test(S("ifakg"), "kpocsignjb", 2, 10, 2);
-    test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, 2);
-    test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, 2);
-    test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 2);
-    test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, S::npos);
-    test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, S::npos);
-    test(S("cjgao"), "", 4, 0, 4);
-    test(S("kjplq"), "mabns", 4, 0, 4);
-    test(S("herni"), "bdnrp", 4, 1, 4);
-    test(S("tadrb"), "scidp", 4, 2, 4);
-    test(S("pkfeo"), "agbjl", 4, 4, 4);
-    test(S("hoser"), "jfmpr", 4, 5, 3);
-    test(S("kgrsp"), "rbpefghsmj", 4, 0, 4);
-    test(S("pgejb"), "apsfntdoqc", 4, 1, 4);
-    test(S("thlnq"), "ndkjeisgcl", 4, 5, 4);
-    test(S("nbmit"), "rnfpqatdeo", 4, 9, 3);
-    test(S("jgmib"), "bntjlqrfik", 4, 10, 2);
-    test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, 4);
-    test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, 4);
-    test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 3);
-    test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 2);
-    test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, S::npos);
-    test(S("klopi"), "", 5, 0, 4);
-    test(S("dajhn"), "psthd", 5, 0, 4);
-    test(S("jbgno"), "rpmjd", 5, 1, 4);
-    test(S("hkjae"), "dfsmk", 5, 2, 4);
+void test0() {
+  test(S(""), "", 0, 0, S::npos);
+  test(S(""), "irkhs", 0, 0, S::npos);
+  test(S(""), "kante", 0, 1, S::npos);
+  test(S(""), "oknlr", 0, 2, S::npos);
+  test(S(""), "pcdro", 0, 4, S::npos);
+  test(S(""), "bnrpe", 0, 5, S::npos);
+  test(S(""), "jtdaefblso", 0, 0, S::npos);
+  test(S(""), "oselktgbca", 0, 1, S::npos);
+  test(S(""), "eqgaplhckj", 0, 5, S::npos);
+  test(S(""), "bjahtcmnlp", 0, 9, S::npos);
+  test(S(""), "hjlcmgpket", 0, 10, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
+  test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
+  test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
+  test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
+  test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
+  test(S(""), "", 1, 0, S::npos);
+  test(S(""), "lbtqd", 1, 0, S::npos);
+  test(S(""), "tboim", 1, 1, S::npos);
+  test(S(""), "slcer", 1, 2, S::npos);
+  test(S(""), "cbjfs", 1, 4, S::npos);
+  test(S(""), "aqibs", 1, 5, S::npos);
+  test(S(""), "gtfblmqinc", 1, 0, S::npos);
+  test(S(""), "mkqpbtdalg", 1, 1, S::npos);
+  test(S(""), "kphatlimcd", 1, 5, S::npos);
+  test(S(""), "pblasqogic", 1, 9, S::npos);
+  test(S(""), "arosdhcfme", 1, 10, S::npos);
+  test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
+  test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
+  test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
+  test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
+  test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
+  test(S("eaint"), "", 0, 0, 0);
+  test(S("binja"), "gfsrt", 0, 0, 0);
+  test(S("latkm"), "pfsoc", 0, 1, 0);
+  test(S("lecfr"), "tpflm", 0, 2, 0);
+  test(S("eqkst"), "sgkec", 0, 4, S::npos);
+  test(S("cdafr"), "romds", 0, 5, 0);
+  test(S("prbhe"), "qhjistlgmr", 0, 0, 0);
+  test(S("lbisk"), "pedfirsglo", 0, 1, 0);
+  test(S("hrlpd"), "aqcoslgrmk", 0, 5, 0);
+  test(S("ehmja"), "dabckmepqj", 0, 9, S::npos);
+  test(S("mhqgd"), "pqscrjthli", 0, 10, 0);
+  test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, 0);
+  test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, 0);
+  test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, 0);
+  test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, S::npos);
+  test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, S::npos);
+  test(S("clrgb"), "", 1, 0, 1);
+  test(S("tjmek"), "osmia", 1, 0, 1);
+  test(S("bgstp"), "ckonl", 1, 1, 1);
+  test(S("hstrk"), "ilcaj", 1, 2, 1);
+  test(S("kmspj"), "lasiq", 1, 4, 1);
+  test(S("tjboh"), "kfqmr", 1, 5, 1);
+  test(S("ilbcj"), "klnitfaobg", 1, 0, 1);
+  test(S("jkngf"), "gjhmdlqikp", 1, 1, 1);
+  test(S("gfcql"), "skbgtahqej", 1, 5, 1);
+  test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 1);
+  test(S("bthpg"), "bjgfmnlkio", 1, 10, 1);
+  test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, 1);
+  test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, 1);
+  test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, S::npos);
+  test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, S::npos);
+  test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, S::npos);
+  test(S("ndrhl"), "", 2, 0, 2);
+  test(S("mrecp"), "otkgb", 2, 0, 2);
+  test(S("qlasf"), "cqsjl", 2, 1, 2);
+  test(S("smaqd"), "dpifl", 2, 2, 2);
+  test(S("hjeni"), "oapht", 2, 4, 2);
+  test(S("ocmfj"), "cifts", 2, 5, 2);
+  test(S("hmftq"), "nmsckbgalo", 2, 0, 2);
+  test(S("fklad"), "tpksqhamle", 2, 1, 2);
+  test(S("dirnm"), "tpdrchmkji", 2, 5, 1);
+  test(S("hrgdc"), "ijagfkblst", 2, 9, 1);
+  test(S("ifakg"), "kpocsignjb", 2, 10, 2);
+  test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, 2);
+  test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, 2);
+  test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 2);
+  test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, S::npos);
+  test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, S::npos);
+  test(S("cjgao"), "", 4, 0, 4);
+  test(S("kjplq"), "mabns", 4, 0, 4);
+  test(S("herni"), "bdnrp", 4, 1, 4);
+  test(S("tadrb"), "scidp", 4, 2, 4);
+  test(S("pkfeo"), "agbjl", 4, 4, 4);
+  test(S("hoser"), "jfmpr", 4, 5, 3);
+  test(S("kgrsp"), "rbpefghsmj", 4, 0, 4);
+  test(S("pgejb"), "apsfntdoqc", 4, 1, 4);
+  test(S("thlnq"), "ndkjeisgcl", 4, 5, 4);
+  test(S("nbmit"), "rnfpqatdeo", 4, 9, 3);
+  test(S("jgmib"), "bntjlqrfik", 4, 10, 2);
+  test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, 4);
+  test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, 4);
+  test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 3);
+  test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 2);
+  test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, S::npos);
+  test(S("klopi"), "", 5, 0, 4);
+  test(S("dajhn"), "psthd", 5, 0, 4);
+  test(S("jbgno"), "rpmjd", 5, 1, 4);
+  test(S("hkjae"), "dfsmk", 5, 2, 4);
 }
 
 template <class S>
-void test1()
-{
-    test(S("gbhqo"), "skqne", 5, 4, 4);
-    test(S("ktdor"), "kipnf", 5, 5, 4);
-    test(S("ldprn"), "hmrnqdgifl", 5, 0, 4);
-    test(S("egmjk"), "fsmjcdairn", 5, 1, 4);
-    test(S("armql"), "pcdgltbrfj", 5, 5, 3);
-    test(S("cdhjo"), "aekfctpirg", 5, 9, 4);
-    test(S("jcons"), "ledihrsgpf", 5, 10, 3);
-    test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, 4);
-    test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, 4);
-    test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, 1);
-    test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, 2);
-    test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos);
-    test(S("gajqn"), "", 6, 0, 4);
-    test(S("stedk"), "hrnat", 6, 0, 4);
-    test(S("tjkaf"), "gsqdt", 6, 1, 4);
-    test(S("dthpe"), "bspkd", 6, 2, 4);
-    test(S("klhde"), "ohcmb", 6, 4, 4);
-    test(S("bhlki"), "heatr", 6, 5, 4);
-    test(S("lqmoh"), "pmblckedfn", 6, 0, 4);
-    test(S("mtqin"), "aceqmsrbik", 6, 1, 4);
-    test(S("dpqbr"), "lmbtdehjrn", 6, 5, 4);
-    test(S("kdhmo"), "teqmcrlgib", 6, 9, 4);
-    test(S("jblqp"), "njolbmspac", 6, 10, 3);
-    test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, 4);
-    test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, 4);
-    test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, 1);
-    test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos);
-    test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos);
-    test(S("jnkrfhotgl"), "", 0, 0, 0);
-    test(S("dltjfngbko"), "rqegt", 0, 0, 0);
-    test(S("bmjlpkiqde"), "dashm", 0, 1, 0);
-    test(S("skrflobnqm"), "jqirk", 0, 2, 0);
-    test(S("jkpldtshrm"), "rckeg", 0, 4, 0);
-    test(S("ghasdbnjqo"), "jscie", 0, 5, 0);
-    test(S("igrkhpbqjt"), "efsphndliq", 0, 0, 0);
-    test(S("ikthdgcamf"), "gdicosleja", 0, 1, 0);
-    test(S("pcofgeniam"), "qcpjibosfl", 0, 5, S::npos);
-    test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, S::npos);
-    test(S("itphbqsker"), "dtablcrseo", 0, 10, 0);
-    test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, 0);
-    test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, 0);
-    test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 0);
-    test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, S::npos);
-    test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, S::npos);
-    test(S("shbcqnmoar"), "", 1, 0, 1);
-    test(S("bdoshlmfin"), "ontrs", 1, 0, 1);
-    test(S("khfrebnsgq"), "pfkna", 1, 1, 1);
-    test(S("getcrsaoji"), "ekosa", 1, 2, 0);
-    test(S("fjiknedcpq"), "anqhk", 1, 4, 1);
-    test(S("tkejgnafrm"), "jekca", 1, 5, 0);
-    test(S("jnakolqrde"), "ikemsjgacf", 1, 0, 1);
-    test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, 1);
-    test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 0);
-    test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 1);
-    test(S("cigfqkated"), "sqcflrgtim", 1, 10, S::npos);
-    test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, 1);
-    test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, 1);
-    test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, S::npos);
-    test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, S::npos);
-    test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, S::npos);
-    test(S("ectnhskflp"), "", 5, 0, 5);
-    test(S("fgtianblpq"), "pijag", 5, 0, 5);
-    test(S("mfeqklirnh"), "jrckd", 5, 1, 5);
-    test(S("astedncjhk"), "qcloh", 5, 2, 5);
-    test(S("fhlqgcajbr"), "thlmp", 5, 4, 5);
-    test(S("epfhocmdng"), "qidmo", 5, 5, 5);
-    test(S("apcnsibger"), "lnegpsjqrd", 5, 0, 5);
-    test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 4);
-    test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 5);
-    test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 3);
-    test(S("jbhcfposld"), "trfqgmckbe", 5, 10, 5);
-    test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, 5);
-    test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, 5);
-    test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 1);
-    test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, S::npos);
-    test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, S::npos);
-    test(S("shoiedtcjb"), "", 9, 0, 9);
-    test(S("ebcinjgads"), "tqbnh", 9, 0, 9);
-    test(S("dqmregkcfl"), "akmle", 9, 1, 9);
-    test(S("ngcrieqajf"), "iqfkm", 9, 2, 9);
-    test(S("qosmilgnjb"), "tqjsr", 9, 4, 9);
-    test(S("ikabsjtdfl"), "jplqg", 9, 5, 8);
-    test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, 9);
-    test(S("fdnplotmgh"), "morkglpesn", 9, 1, 9);
-    test(S("fdbicojerm"), "dmicerngat", 9, 5, 8);
-    test(S("mbtafndjcq"), "radgeskbtc", 9, 9, 9);
-    test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 9);
-    test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, 9);
-    test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 9);
-    test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 9);
-    test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 3);
-    test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, S::npos);
-    test(S("ncjpmaekbs"), "", 10, 0, 9);
-    test(S("hlbosgmrak"), "hpmsd", 10, 0, 9);
-    test(S("pqfhsgilen"), "qnpor", 10, 1, 9);
-    test(S("gqtjsbdckh"), "otdma", 10, 2, 9);
-    test(S("cfkqpjlegi"), "efhjg", 10, 4, 9);
-    test(S("beanrfodgj"), "odpte", 10, 5, 9);
-    test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, 9);
-    test(S("iomkfthagj"), "oaklidrbqg", 10, 1, 9);
+void test1() {
+  test(S("gbhqo"), "skqne", 5, 4, 4);
+  test(S("ktdor"), "kipnf", 5, 5, 4);
+  test(S("ldprn"), "hmrnqdgifl", 5, 0, 4);
+  test(S("egmjk"), "fsmjcdairn", 5, 1, 4);
+  test(S("armql"), "pcdgltbrfj", 5, 5, 3);
+  test(S("cdhjo"), "aekfctpirg", 5, 9, 4);
+  test(S("jcons"), "ledihrsgpf", 5, 10, 3);
+  test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, 4);
+  test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, 4);
+  test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, 1);
+  test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, 2);
+  test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, S::npos);
+  test(S("gajqn"), "", 6, 0, 4);
+  test(S("stedk"), "hrnat", 6, 0, 4);
+  test(S("tjkaf"), "gsqdt", 6, 1, 4);
+  test(S("dthpe"), "bspkd", 6, 2, 4);
+  test(S("klhde"), "ohcmb", 6, 4, 4);
+  test(S("bhlki"), "heatr", 6, 5, 4);
+  test(S("lqmoh"), "pmblckedfn", 6, 0, 4);
+  test(S("mtqin"), "aceqmsrbik", 6, 1, 4);
+  test(S("dpqbr"), "lmbtdehjrn", 6, 5, 4);
+  test(S("kdhmo"), "teqmcrlgib", 6, 9, 4);
+  test(S("jblqp"), "njolbmspac", 6, 10, 3);
+  test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, 4);
+  test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, 4);
+  test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, 1);
+  test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, S::npos);
+  test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, S::npos);
+  test(S("jnkrfhotgl"), "", 0, 0, 0);
+  test(S("dltjfngbko"), "rqegt", 0, 0, 0);
+  test(S("bmjlpkiqde"), "dashm", 0, 1, 0);
+  test(S("skrflobnqm"), "jqirk", 0, 2, 0);
+  test(S("jkpldtshrm"), "rckeg", 0, 4, 0);
+  test(S("ghasdbnjqo"), "jscie", 0, 5, 0);
+  test(S("igrkhpbqjt"), "efsphndliq", 0, 0, 0);
+  test(S("ikthdgcamf"), "gdicosleja", 0, 1, 0);
+  test(S("pcofgeniam"), "qcpjibosfl", 0, 5, S::npos);
+  test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, S::npos);
+  test(S("itphbqsker"), "dtablcrseo", 0, 10, 0);
+  test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, 0);
+  test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, 0);
+  test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, 0);
+  test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, S::npos);
+  test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, S::npos);
+  test(S("shbcqnmoar"), "", 1, 0, 1);
+  test(S("bdoshlmfin"), "ontrs", 1, 0, 1);
+  test(S("khfrebnsgq"), "pfkna", 1, 1, 1);
+  test(S("getcrsaoji"), "ekosa", 1, 2, 0);
+  test(S("fjiknedcpq"), "anqhk", 1, 4, 1);
+  test(S("tkejgnafrm"), "jekca", 1, 5, 0);
+  test(S("jnakolqrde"), "ikemsjgacf", 1, 0, 1);
+  test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, 1);
+  test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 0);
+  test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 1);
+  test(S("cigfqkated"), "sqcflrgtim", 1, 10, S::npos);
+  test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, 1);
+  test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, 1);
+  test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, S::npos);
+  test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, S::npos);
+  test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, S::npos);
+  test(S("ectnhskflp"), "", 5, 0, 5);
+  test(S("fgtianblpq"), "pijag", 5, 0, 5);
+  test(S("mfeqklirnh"), "jrckd", 5, 1, 5);
+  test(S("astedncjhk"), "qcloh", 5, 2, 5);
+  test(S("fhlqgcajbr"), "thlmp", 5, 4, 5);
+  test(S("epfhocmdng"), "qidmo", 5, 5, 5);
+  test(S("apcnsibger"), "lnegpsjqrd", 5, 0, 5);
+  test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 4);
+  test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, 5);
+  test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 3);
+  test(S("jbhcfposld"), "trfqgmckbe", 5, 10, 5);
+  test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, 5);
+  test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, 5);
+  test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 1);
+  test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, S::npos);
+  test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, S::npos);
+  test(S("shoiedtcjb"), "", 9, 0, 9);
+  test(S("ebcinjgads"), "tqbnh", 9, 0, 9);
+  test(S("dqmregkcfl"), "akmle", 9, 1, 9);
+  test(S("ngcrieqajf"), "iqfkm", 9, 2, 9);
+  test(S("qosmilgnjb"), "tqjsr", 9, 4, 9);
+  test(S("ikabsjtdfl"), "jplqg", 9, 5, 8);
+  test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, 9);
+  test(S("fdnplotmgh"), "morkglpesn", 9, 1, 9);
+  test(S("fdbicojerm"), "dmicerngat", 9, 5, 8);
+  test(S("mbtafndjcq"), "radgeskbtc", 9, 9, 9);
+  test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 9);
+  test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, 9);
+  test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 9);
+  test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 9);
+  test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 3);
+  test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, S::npos);
+  test(S("ncjpmaekbs"), "", 10, 0, 9);
+  test(S("hlbosgmrak"), "hpmsd", 10, 0, 9);
+  test(S("pqfhsgilen"), "qnpor", 10, 1, 9);
+  test(S("gqtjsbdckh"), "otdma", 10, 2, 9);
+  test(S("cfkqpjlegi"), "efhjg", 10, 4, 9);
+  test(S("beanrfodgj"), "odpte", 10, 5, 9);
+  test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, 9);
+  test(S("iomkfthagj"), "oaklidrbqg", 10, 1, 9);
 }
 
 template <class S>
-void test2()
-{
-    test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, 8);
-    test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, 9);
-    test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, 8);
-    test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, 9);
-    test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, 9);
-    test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, 7);
-    test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, 5);
-    test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos);
-    test(S("cqjohampgd"), "", 11, 0, 9);
-    test(S("hobitmpsan"), "aocjb", 11, 0, 9);
-    test(S("tjehkpsalm"), "jbrnk", 11, 1, 9);
-    test(S("ngfbojitcl"), "tqedg", 11, 2, 9);
-    test(S("rcfkdbhgjo"), "nqskp", 11, 4, 9);
-    test(S("qghptonrea"), "eaqkl", 11, 5, 7);
-    test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, 9);
-    test(S("hlmgabenti"), "lsftgajqpm", 11, 1, 9);
-    test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, 9);
-    test(S("jqedtkornm"), "shkncmiaqj", 11, 9, 7);
-    test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, 8);
-    test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, 9);
-    test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, 9);
-    test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, 8);
-    test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos);
-    test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos);
-    test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, 0);
-    test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, 0);
-    test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 0);
-    test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 0);
-    test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 0);
-    test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 0);
-    test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, 0);
-    test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 0);
-    test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 0);
-    test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 0);
-    test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 0);
-    test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, 0);
-    test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 0);
-    test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 0);
-    test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, S::npos);
-    test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, S::npos);
-    test(S("febhmqtjanokscdirpgl"), "", 1, 0, 1);
-    test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, 1);
-    test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 1);
-    test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 0);
-    test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 0);
-    test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 1);
-    test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, 1);
-    test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 1);
-    test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 1);
-    test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 0);
-    test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 0);
-    test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, 1);
-    test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 1);
-    test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 0);
-    test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, S::npos);
-    test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, S::npos);
-    test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, 10);
-    test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, 10);
-    test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 10);
-    test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 10);
-    test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 9);
-    test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 10);
-    test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, 10);
-    test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 10);
-    test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 10);
-    test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 8);
-    test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 10);
-    test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, 10);
-    test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 10);
-    test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 8);
-    test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, S::npos);
-    test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, S::npos);
-    test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, 19);
-    test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, 19);
-    test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 19);
-    test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 19);
-    test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 19);
-    test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 17);
-    test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, 19);
-    test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 19);
-    test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 19);
-    test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 19);
-    test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 19);
-    test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, 19);
-    test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 19);
-    test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 18);
-    test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 7);
-    test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, S::npos);
-    test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, 19);
-    test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, 19);
-    test(S("grkpahljcftesdmonqib"), "odife", 20, 1, 19);
-    test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, 19);
-    test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, 18);
-    test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, 18);
-    test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, 19);
-    test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, 19);
-    test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, 18);
-    test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, 18);
-    test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, 17);
-    test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, 19);
+void test2() {
+  test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, 8);
+  test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, 9);
+  test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, 8);
+  test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, 9);
+  test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, 9);
+  test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, 7);
+  test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, 5);
+  test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, S::npos);
+  test(S("cqjohampgd"), "", 11, 0, 9);
+  test(S("hobitmpsan"), "aocjb", 11, 0, 9);
+  test(S("tjehkpsalm"), "jbrnk", 11, 1, 9);
+  test(S("ngfbojitcl"), "tqedg", 11, 2, 9);
+  test(S("rcfkdbhgjo"), "nqskp", 11, 4, 9);
+  test(S("qghptonrea"), "eaqkl", 11, 5, 7);
+  test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, 9);
+  test(S("hlmgabenti"), "lsftgajqpm", 11, 1, 9);
+  test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, 9);
+  test(S("jqedtkornm"), "shkncmiaqj", 11, 9, 7);
+  test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, 8);
+  test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, 9);
+  test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, 9);
+  test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, 8);
+  test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, S::npos);
+  test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, S::npos);
+  test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, 0);
+  test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, 0);
+  test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, 0);
+  test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, 0);
+  test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, 0);
+  test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, 0);
+  test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, 0);
+  test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, 0);
+  test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, 0);
+  test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, 0);
+  test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, 0);
+  test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, 0);
+  test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, 0);
+  test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, 0);
+  test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, S::npos);
+  test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, S::npos);
+  test(S("febhmqtjanokscdirpgl"), "", 1, 0, 1);
+  test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, 1);
+  test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, 1);
+  test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 0);
+  test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 0);
+  test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, 1);
+  test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, 1);
+  test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, 1);
+  test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, 1);
+  test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 0);
+  test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 0);
+  test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, 1);
+  test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, 1);
+  test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 0);
+  test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, S::npos);
+  test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, S::npos);
+  test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, 10);
+  test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, 10);
+  test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, 10);
+  test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 10);
+  test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 9);
+  test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 10);
+  test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, 10);
+  test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 10);
+  test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 10);
+  test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 8);
+  test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 10);
+  test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, 10);
+  test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, 10);
+  test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 8);
+  test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, S::npos);
+  test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, S::npos);
+  test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, 19);
+  test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, 19);
+  test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 19);
+  test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 19);
+  test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 19);
+  test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 17);
+  test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, 19);
+  test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 19);
+  test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 19);
+  test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 19);
+  test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 19);
+  test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, 19);
+  test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 19);
+  test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 18);
+  test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 7);
+  test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, S::npos);
+  test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, 19);
+  test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, 19);
+  test(S("grkpahljcftesdmonqib"), "odife", 20, 1, 19);
+  test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, 19);
+  test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, 18);
+  test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, 18);
+  test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, 19);
+  test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, 19);
+  test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, 18);
+  test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, 18);
+  test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, 17);
+  test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, 19);
 }
 
 template <class S>
-void test3()
-{
-    test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, 19);
-    test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, 19);
-    test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, 1);
-    test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos);
-    test(S("ecgdanriptblhjfqskom"), "", 21, 0, 19);
-    test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, 19);
-    test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, 19);
-    test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, 19);
-    test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, 19);
-    test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, 19);
-    test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, 19);
-    test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, 19);
-    test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, 18);
-    test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, 19);
-    test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, 19);
-    test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, 19);
-    test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, 19);
-    test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, 19);
-    test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, 7);
-    test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos);
+void test3() {
+  test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, 19);
+  test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, 19);
+  test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, 1);
+  test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, S::npos);
+  test(S("ecgdanriptblhjfqskom"), "", 21, 0, 19);
+  test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, 19);
+  test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, 19);
+  test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, 19);
+  test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, 19);
+  test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, 19);
+  test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, 19);
+  test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, 19);
+  test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, 18);
+  test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, 19);
+  test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, 19);
+  test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, 19);
+  test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, 19);
+  test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, 19);
+  test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, 7);
+  test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, S::npos);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
     test2<S>();
     test3<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find_last_not_of( "",      0, 0) == SV::npos, "" );
-    static_assert (sv1.find_last_not_of( "irkhs", 0, 5) == SV::npos, "" );
-    static_assert (sv2.find_last_not_of( "",      0, 0) == 0, "" );
-    static_assert (sv2.find_last_not_of( "gfsrt", 5, 0) == 4, "" );
-    static_assert (sv2.find_last_not_of( "lecar", 5, 0) == 4, "" );
-    }
+    static_assert(sv1.find_last_not_of("", 0, 0) == SV::npos, "");
+    static_assert(sv1.find_last_not_of("irkhs", 0, 5) == SV::npos, "");
+    static_assert(sv2.find_last_not_of("", 0, 0) == 0, "");
+    static_assert(sv2.find_last_not_of("gfsrt", 5, 0) == 4, "");
+    static_assert(sv2.find_last_not_of("lecar", 5, 0) == 4, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_string_view_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_string_view_size.pass.cpp
index 5a2a319da53d06a..390a5e65207224f 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_string_view_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_last_not_of_string_view_size.pass.cpp
@@ -18,138 +18,131 @@
 #include "test_macros.h"
 
 template <class S>
-void
-test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str, pos));
-    assert(s.find_last_not_of(str, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str, pos));
+  assert(s.find_last_not_of(str, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-void
-test(const S& s, const S& str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str));
-    assert(s.find_last_not_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+void test(const S& s, const S& str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_not_of(str));
+  assert(s.find_last_not_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), S(""), 0, S::npos);
-    test(S(""), S("laenf"), 0, S::npos);
-    test(S(""), S("pqlnkmbdjo"), 0, S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
-    test(S(""), S(""), 1, S::npos);
-    test(S(""), S("bjaht"), 1, S::npos);
-    test(S(""), S("hjlcmgpket"), 1, S::npos);
-    test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
-    test(S("fodgq"), S(""), 0, 0);
-    test(S("qanej"), S("dfkap"), 0, 0);
-    test(S("clbao"), S("ihqrfebgad"), 0, 0);
-    test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, S::npos);
-    test(S("srdfq"), S(""), 1, 1);
-    test(S("oemth"), S("ikcrq"), 1, 1);
-    test(S("cdaih"), S("dmajblfhsg"), 1, 0);
-    test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, S::npos);
-    test(S("cshmd"), S(""), 2, 2);
-    test(S("lhcdo"), S("oebqi"), 2, 2);
-    test(S("qnsoh"), S("kojhpmbsfe"), 2, 1);
-    test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, S::npos);
-    test(S("fmtsp"), S(""), 4, 4);
-    test(S("khbpm"), S("aobjd"), 4, 4);
-    test(S("pbsji"), S("pcbahntsje"), 4, 4);
-    test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, S::npos);
-    test(S("eqmpa"), S(""), 5, 4);
-    test(S("omigs"), S("kocgb"), 5, 4);
-    test(S("onmje"), S("fbslrjiqkm"), 5, 4);
-    test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, S::npos);
-    test(S("schfa"), S(""), 6, 4);
-    test(S("igdsc"), S("qngpd"), 6, 4);
-    test(S("brqgo"), S("rodhqklgmb"), 6, S::npos);
-    test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, S::npos);
-    test(S("hcjitbfapl"), S(""), 0, 0);
-    test(S("daiprenocl"), S("ashjd"), 0, S::npos);
-    test(S("litpcfdghe"), S("mgojkldsqh"), 0, S::npos);
-    test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, S::npos);
-    test(S("qpghtfbaji"), S(""), 1, 1);
-    test(S("gfshlcmdjr"), S("nadkh"), 1, 1);
-    test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 0);
-    test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, S::npos);
-    test(S("crnklpmegd"), S(""), 5, 5);
-    test(S("jsbtafedoc"), S("prqgn"), 5, 5);
-    test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 4);
-    test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, S::npos);
-    test(S("lmofqdhpki"), S(""), 9, 9);
-    test(S("hnefkqimca"), S("rtjpa"), 9, 8);
-    test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, 9);
-    test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, S::npos);
-    test(S("elgofjmbrq"), S(""), 10, 9);
-    test(S("mjqdgalkpc"), S("dplqa"), 10, 9);
-    test(S("kthqnfcerm"), S("dkacjoptns"), 10, 9);
-    test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, S::npos);
-    test(S("eqsgalomhb"), S(""), 11, 9);
-    test(S("akiteljmoh"), S("lofbc"), 11, 9);
-    test(S("hlbdfreqjo"), S("astoegbfpn"), 11, 8);
-    test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, S::npos);
-    test(S("snafbdlghrjkpqtoceim"), S(""), 0, 0);
-    test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, 0);
-    test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, S::npos);
-    test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, S::npos);
-    test(S("jlnkraeodhcspfgbqitm"), S(""), 1, 1);
-    test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, 1);
-    test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 0);
-    test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, S::npos);
-    test(S("hdpkobnsalmcfijregtq"), S(""), 10, 10);
-    test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 9);
-    test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 9);
-    test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, S::npos);
-    test(S("niptglfbosehkamrdqcj"), S(""), 19, 19);
-    test(S("copqdhstbingamjfkler"), S("djkqc"), 19, 19);
-    test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, 16);
-    test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, S::npos);
-    test(S("eaintpchlqsbdgrkjofm"), S(""), 20, 19);
-    test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, 18);
-    test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, 19);
-    test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, S::npos);
-    test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, 19);
-    test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, 19);
-    test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, 19);
-    test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, S::npos);
+void test0() {
+  test(S(""), S(""), 0, S::npos);
+  test(S(""), S("laenf"), 0, S::npos);
+  test(S(""), S("pqlnkmbdjo"), 0, S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
+  test(S(""), S(""), 1, S::npos);
+  test(S(""), S("bjaht"), 1, S::npos);
+  test(S(""), S("hjlcmgpket"), 1, S::npos);
+  test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
+  test(S("fodgq"), S(""), 0, 0);
+  test(S("qanej"), S("dfkap"), 0, 0);
+  test(S("clbao"), S("ihqrfebgad"), 0, 0);
+  test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, S::npos);
+  test(S("srdfq"), S(""), 1, 1);
+  test(S("oemth"), S("ikcrq"), 1, 1);
+  test(S("cdaih"), S("dmajblfhsg"), 1, 0);
+  test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, S::npos);
+  test(S("cshmd"), S(""), 2, 2);
+  test(S("lhcdo"), S("oebqi"), 2, 2);
+  test(S("qnsoh"), S("kojhpmbsfe"), 2, 1);
+  test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, S::npos);
+  test(S("fmtsp"), S(""), 4, 4);
+  test(S("khbpm"), S("aobjd"), 4, 4);
+  test(S("pbsji"), S("pcbahntsje"), 4, 4);
+  test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, S::npos);
+  test(S("eqmpa"), S(""), 5, 4);
+  test(S("omigs"), S("kocgb"), 5, 4);
+  test(S("onmje"), S("fbslrjiqkm"), 5, 4);
+  test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, S::npos);
+  test(S("schfa"), S(""), 6, 4);
+  test(S("igdsc"), S("qngpd"), 6, 4);
+  test(S("brqgo"), S("rodhqklgmb"), 6, S::npos);
+  test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, S::npos);
+  test(S("hcjitbfapl"), S(""), 0, 0);
+  test(S("daiprenocl"), S("ashjd"), 0, S::npos);
+  test(S("litpcfdghe"), S("mgojkldsqh"), 0, S::npos);
+  test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, S::npos);
+  test(S("qpghtfbaji"), S(""), 1, 1);
+  test(S("gfshlcmdjr"), S("nadkh"), 1, 1);
+  test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 0);
+  test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, S::npos);
+  test(S("crnklpmegd"), S(""), 5, 5);
+  test(S("jsbtafedoc"), S("prqgn"), 5, 5);
+  test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 4);
+  test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, S::npos);
+  test(S("lmofqdhpki"), S(""), 9, 9);
+  test(S("hnefkqimca"), S("rtjpa"), 9, 8);
+  test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, 9);
+  test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, S::npos);
+  test(S("elgofjmbrq"), S(""), 10, 9);
+  test(S("mjqdgalkpc"), S("dplqa"), 10, 9);
+  test(S("kthqnfcerm"), S("dkacjoptns"), 10, 9);
+  test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, S::npos);
+  test(S("eqsgalomhb"), S(""), 11, 9);
+  test(S("akiteljmoh"), S("lofbc"), 11, 9);
+  test(S("hlbdfreqjo"), S("astoegbfpn"), 11, 8);
+  test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, S::npos);
+  test(S("snafbdlghrjkpqtoceim"), S(""), 0, 0);
+  test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, 0);
+  test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, S::npos);
+  test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, S::npos);
+  test(S("jlnkraeodhcspfgbqitm"), S(""), 1, 1);
+  test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, 1);
+  test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 0);
+  test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, S::npos);
+  test(S("hdpkobnsalmcfijregtq"), S(""), 10, 10);
+  test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 9);
+  test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 9);
+  test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, S::npos);
+  test(S("niptglfbosehkamrdqcj"), S(""), 19, 19);
+  test(S("copqdhstbingamjfkler"), S("djkqc"), 19, 19);
+  test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, 16);
+  test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, S::npos);
+  test(S("eaintpchlqsbdgrkjofm"), S(""), 20, 19);
+  test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, 18);
+  test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, 19);
+  test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, S::npos);
+  test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, 19);
+  test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, 19);
+  test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, 19);
+  test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, S::npos);
 }
 
 template <class S>
-void test1()
-{
-    test(S(""), S(""), S::npos);
-    test(S(""), S("laenf"), S::npos);
-    test(S(""), S("pqlnkmbdjo"), S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
-    test(S("nhmko"), S(""), 4);
-    test(S("lahfb"), S("irkhs"), 4);
-    test(S("gmfhd"), S("kantesmpgj"), 4);
-    test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), S::npos);
-    test(S("eolhfgpjqk"), S(""), 9);
-    test(S("nbatdlmekr"), S("bnrpe"), 8);
-    test(S("jdmciepkaq"), S("jtdaefblso"), 9);
-    test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), S::npos);
-    test(S("gprdcokbnjhlsfmtieqa"), S(""), 19);
-    test(S("qjghlnftcaismkropdeb"), S("bjaht"), 18);
-    test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 17);
-    test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), S::npos);
+void test1() {
+  test(S(""), S(""), S::npos);
+  test(S(""), S("laenf"), S::npos);
+  test(S(""), S("pqlnkmbdjo"), S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
+  test(S("nhmko"), S(""), 4);
+  test(S("lahfb"), S("irkhs"), 4);
+  test(S("gmfhd"), S("kantesmpgj"), 4);
+  test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), S::npos);
+  test(S("eolhfgpjqk"), S(""), 9);
+  test(S("nbatdlmekr"), S("bnrpe"), 8);
+  test(S("jdmciepkaq"), S("jtdaefblso"), 9);
+  test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), S::npos);
+  test(S("gprdcokbnjhlsfmtieqa"), S(""), 19);
+  test(S("qjghlnftcaismkropdeb"), S("bjaht"), 18);
+  test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 17);
+  test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), S::npos);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
-    }
+  }
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_last_of_char_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_last_of_char_size.pass.cpp
index 6710620aa1dc9f6..e0f1ae67dc1e953 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_last_of_char_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_last_of_char_size.pass.cpp
@@ -19,29 +19,23 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, typename S::value_type c, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(c, pos));
-    assert(s.find_last_of(c, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+void test(const S& s, typename S::value_type c, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(c, pos));
+  assert(s.find_last_of(c, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-void
-test(const S& s, typename S::value_type c, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(c));
-    assert(s.find_last_of(c) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+void test(const S& s, typename S::value_type c, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(c));
+  assert(s.find_last_of(c) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test(S(""), 'm', 0, S::npos);
     test(S(""), 'm', 1, S::npos);
@@ -68,20 +62,20 @@ int main(int, char**)
     test(S("csope"), 'm', S::npos);
     test(S("gfsmthlkon"), 'm', 3);
     test(S("laenfsbridchgotmkqpj"), 'm', 15);
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find_last_of( 'i', 0 ) == SV::npos, "" );
-    static_assert (sv1.find_last_of( 'i', 1 ) == SV::npos, "" );
-    static_assert (sv2.find_last_of( 'a', 0 ) == 0, "" );
-    static_assert (sv2.find_last_of( 'a', 1 ) == 0, "" );
-    static_assert (sv2.find_last_of( 'e', 5 ) == 4, "" );
-    }
+    static_assert(sv1.find_last_of('i', 0) == SV::npos, "");
+    static_assert(sv1.find_last_of('i', 1) == SV::npos, "");
+    static_assert(sv2.find_last_of('a', 0) == 0, "");
+    static_assert(sv2.find_last_of('a', 1) == 0, "");
+    static_assert(sv2.find_last_of('e', 5) == 4, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_last_of_pointer_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_last_of_pointer_size.pass.cpp
index a9f381ce8bb579b..b5fd5321d04f1f8 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_last_of_pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_last_of_pointer_size.pass.cpp
@@ -19,152 +19,144 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str, pos));
-    assert(s.find_last_of(str, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+void test(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str, pos));
+  assert(s.find_last_of(str, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str));
-    assert(s.find_last_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+void test(const S& s, const typename S::value_type* str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str));
+  assert(s.find_last_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), "", 0, S::npos);
-    test(S(""), "laenf", 0, S::npos);
-    test(S(""), "pqlnkmbdjo", 0, S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
-    test(S(""), "", 1, S::npos);
-    test(S(""), "bjaht", 1, S::npos);
-    test(S(""), "hjlcmgpket", 1, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
-    test(S("fodgq"), "", 0, S::npos);
-    test(S("qanej"), "dfkap", 0, S::npos);
-    test(S("clbao"), "ihqrfebgad", 0, S::npos);
-    test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, 0);
-    test(S("srdfq"), "", 1, S::npos);
-    test(S("oemth"), "ikcrq", 1, S::npos);
-    test(S("cdaih"), "dmajblfhsg", 1, 1);
-    test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, 1);
-    test(S("cshmd"), "", 2, S::npos);
-    test(S("lhcdo"), "oebqi", 2, S::npos);
-    test(S("qnsoh"), "kojhpmbsfe", 2, 2);
-    test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, 2);
-    test(S("fmtsp"), "", 4, S::npos);
-    test(S("khbpm"), "aobjd", 4, 2);
-    test(S("pbsji"), "pcbahntsje", 4, 3);
-    test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, 4);
-    test(S("eqmpa"), "", 5, S::npos);
-    test(S("omigs"), "kocgb", 5, 3);
-    test(S("onmje"), "fbslrjiqkm", 5, 3);
-    test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, 4);
-    test(S("schfa"), "", 6, S::npos);
-    test(S("igdsc"), "qngpd", 6, 2);
-    test(S("brqgo"), "rodhqklgmb", 6, 4);
-    test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, 4);
-    test(S("hcjitbfapl"), "", 0, S::npos);
-    test(S("daiprenocl"), "ashjd", 0, 0);
-    test(S("litpcfdghe"), "mgojkldsqh", 0, 0);
-    test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, 0);
-    test(S("qpghtfbaji"), "", 1, S::npos);
-    test(S("gfshlcmdjr"), "nadkh", 1, S::npos);
-    test(S("nkodajteqp"), "ofdrqmkebl", 1, 1);
-    test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, 1);
-    test(S("crnklpmegd"), "", 5, S::npos);
-    test(S("jsbtafedoc"), "prqgn", 5, S::npos);
-    test(S("qnmodrtkeb"), "pejafmnokr", 5, 5);
-    test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, 5);
-    test(S("lmofqdhpki"), "", 9, S::npos);
-    test(S("hnefkqimca"), "rtjpa", 9, 9);
-    test(S("drtasbgmfp"), "ktsrmnqagd", 9, 7);
-    test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, 9);
-    test(S("elgofjmbrq"), "", 10, S::npos);
-    test(S("mjqdgalkpc"), "dplqa", 10, 8);
-    test(S("kthqnfcerm"), "dkacjoptns", 10, 6);
-    test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, 9);
-    test(S("eqsgalomhb"), "", 11, S::npos);
-    test(S("akiteljmoh"), "lofbc", 11, 8);
-    test(S("hlbdfreqjo"), "astoegbfpn", 11, 9);
-    test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, 9);
-    test(S("snafbdlghrjkpqtoceim"), "", 0, S::npos);
-    test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, S::npos);
-    test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, 0);
-    test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, 0);
-    test(S("jlnkraeodhcspfgbqitm"), "", 1, S::npos);
-    test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, S::npos);
-    test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 1);
-    test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, 1);
-    test(S("hdpkobnsalmcfijregtq"), "", 10, S::npos);
-    test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 10);
-    test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 10);
-    test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, 10);
-    test(S("niptglfbosehkamrdqcj"), "", 19, S::npos);
-    test(S("copqdhstbingamjfkler"), "djkqc", 19, 16);
-    test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, 19);
-    test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, 19);
-    test(S("eaintpchlqsbdgrkjofm"), "", 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, 19);
-    test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, 18);
-    test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, 19);
-    test(S("liatsqdoegkmfcnbhrpj"), "", 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, 12);
-    test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, 17);
-    test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, 19);
+void test0() {
+  test(S(""), "", 0, S::npos);
+  test(S(""), "laenf", 0, S::npos);
+  test(S(""), "pqlnkmbdjo", 0, S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", 0, S::npos);
+  test(S(""), "", 1, S::npos);
+  test(S(""), "bjaht", 1, S::npos);
+  test(S(""), "hjlcmgpket", 1, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 1, S::npos);
+  test(S("fodgq"), "", 0, S::npos);
+  test(S("qanej"), "dfkap", 0, S::npos);
+  test(S("clbao"), "ihqrfebgad", 0, S::npos);
+  test(S("mekdn"), "ngtjfcalbseiqrphmkdo", 0, 0);
+  test(S("srdfq"), "", 1, S::npos);
+  test(S("oemth"), "ikcrq", 1, S::npos);
+  test(S("cdaih"), "dmajblfhsg", 1, 1);
+  test(S("qohtk"), "oqftjhdmkgsblacenirp", 1, 1);
+  test(S("cshmd"), "", 2, S::npos);
+  test(S("lhcdo"), "oebqi", 2, S::npos);
+  test(S("qnsoh"), "kojhpmbsfe", 2, 2);
+  test(S("pkrof"), "acbsjqogpltdkhinfrem", 2, 2);
+  test(S("fmtsp"), "", 4, S::npos);
+  test(S("khbpm"), "aobjd", 4, 2);
+  test(S("pbsji"), "pcbahntsje", 4, 3);
+  test(S("mprdj"), "fhepcrntkoagbmldqijs", 4, 4);
+  test(S("eqmpa"), "", 5, S::npos);
+  test(S("omigs"), "kocgb", 5, 3);
+  test(S("onmje"), "fbslrjiqkm", 5, 3);
+  test(S("oqmrj"), "jeidpcmalhfnqbgtrsko", 5, 4);
+  test(S("schfa"), "", 6, S::npos);
+  test(S("igdsc"), "qngpd", 6, 2);
+  test(S("brqgo"), "rodhqklgmb", 6, 4);
+  test(S("tnrph"), "thdjgafrlbkoiqcspmne", 6, 4);
+  test(S("hcjitbfapl"), "", 0, S::npos);
+  test(S("daiprenocl"), "ashjd", 0, 0);
+  test(S("litpcfdghe"), "mgojkldsqh", 0, 0);
+  test(S("aidjksrolc"), "imqnaghkfrdtlopbjesc", 0, 0);
+  test(S("qpghtfbaji"), "", 1, S::npos);
+  test(S("gfshlcmdjr"), "nadkh", 1, S::npos);
+  test(S("nkodajteqp"), "ofdrqmkebl", 1, 1);
+  test(S("gbmetiprqd"), "bdfjqgatlksriohemnpc", 1, 1);
+  test(S("crnklpmegd"), "", 5, S::npos);
+  test(S("jsbtafedoc"), "prqgn", 5, S::npos);
+  test(S("qnmodrtkeb"), "pejafmnokr", 5, 5);
+  test(S("cpebqsfmnj"), "odnqkgijrhabfmcestlp", 5, 5);
+  test(S("lmofqdhpki"), "", 9, S::npos);
+  test(S("hnefkqimca"), "rtjpa", 9, 9);
+  test(S("drtasbgmfp"), "ktsrmnqagd", 9, 7);
+  test(S("lsaijeqhtr"), "rtdhgcisbnmoaqkfpjle", 9, 9);
+  test(S("elgofjmbrq"), "", 10, S::npos);
+  test(S("mjqdgalkpc"), "dplqa", 10, 8);
+  test(S("kthqnfcerm"), "dkacjoptns", 10, 6);
+  test(S("dfsjhanorc"), "hqfimtrgnbekpdcsjalo", 10, 9);
+  test(S("eqsgalomhb"), "", 11, S::npos);
+  test(S("akiteljmoh"), "lofbc", 11, 8);
+  test(S("hlbdfreqjo"), "astoegbfpn", 11, 9);
+  test(S("taqobhlerg"), "pdgreqomsncafklhtibj", 11, 9);
+  test(S("snafbdlghrjkpqtoceim"), "", 0, S::npos);
+  test(S("aemtbrgcklhndjisfpoq"), "lbtqd", 0, S::npos);
+  test(S("pnracgfkjdiholtbqsem"), "tboimldpjh", 0, 0);
+  test(S("dicfltehbsgrmojnpkaq"), "slcerthdaiqjfnobgkpm", 0, 0);
+  test(S("jlnkraeodhcspfgbqitm"), "", 1, S::npos);
+  test(S("lhosrngtmfjikbqpcade"), "aqibs", 1, S::npos);
+  test(S("rbtaqjhgkneisldpmfoc"), "gtfblmqinc", 1, 1);
+  test(S("gpifsqlrdkbonjtmheca"), "mkqpbtdalgniorhfescj", 1, 1);
+  test(S("hdpkobnsalmcfijregtq"), "", 10, S::npos);
+  test(S("jtlshdgqaiprkbcoenfm"), "pblas", 10, 10);
+  test(S("fkdrbqltsgmcoiphneaj"), "arosdhcfme", 10, 10);
+  test(S("crsplifgtqedjohnabmk"), "blkhjeogicatqfnpdmsr", 10, 10);
+  test(S("niptglfbosehkamrdqcj"), "", 19, S::npos);
+  test(S("copqdhstbingamjfkler"), "djkqc", 19, 16);
+  test(S("mrtaefilpdsgocnhqbjk"), "lgokshjtpb", 19, 19);
+  test(S("kojatdhlcmigpbfrqnes"), "bqjhtkfepimcnsgrlado", 19, 19);
+  test(S("eaintpchlqsbdgrkjofm"), "", 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), "nocfa", 20, 19);
+  test(S("spocfaktqdbiejlhngmr"), "bgtajmiedc", 20, 18);
+  test(S("rphmlekgfscndtaobiqj"), "lsckfnqgdahejiopbtmr", 20, 19);
+  test(S("liatsqdoegkmfcnbhrpj"), "", 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), "gfsrt", 21, 12);
+  test(S("latkmisecnorjbfhqpdg"), "pfsocbhjtm", 21, 17);
+  test(S("lecfratdjkhnsmqpoigb"), "tpflmdnoicjgkberhqsa", 21, 19);
 }
 
 template <class S>
-void test1()
-{
-    test(S(""), "", S::npos);
-    test(S(""), "laenf", S::npos);
-    test(S(""), "pqlnkmbdjo", S::npos);
-    test(S(""), "qkamfogpnljdcshbreti", S::npos);
-    test(S("nhmko"), "", S::npos);
-    test(S("lahfb"), "irkhs", 2);
-    test(S("gmfhd"), "kantesmpgj", 1);
-    test(S("odaft"), "oknlrstdpiqmjbaghcfe", 4);
-    test(S("eolhfgpjqk"), "", S::npos);
-    test(S("nbatdlmekr"), "bnrpe", 9);
-    test(S("jdmciepkaq"), "jtdaefblso", 8);
-    test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", 9);
-    test(S("gprdcokbnjhlsfmtieqa"), "", S::npos);
-    test(S("qjghlnftcaismkropdeb"), "bjaht", 19);
-    test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 19);
-    test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", 19);
+void test1() {
+  test(S(""), "", S::npos);
+  test(S(""), "laenf", S::npos);
+  test(S(""), "pqlnkmbdjo", S::npos);
+  test(S(""), "qkamfogpnljdcshbreti", S::npos);
+  test(S("nhmko"), "", S::npos);
+  test(S("lahfb"), "irkhs", 2);
+  test(S("gmfhd"), "kantesmpgj", 1);
+  test(S("odaft"), "oknlrstdpiqmjbaghcfe", 4);
+  test(S("eolhfgpjqk"), "", S::npos);
+  test(S("nbatdlmekr"), "bnrpe", 9);
+  test(S("jdmciepkaq"), "jtdaefblso", 8);
+  test(S("hkbgspoflt"), "oselktgbcapndfjihrmq", 9);
+  test(S("gprdcokbnjhlsfmtieqa"), "", S::npos);
+  test(S("qjghlnftcaismkropdeb"), "bjaht", 19);
+  test(S("pnalfrdtkqcmojiesbhg"), "hjlcmgpket", 19);
+  test(S("pniotcfrhqsmgdkjbael"), "htaobedqikfplcgjsmrn", 19);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find_last_of( "",      0) == SV::npos, "" );
-    static_assert (sv1.find_last_of( "irkhs", 5) == SV::npos, "" );
-    static_assert (sv2.find_last_of( "",      0) == SV::npos, "" );
-    static_assert (sv2.find_last_of( "gfsrt", 5) == SV::npos, "" );
-    static_assert (sv2.find_last_of( "lecar", 5) == 4, "" );
-    }
+    static_assert(sv1.find_last_of("", 0) == SV::npos, "");
+    static_assert(sv1.find_last_of("irkhs", 5) == SV::npos, "");
+    static_assert(sv2.find_last_of("", 0) == SV::npos, "");
+    static_assert(sv2.find_last_of("gfsrt", 5) == SV::npos, "");
+    static_assert(sv2.find_last_of("lecar", 5) == 4, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_last_of_pointer_size_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_last_of_pointer_size_size.pass.cpp
index 85849c11195692d..baaa3618d243dab 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_last_of_pointer_size_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_last_of_pointer_size_size.pass.cpp
@@ -19,378 +19,374 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type n, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str, pos, n));
-    assert(s.find_last_of(str, pos, n) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+void test(const S& s,
+          const typename S::value_type* str,
+          typename S::size_type pos,
+          typename S::size_type n,
+          typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str, pos, n));
+  assert(s.find_last_of(str, pos, n) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), "", 0, 0, S::npos);
-    test(S(""), "irkhs", 0, 0, S::npos);
-    test(S(""), "kante", 0, 1, S::npos);
-    test(S(""), "oknlr", 0, 2, S::npos);
-    test(S(""), "pcdro", 0, 4, S::npos);
-    test(S(""), "bnrpe", 0, 5, S::npos);
-    test(S(""), "jtdaefblso", 0, 0, S::npos);
-    test(S(""), "oselktgbca", 0, 1, S::npos);
-    test(S(""), "eqgaplhckj", 0, 5, S::npos);
-    test(S(""), "bjahtcmnlp", 0, 9, S::npos);
-    test(S(""), "hjlcmgpket", 0, 10, S::npos);
-    test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
-    test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
-    test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
-    test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
-    test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
-    test(S(""), "", 1, 0, S::npos);
-    test(S(""), "lbtqd", 1, 0, S::npos);
-    test(S(""), "tboim", 1, 1, S::npos);
-    test(S(""), "slcer", 1, 2, S::npos);
-    test(S(""), "cbjfs", 1, 4, S::npos);
-    test(S(""), "aqibs", 1, 5, S::npos);
-    test(S(""), "gtfblmqinc", 1, 0, S::npos);
-    test(S(""), "mkqpbtdalg", 1, 1, S::npos);
-    test(S(""), "kphatlimcd", 1, 5, S::npos);
-    test(S(""), "pblasqogic", 1, 9, S::npos);
-    test(S(""), "arosdhcfme", 1, 10, S::npos);
-    test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
-    test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
-    test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
-    test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
-    test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
-    test(S("eaint"), "", 0, 0, S::npos);
-    test(S("binja"), "gfsrt", 0, 0, S::npos);
-    test(S("latkm"), "pfsoc", 0, 1, S::npos);
-    test(S("lecfr"), "tpflm", 0, 2, S::npos);
-    test(S("eqkst"), "sgkec", 0, 4, 0);
-    test(S("cdafr"), "romds", 0, 5, S::npos);
-    test(S("prbhe"), "qhjistlgmr", 0, 0, S::npos);
-    test(S("lbisk"), "pedfirsglo", 0, 1, S::npos);
-    test(S("hrlpd"), "aqcoslgrmk", 0, 5, S::npos);
-    test(S("ehmja"), "dabckmepqj", 0, 9, 0);
-    test(S("mhqgd"), "pqscrjthli", 0, 10, S::npos);
-    test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, S::npos);
-    test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, S::npos);
-    test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, S::npos);
-    test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, 0);
-    test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, 0);
-    test(S("clrgb"), "", 1, 0, S::npos);
-    test(S("tjmek"), "osmia", 1, 0, S::npos);
-    test(S("bgstp"), "ckonl", 1, 1, S::npos);
-    test(S("hstrk"), "ilcaj", 1, 2, S::npos);
-    test(S("kmspj"), "lasiq", 1, 4, S::npos);
-    test(S("tjboh"), "kfqmr", 1, 5, S::npos);
-    test(S("ilbcj"), "klnitfaobg", 1, 0, S::npos);
-    test(S("jkngf"), "gjhmdlqikp", 1, 1, S::npos);
-    test(S("gfcql"), "skbgtahqej", 1, 5, 0);
-    test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 0);
-    test(S("bthpg"), "bjgfmnlkio", 1, 10, 0);
-    test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, S::npos);
-    test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, S::npos);
-    test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 1);
-    test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, 1);
-    test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, 1);
-    test(S("ndrhl"), "", 2, 0, S::npos);
-    test(S("mrecp"), "otkgb", 2, 0, S::npos);
-    test(S("qlasf"), "cqsjl", 2, 1, S::npos);
-    test(S("smaqd"), "dpifl", 2, 2, S::npos);
-    test(S("hjeni"), "oapht", 2, 4, 0);
-    test(S("ocmfj"), "cifts", 2, 5, 1);
-    test(S("hmftq"), "nmsckbgalo", 2, 0, S::npos);
-    test(S("fklad"), "tpksqhamle", 2, 1, S::npos);
-    test(S("dirnm"), "tpdrchmkji", 2, 5, 2);
-    test(S("hrgdc"), "ijagfkblst", 2, 9, 2);
-    test(S("ifakg"), "kpocsignjb", 2, 10, 0);
-    test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, S::npos);
-    test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, S::npos);
-    test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 1);
-    test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, 2);
-    test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, 2);
-    test(S("cjgao"), "", 4, 0, S::npos);
-    test(S("kjplq"), "mabns", 4, 0, S::npos);
-    test(S("herni"), "bdnrp", 4, 1, S::npos);
-    test(S("tadrb"), "scidp", 4, 2, S::npos);
-    test(S("pkfeo"), "agbjl", 4, 4, S::npos);
-    test(S("hoser"), "jfmpr", 4, 5, 4);
-    test(S("kgrsp"), "rbpefghsmj", 4, 0, S::npos);
-    test(S("pgejb"), "apsfntdoqc", 4, 1, S::npos);
-    test(S("thlnq"), "ndkjeisgcl", 4, 5, 3);
-    test(S("nbmit"), "rnfpqatdeo", 4, 9, 4);
-    test(S("jgmib"), "bntjlqrfik", 4, 10, 4);
-    test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, S::npos);
-    test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, S::npos);
-    test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 4);
-    test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 4);
-    test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, 4);
-    test(S("klopi"), "", 5, 0, S::npos);
-    test(S("dajhn"), "psthd", 5, 0, S::npos);
-    test(S("jbgno"), "rpmjd", 5, 1, S::npos);
-    test(S("hkjae"), "dfsmk", 5, 2, S::npos);
+void test0() {
+  test(S(""), "", 0, 0, S::npos);
+  test(S(""), "irkhs", 0, 0, S::npos);
+  test(S(""), "kante", 0, 1, S::npos);
+  test(S(""), "oknlr", 0, 2, S::npos);
+  test(S(""), "pcdro", 0, 4, S::npos);
+  test(S(""), "bnrpe", 0, 5, S::npos);
+  test(S(""), "jtdaefblso", 0, 0, S::npos);
+  test(S(""), "oselktgbca", 0, 1, S::npos);
+  test(S(""), "eqgaplhckj", 0, 5, S::npos);
+  test(S(""), "bjahtcmnlp", 0, 9, S::npos);
+  test(S(""), "hjlcmgpket", 0, 10, S::npos);
+  test(S(""), "htaobedqikfplcgjsmrn", 0, 0, S::npos);
+  test(S(""), "hpqiarojkcdlsgnmfetb", 0, 1, S::npos);
+  test(S(""), "dfkaprhjloqetcsimnbg", 0, 10, S::npos);
+  test(S(""), "ihqrfebgadntlpmjksoc", 0, 19, S::npos);
+  test(S(""), "ngtjfcalbseiqrphmkdo", 0, 20, S::npos);
+  test(S(""), "", 1, 0, S::npos);
+  test(S(""), "lbtqd", 1, 0, S::npos);
+  test(S(""), "tboim", 1, 1, S::npos);
+  test(S(""), "slcer", 1, 2, S::npos);
+  test(S(""), "cbjfs", 1, 4, S::npos);
+  test(S(""), "aqibs", 1, 5, S::npos);
+  test(S(""), "gtfblmqinc", 1, 0, S::npos);
+  test(S(""), "mkqpbtdalg", 1, 1, S::npos);
+  test(S(""), "kphatlimcd", 1, 5, S::npos);
+  test(S(""), "pblasqogic", 1, 9, S::npos);
+  test(S(""), "arosdhcfme", 1, 10, S::npos);
+  test(S(""), "blkhjeogicatqfnpdmsr", 1, 0, S::npos);
+  test(S(""), "bmhineprjcoadgstflqk", 1, 1, S::npos);
+  test(S(""), "djkqcmetslnghpbarfoi", 1, 10, S::npos);
+  test(S(""), "lgokshjtpbemarcdqnfi", 1, 19, S::npos);
+  test(S(""), "bqjhtkfepimcnsgrlado", 1, 20, S::npos);
+  test(S("eaint"), "", 0, 0, S::npos);
+  test(S("binja"), "gfsrt", 0, 0, S::npos);
+  test(S("latkm"), "pfsoc", 0, 1, S::npos);
+  test(S("lecfr"), "tpflm", 0, 2, S::npos);
+  test(S("eqkst"), "sgkec", 0, 4, 0);
+  test(S("cdafr"), "romds", 0, 5, S::npos);
+  test(S("prbhe"), "qhjistlgmr", 0, 0, S::npos);
+  test(S("lbisk"), "pedfirsglo", 0, 1, S::npos);
+  test(S("hrlpd"), "aqcoslgrmk", 0, 5, S::npos);
+  test(S("ehmja"), "dabckmepqj", 0, 9, 0);
+  test(S("mhqgd"), "pqscrjthli", 0, 10, S::npos);
+  test(S("tgklq"), "kfphdcsjqmobliagtren", 0, 0, S::npos);
+  test(S("bocjs"), "rokpefncljibsdhqtagm", 0, 1, S::npos);
+  test(S("grbsd"), "afionmkphlebtcjqsgrd", 0, 10, S::npos);
+  test(S("ofjqr"), "aenmqplidhkofrjbctsg", 0, 19, 0);
+  test(S("btlfi"), "osjmbtcadhiklegrpqnf", 0, 20, 0);
+  test(S("clrgb"), "", 1, 0, S::npos);
+  test(S("tjmek"), "osmia", 1, 0, S::npos);
+  test(S("bgstp"), "ckonl", 1, 1, S::npos);
+  test(S("hstrk"), "ilcaj", 1, 2, S::npos);
+  test(S("kmspj"), "lasiq", 1, 4, S::npos);
+  test(S("tjboh"), "kfqmr", 1, 5, S::npos);
+  test(S("ilbcj"), "klnitfaobg", 1, 0, S::npos);
+  test(S("jkngf"), "gjhmdlqikp", 1, 1, S::npos);
+  test(S("gfcql"), "skbgtahqej", 1, 5, 0);
+  test(S("dqtlg"), "bjsdgtlpkf", 1, 9, 0);
+  test(S("bthpg"), "bjgfmnlkio", 1, 10, 0);
+  test(S("dgsnq"), "lbhepotfsjdqigcnamkr", 1, 0, S::npos);
+  test(S("rmfhp"), "tebangckmpsrqdlfojhi", 1, 1, S::npos);
+  test(S("jfdam"), "joflqbdkhtegimscpanr", 1, 10, 1);
+  test(S("edapb"), "adpmcohetfbsrjinlqkg", 1, 19, 1);
+  test(S("brfsm"), "iacldqjpfnogbsrhmetk", 1, 20, 1);
+  test(S("ndrhl"), "", 2, 0, S::npos);
+  test(S("mrecp"), "otkgb", 2, 0, S::npos);
+  test(S("qlasf"), "cqsjl", 2, 1, S::npos);
+  test(S("smaqd"), "dpifl", 2, 2, S::npos);
+  test(S("hjeni"), "oapht", 2, 4, 0);
+  test(S("ocmfj"), "cifts", 2, 5, 1);
+  test(S("hmftq"), "nmsckbgalo", 2, 0, S::npos);
+  test(S("fklad"), "tpksqhamle", 2, 1, S::npos);
+  test(S("dirnm"), "tpdrchmkji", 2, 5, 2);
+  test(S("hrgdc"), "ijagfkblst", 2, 9, 2);
+  test(S("ifakg"), "kpocsignjb", 2, 10, 0);
+  test(S("ebrgd"), "pecqtkjsnbdrialgmohf", 2, 0, S::npos);
+  test(S("rcjml"), "aiortphfcmkjebgsndql", 2, 1, S::npos);
+  test(S("peqmt"), "sdbkeamglhipojqftrcn", 2, 10, 1);
+  test(S("frehn"), "ljqncehgmfktroapidbs", 2, 19, 2);
+  test(S("tqolf"), "rtcfodilamkbenjghqps", 2, 20, 2);
+  test(S("cjgao"), "", 4, 0, S::npos);
+  test(S("kjplq"), "mabns", 4, 0, S::npos);
+  test(S("herni"), "bdnrp", 4, 1, S::npos);
+  test(S("tadrb"), "scidp", 4, 2, S::npos);
+  test(S("pkfeo"), "agbjl", 4, 4, S::npos);
+  test(S("hoser"), "jfmpr", 4, 5, 4);
+  test(S("kgrsp"), "rbpefghsmj", 4, 0, S::npos);
+  test(S("pgejb"), "apsfntdoqc", 4, 1, S::npos);
+  test(S("thlnq"), "ndkjeisgcl", 4, 5, 3);
+  test(S("nbmit"), "rnfpqatdeo", 4, 9, 4);
+  test(S("jgmib"), "bntjlqrfik", 4, 10, 4);
+  test(S("ncrfj"), "kcrtmpolnaqejghsfdbi", 4, 0, S::npos);
+  test(S("ncsik"), "lobheanpkmqidsrtcfgj", 4, 1, S::npos);
+  test(S("sgbfh"), "athdkljcnreqbgpmisof", 4, 10, 4);
+  test(S("dktbn"), "qkdmjialrscpbhefgont", 4, 19, 4);
+  test(S("fthqm"), "dmasojntqleribkgfchp", 4, 20, 4);
+  test(S("klopi"), "", 5, 0, S::npos);
+  test(S("dajhn"), "psthd", 5, 0, S::npos);
+  test(S("jbgno"), "rpmjd", 5, 1, S::npos);
+  test(S("hkjae"), "dfsmk", 5, 2, S::npos);
 }
 
 template <class S>
-void test1()
-{
-    test(S("gbhqo"), "skqne", 5, 4, 3);
-    test(S("ktdor"), "kipnf", 5, 5, 0);
-    test(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos);
-    test(S("egmjk"), "fsmjcdairn", 5, 1, S::npos);
-    test(S("armql"), "pcdgltbrfj", 5, 5, 4);
-    test(S("cdhjo"), "aekfctpirg", 5, 9, 0);
-    test(S("jcons"), "ledihrsgpf", 5, 10, 4);
-    test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos);
-    test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos);
-    test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, 4);
-    test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, 4);
-    test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, 4);
-    test(S("gajqn"), "", 6, 0, S::npos);
-    test(S("stedk"), "hrnat", 6, 0, S::npos);
-    test(S("tjkaf"), "gsqdt", 6, 1, S::npos);
-    test(S("dthpe"), "bspkd", 6, 2, S::npos);
-    test(S("klhde"), "ohcmb", 6, 4, 2);
-    test(S("bhlki"), "heatr", 6, 5, 1);
-    test(S("lqmoh"), "pmblckedfn", 6, 0, S::npos);
-    test(S("mtqin"), "aceqmsrbik", 6, 1, S::npos);
-    test(S("dpqbr"), "lmbtdehjrn", 6, 5, 3);
-    test(S("kdhmo"), "teqmcrlgib", 6, 9, 3);
-    test(S("jblqp"), "njolbmspac", 6, 10, 4);
-    test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos);
-    test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos);
-    test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, 4);
-    test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, 4);
-    test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, 4);
-    test(S("jnkrfhotgl"), "", 0, 0, S::npos);
-    test(S("dltjfngbko"), "rqegt", 0, 0, S::npos);
-    test(S("bmjlpkiqde"), "dashm", 0, 1, S::npos);
-    test(S("skrflobnqm"), "jqirk", 0, 2, S::npos);
-    test(S("jkpldtshrm"), "rckeg", 0, 4, S::npos);
-    test(S("ghasdbnjqo"), "jscie", 0, 5, S::npos);
-    test(S("igrkhpbqjt"), "efsphndliq", 0, 0, S::npos);
-    test(S("ikthdgcamf"), "gdicosleja", 0, 1, S::npos);
-    test(S("pcofgeniam"), "qcpjibosfl", 0, 5, 0);
-    test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 0);
-    test(S("itphbqsker"), "dtablcrseo", 0, 10, S::npos);
-    test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, S::npos);
-    test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, S::npos);
-    test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, S::npos);
-    test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 0);
-    test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, 0);
-    test(S("shbcqnmoar"), "", 1, 0, S::npos);
-    test(S("bdoshlmfin"), "ontrs", 1, 0, S::npos);
-    test(S("khfrebnsgq"), "pfkna", 1, 1, S::npos);
-    test(S("getcrsaoji"), "ekosa", 1, 2, 1);
-    test(S("fjiknedcpq"), "anqhk", 1, 4, S::npos);
-    test(S("tkejgnafrm"), "jekca", 1, 5, 1);
-    test(S("jnakolqrde"), "ikemsjgacf", 1, 0, S::npos);
-    test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, S::npos);
-    test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 1);
-    test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 0);
-    test(S("cigfqkated"), "sqcflrgtim", 1, 10, 1);
-    test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, S::npos);
-    test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, S::npos);
-    test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 1);
-    test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 1);
-    test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, 1);
-    test(S("ectnhskflp"), "", 5, 0, S::npos);
-    test(S("fgtianblpq"), "pijag", 5, 0, S::npos);
-    test(S("mfeqklirnh"), "jrckd", 5, 1, S::npos);
-    test(S("astedncjhk"), "qcloh", 5, 2, S::npos);
-    test(S("fhlqgcajbr"), "thlmp", 5, 4, 2);
-    test(S("epfhocmdng"), "qidmo", 5, 5, 4);
-    test(S("apcnsibger"), "lnegpsjqrd", 5, 0, S::npos);
-    test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 5);
-    test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, S::npos);
-    test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 5);
-    test(S("jbhcfposld"), "trfqgmckbe", 5, 10, 4);
-    test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, S::npos);
-    test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, S::npos);
-    test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 5);
-    test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 5);
-    test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, 5);
-    test(S("shoiedtcjb"), "", 9, 0, S::npos);
-    test(S("ebcinjgads"), "tqbnh", 9, 0, S::npos);
-    test(S("dqmregkcfl"), "akmle", 9, 1, S::npos);
-    test(S("ngcrieqajf"), "iqfkm", 9, 2, 6);
-    test(S("qosmilgnjb"), "tqjsr", 9, 4, 8);
-    test(S("ikabsjtdfl"), "jplqg", 9, 5, 9);
-    test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, S::npos);
-    test(S("fdnplotmgh"), "morkglpesn", 9, 1, 7);
-    test(S("fdbicojerm"), "dmicerngat", 9, 5, 9);
-    test(S("mbtafndjcq"), "radgeskbtc", 9, 9, 6);
-    test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 5);
-    test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, S::npos);
-    test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 6);
-    test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 7);
-    test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 9);
-    test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, 9);
-    test(S("ncjpmaekbs"), "", 10, 0, S::npos);
-    test(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos);
-    test(S("pqfhsgilen"), "qnpor", 10, 1, 1);
-    test(S("gqtjsbdckh"), "otdma", 10, 2, 2);
-    test(S("cfkqpjlegi"), "efhjg", 10, 4, 7);
-    test(S("beanrfodgj"), "odpte", 10, 5, 7);
-    test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos);
-    test(S("iomkfthagj"), "oaklidrbqg", 10, 1, 1);
+void test1() {
+  test(S("gbhqo"), "skqne", 5, 4, 3);
+  test(S("ktdor"), "kipnf", 5, 5, 0);
+  test(S("ldprn"), "hmrnqdgifl", 5, 0, S::npos);
+  test(S("egmjk"), "fsmjcdairn", 5, 1, S::npos);
+  test(S("armql"), "pcdgltbrfj", 5, 5, 4);
+  test(S("cdhjo"), "aekfctpirg", 5, 9, 0);
+  test(S("jcons"), "ledihrsgpf", 5, 10, 4);
+  test(S("cbrkp"), "mqcklahsbtirgopefndj", 5, 0, S::npos);
+  test(S("fhgna"), "kmlthaoqgecrnpdbjfis", 5, 1, S::npos);
+  test(S("ejfcd"), "sfhbamcdptojlkrenqgi", 5, 10, 4);
+  test(S("kqjhe"), "pbniofmcedrkhlstgaqj", 5, 19, 4);
+  test(S("pbdjl"), "mongjratcskbhqiepfdl", 5, 20, 4);
+  test(S("gajqn"), "", 6, 0, S::npos);
+  test(S("stedk"), "hrnat", 6, 0, S::npos);
+  test(S("tjkaf"), "gsqdt", 6, 1, S::npos);
+  test(S("dthpe"), "bspkd", 6, 2, S::npos);
+  test(S("klhde"), "ohcmb", 6, 4, 2);
+  test(S("bhlki"), "heatr", 6, 5, 1);
+  test(S("lqmoh"), "pmblckedfn", 6, 0, S::npos);
+  test(S("mtqin"), "aceqmsrbik", 6, 1, S::npos);
+  test(S("dpqbr"), "lmbtdehjrn", 6, 5, 3);
+  test(S("kdhmo"), "teqmcrlgib", 6, 9, 3);
+  test(S("jblqp"), "njolbmspac", 6, 10, 4);
+  test(S("qmjgl"), "pofnhidklamecrbqjgst", 6, 0, S::npos);
+  test(S("rothp"), "jbhckmtgrqnosafedpli", 6, 1, S::npos);
+  test(S("ghknq"), "dobntpmqklicsahgjerf", 6, 10, 4);
+  test(S("eopfi"), "tpdshainjkbfoemlrgcq", 6, 19, 4);
+  test(S("dsnmg"), "oldpfgeakrnitscbjmqh", 6, 20, 4);
+  test(S("jnkrfhotgl"), "", 0, 0, S::npos);
+  test(S("dltjfngbko"), "rqegt", 0, 0, S::npos);
+  test(S("bmjlpkiqde"), "dashm", 0, 1, S::npos);
+  test(S("skrflobnqm"), "jqirk", 0, 2, S::npos);
+  test(S("jkpldtshrm"), "rckeg", 0, 4, S::npos);
+  test(S("ghasdbnjqo"), "jscie", 0, 5, S::npos);
+  test(S("igrkhpbqjt"), "efsphndliq", 0, 0, S::npos);
+  test(S("ikthdgcamf"), "gdicosleja", 0, 1, S::npos);
+  test(S("pcofgeniam"), "qcpjibosfl", 0, 5, 0);
+  test(S("rlfjgesqhc"), "lrhmefnjcq", 0, 9, 0);
+  test(S("itphbqsker"), "dtablcrseo", 0, 10, S::npos);
+  test(S("skjafcirqm"), "apckjsftedbhgomrnilq", 0, 0, S::npos);
+  test(S("tcqomarsfd"), "pcbrgflehjtiadnsokqm", 0, 1, S::npos);
+  test(S("rocfeldqpk"), "nsiadegjklhobrmtqcpf", 0, 10, S::npos);
+  test(S("cfpegndlkt"), "cpmajdqnolikhgsbretf", 0, 19, 0);
+  test(S("fqbtnkeasj"), "jcflkntmgiqrphdosaeb", 0, 20, 0);
+  test(S("shbcqnmoar"), "", 1, 0, S::npos);
+  test(S("bdoshlmfin"), "ontrs", 1, 0, S::npos);
+  test(S("khfrebnsgq"), "pfkna", 1, 1, S::npos);
+  test(S("getcrsaoji"), "ekosa", 1, 2, 1);
+  test(S("fjiknedcpq"), "anqhk", 1, 4, S::npos);
+  test(S("tkejgnafrm"), "jekca", 1, 5, 1);
+  test(S("jnakolqrde"), "ikemsjgacf", 1, 0, S::npos);
+  test(S("lcjptsmgbe"), "arolgsjkhm", 1, 1, S::npos);
+  test(S("itfsmcjorl"), "oftkbldhre", 1, 5, 1);
+  test(S("omchkfrjea"), "gbkqdoeftl", 1, 9, 0);
+  test(S("cigfqkated"), "sqcflrgtim", 1, 10, 1);
+  test(S("tscenjikml"), "fmhbkislrjdpanogqcet", 1, 0, S::npos);
+  test(S("qcpaemsinf"), "rnioadktqlgpbcjsmhef", 1, 1, S::npos);
+  test(S("gltkojeipd"), "oakgtnldpsefihqmjcbr", 1, 10, 1);
+  test(S("qistfrgnmp"), "gbnaelosidmcjqktfhpr", 1, 19, 1);
+  test(S("bdnpfcqaem"), "akbripjhlosndcmqgfet", 1, 20, 1);
+  test(S("ectnhskflp"), "", 5, 0, S::npos);
+  test(S("fgtianblpq"), "pijag", 5, 0, S::npos);
+  test(S("mfeqklirnh"), "jrckd", 5, 1, S::npos);
+  test(S("astedncjhk"), "qcloh", 5, 2, S::npos);
+  test(S("fhlqgcajbr"), "thlmp", 5, 4, 2);
+  test(S("epfhocmdng"), "qidmo", 5, 5, 4);
+  test(S("apcnsibger"), "lnegpsjqrd", 5, 0, S::npos);
+  test(S("aqkocrbign"), "rjqdablmfs", 5, 1, 5);
+  test(S("ijsmdtqgce"), "enkgpbsjaq", 5, 5, S::npos);
+  test(S("clobgsrken"), "kdsgoaijfh", 5, 9, 5);
+  test(S("jbhcfposld"), "trfqgmckbe", 5, 10, 4);
+  test(S("oqnpblhide"), "igetsracjfkdnpoblhqm", 5, 0, S::npos);
+  test(S("lroeasctif"), "nqctfaogirshlekbdjpm", 5, 1, S::npos);
+  test(S("bpjlgmiedh"), "csehfgomljdqinbartkp", 5, 10, 5);
+  test(S("pamkeoidrj"), "qahoegcmplkfsjbdnitr", 5, 19, 5);
+  test(S("espogqbthk"), "dpteiajrqmsognhlfbkc", 5, 20, 5);
+  test(S("shoiedtcjb"), "", 9, 0, S::npos);
+  test(S("ebcinjgads"), "tqbnh", 9, 0, S::npos);
+  test(S("dqmregkcfl"), "akmle", 9, 1, S::npos);
+  test(S("ngcrieqajf"), "iqfkm", 9, 2, 6);
+  test(S("qosmilgnjb"), "tqjsr", 9, 4, 8);
+  test(S("ikabsjtdfl"), "jplqg", 9, 5, 9);
+  test(S("ersmicafdh"), "oilnrbcgtj", 9, 0, S::npos);
+  test(S("fdnplotmgh"), "morkglpesn", 9, 1, 7);
+  test(S("fdbicojerm"), "dmicerngat", 9, 5, 9);
+  test(S("mbtafndjcq"), "radgeskbtc", 9, 9, 6);
+  test(S("mlenkpfdtc"), "ljikprsmqo", 9, 10, 5);
+  test(S("ahlcifdqgs"), "trqihkcgsjamfdbolnpe", 9, 0, S::npos);
+  test(S("bgjemaltks"), "lqmthbsrekajgnofcipd", 9, 1, 6);
+  test(S("pdhslbqrfc"), "jtalmedribkgqsopcnfh", 9, 10, 7);
+  test(S("dirhtsnjkc"), "spqfoiclmtagejbndkrh", 9, 19, 9);
+  test(S("dlroktbcja"), "nmotklspigjrdhcfaebq", 9, 20, 9);
+  test(S("ncjpmaekbs"), "", 10, 0, S::npos);
+  test(S("hlbosgmrak"), "hpmsd", 10, 0, S::npos);
+  test(S("pqfhsgilen"), "qnpor", 10, 1, 1);
+  test(S("gqtjsbdckh"), "otdma", 10, 2, 2);
+  test(S("cfkqpjlegi"), "efhjg", 10, 4, 7);
+  test(S("beanrfodgj"), "odpte", 10, 5, 7);
+  test(S("adtkqpbjfi"), "bctdgfmolr", 10, 0, S::npos);
+  test(S("iomkfthagj"), "oaklidrbqg", 10, 1, 1);
 }
 
 template <class S>
-void test2()
-{
-    test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, 9);
-    test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, 8);
-    test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, 9);
-    test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos);
-    test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, 8);
-    test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, 9);
-    test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, 9);
-    test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, 9);
-    test(S("cqjohampgd"), "", 11, 0, S::npos);
-    test(S("hobitmpsan"), "aocjb", 11, 0, S::npos);
-    test(S("tjehkpsalm"), "jbrnk", 11, 1, 1);
-    test(S("ngfbojitcl"), "tqedg", 11, 2, 7);
-    test(S("rcfkdbhgjo"), "nqskp", 11, 4, 3);
-    test(S("qghptonrea"), "eaqkl", 11, 5, 9);
-    test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos);
-    test(S("hlmgabenti"), "lsftgajqpm", 11, 1, 1);
-    test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, 7);
-    test(S("jqedtkornm"), "shkncmiaqj", 11, 9, 9);
-    test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, 9);
-    test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos);
-    test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos);
-    test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, 9);
-    test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, 9);
-    test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, 9);
-    test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, S::npos);
-    test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, S::npos);
-    test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, S::npos);
-    test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, S::npos);
-    test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, S::npos);
-    test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, S::npos);
-    test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, S::npos);
-    test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, S::npos);
-    test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, S::npos);
-    test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, S::npos);
-    test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, S::npos);
-    test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, S::npos);
-    test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, S::npos);
-    test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, S::npos);
-    test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 0);
-    test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, 0);
-    test(S("febhmqtjanokscdirpgl"), "", 1, 0, S::npos);
-    test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, S::npos);
-    test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, S::npos);
-    test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 1);
-    test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 1);
-    test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, S::npos);
-    test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, S::npos);
-    test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, S::npos);
-    test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, S::npos);
-    test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 1);
-    test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 1);
-    test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, S::npos);
-    test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, S::npos);
-    test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 1);
-    test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 1);
-    test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, 1);
-    test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, S::npos);
-    test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, S::npos);
-    test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, S::npos);
-    test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 7);
-    test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 10);
-    test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 6);
-    test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, S::npos);
-    test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 9);
-    test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 5);
-    test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 10);
-    test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 9);
-    test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, S::npos);
-    test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, S::npos);
-    test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 10);
-    test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 10);
-    test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, 10);
-    test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, S::npos);
-    test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, S::npos);
-    test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 16);
-    test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 7);
-    test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 16);
-    test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 19);
-    test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, S::npos);
-    test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 15);
-    test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 17);
-    test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 16);
-    test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 16);
-    test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, S::npos);
-    test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 10);
-    test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 19);
-    test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 19);
-    test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, 19);
-    test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos);
-    test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos);
-    test(S("grkpahljcftesdmonqib"), "odife", 20, 1, 15);
-    test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, 12);
-    test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, 19);
-    test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, 19);
-    test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos);
-    test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, 3);
-    test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, 19);
-    test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, 19);
-    test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, 19);
-    test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos);
+void test2() {
+  test(S("sdpcilonqj"), "dnjfsagktr", 10, 5, 9);
+  test(S("gtfbdkqeml"), "nejaktmiqg", 10, 9, 8);
+  test(S("bmeqgcdorj"), "pjqonlebsf", 10, 10, 9);
+  test(S("etqlcanmob"), "dshmnbtolcjepgaikfqr", 10, 0, S::npos);
+  test(S("roqmkbdtia"), "iogfhpabtjkqlrnemcds", 10, 1, 8);
+  test(S("kadsithljf"), "ngridfabjsecpqltkmoh", 10, 10, 9);
+  test(S("sgtkpbfdmh"), "athmknplcgofrqejsdib", 10, 19, 9);
+  test(S("qgmetnabkl"), "ldobhmqcafnjtkeisgrp", 10, 20, 9);
+  test(S("cqjohampgd"), "", 11, 0, S::npos);
+  test(S("hobitmpsan"), "aocjb", 11, 0, S::npos);
+  test(S("tjehkpsalm"), "jbrnk", 11, 1, 1);
+  test(S("ngfbojitcl"), "tqedg", 11, 2, 7);
+  test(S("rcfkdbhgjo"), "nqskp", 11, 4, 3);
+  test(S("qghptonrea"), "eaqkl", 11, 5, 9);
+  test(S("hnprfgqjdl"), "reaoicljqm", 11, 0, S::npos);
+  test(S("hlmgabenti"), "lsftgajqpm", 11, 1, 1);
+  test(S("ofcjanmrbs"), "rlpfogmits", 11, 5, 7);
+  test(S("jqedtkornm"), "shkncmiaqj", 11, 9, 9);
+  test(S("rfedlasjmg"), "fpnatrhqgs", 11, 10, 9);
+  test(S("talpqjsgkm"), "sjclemqhnpdbgikarfot", 11, 0, S::npos);
+  test(S("lrkcbtqpie"), "otcmedjikgsfnqbrhpla", 11, 1, S::npos);
+  test(S("cipogdskjf"), "bonsaefdqiprkhlgtjcm", 11, 10, 9);
+  test(S("nqedcojahi"), "egpscmahijlfnkrodqtb", 11, 19, 9);
+  test(S("hefnrkmctj"), "kmqbfepjthgilscrndoa", 11, 20, 9);
+  test(S("atqirnmekfjolhpdsgcb"), "", 0, 0, S::npos);
+  test(S("echfkmlpribjnqsaogtd"), "prboq", 0, 0, S::npos);
+  test(S("qnhiftdgcleajbpkrosm"), "fjcqh", 0, 1, S::npos);
+  test(S("chamfknorbedjitgslpq"), "fmosa", 0, 2, S::npos);
+  test(S("njhqpibfmtlkaecdrgso"), "qdbok", 0, 4, S::npos);
+  test(S("ebnghfsqkprmdcljoiat"), "amslg", 0, 5, S::npos);
+  test(S("letjomsgihfrpqbkancd"), "smpltjneqb", 0, 0, S::npos);
+  test(S("nblgoipcrqeaktshjdmf"), "flitskrnge", 0, 1, S::npos);
+  test(S("cehkbngtjoiflqapsmrd"), "pgqihmlbef", 0, 5, S::npos);
+  test(S("mignapfoklbhcqjetdrs"), "cfpdqjtgsb", 0, 9, S::npos);
+  test(S("ceatbhlsqjgpnokfrmdi"), "htpsiaflom", 0, 10, S::npos);
+  test(S("ocihkjgrdelpfnmastqb"), "kpjfiaceghsrdtlbnomq", 0, 0, S::npos);
+  test(S("noelgschdtbrjfmiqkap"), "qhtbomidljgafneksprc", 0, 1, S::npos);
+  test(S("dkclqfombepritjnghas"), "nhtjobkcefldimpsaqgr", 0, 10, S::npos);
+  test(S("miklnresdgbhqcojftap"), "prabcjfqnoeskilmtgdh", 0, 19, 0);
+  test(S("htbcigojaqmdkfrnlsep"), "dtrgmchilkasqoebfpjn", 0, 20, 0);
+  test(S("febhmqtjanokscdirpgl"), "", 1, 0, S::npos);
+  test(S("loakbsqjpcrdhftniegm"), "sqome", 1, 0, S::npos);
+  test(S("reagphsqflbitdcjmkno"), "smfte", 1, 1, S::npos);
+  test(S("jitlfrqemsdhkopncabg"), "ciboh", 1, 2, 1);
+  test(S("mhtaepscdnrjqgbkifol"), "haois", 1, 4, 1);
+  test(S("tocesrfmnglpbjihqadk"), "abfki", 1, 5, S::npos);
+  test(S("lpfmctjrhdagneskbqoi"), "frdkocntmq", 1, 0, S::npos);
+  test(S("lsmqaepkdhncirbtjfgo"), "oasbpedlnr", 1, 1, S::npos);
+  test(S("epoiqmtldrabnkjhcfsg"), "kltqmhgand", 1, 5, S::npos);
+  test(S("emgasrilpknqojhtbdcf"), "gdtfjchpmr", 1, 9, 1);
+  test(S("hnfiagdpcklrjetqbsom"), "ponmcqblet", 1, 10, 1);
+  test(S("nsdfebgajhmtricpoklq"), "sgphqdnofeiklatbcmjr", 1, 0, S::npos);
+  test(S("atjgfsdlpobmeiqhncrk"), "ljqprsmigtfoneadckbh", 1, 1, S::npos);
+  test(S("sitodfgnrejlahcbmqkp"), "ligeojhafnkmrcsqtbdp", 1, 10, 1);
+  test(S("fraghmbiceknltjpqosd"), "lsimqfnjarbopedkhcgt", 1, 19, 1);
+  test(S("pmafenlhqtdbkirjsogc"), "abedmfjlghniorcqptks", 1, 20, 1);
+  test(S("pihgmoeqtnakrjslcbfd"), "", 10, 0, S::npos);
+  test(S("gjdkeprctqblnhiafsom"), "hqtoa", 10, 0, S::npos);
+  test(S("mkpnblfdsahrcqijteog"), "cahif", 10, 1, S::npos);
+  test(S("gckarqnelodfjhmbptis"), "kehis", 10, 2, 7);
+  test(S("gqpskidtbclomahnrjfe"), "kdlmh", 10, 4, 10);
+  test(S("pkldjsqrfgitbhmaecno"), "paeql", 10, 5, 6);
+  test(S("aftsijrbeklnmcdqhgop"), "aghoqiefnb", 10, 0, S::npos);
+  test(S("mtlgdrhafjkbiepqnsoc"), "jrbqaikpdo", 10, 1, 9);
+  test(S("pqgirnaefthokdmbsclj"), "smjonaeqcl", 10, 5, 5);
+  test(S("kpdbgjmtherlsfcqoina"), "eqbdrkcfah", 10, 9, 10);
+  test(S("jrlbothiknqmdgcfasep"), "kapmsienhf", 10, 10, 9);
+  test(S("mjogldqferckabinptsh"), "jpqotrlenfcsbhkaimdg", 10, 0, S::npos);
+  test(S("apoklnefbhmgqcdrisjt"), "jlbmhnfgtcqprikeados", 10, 1, S::npos);
+  test(S("ifeopcnrjbhkdgatmqls"), "stgbhfmdaljnpqoicker", 10, 10, 10);
+  test(S("ckqhaiesmjdnrgolbtpf"), "oihcetflbjagdsrkmqpn", 10, 19, 10);
+  test(S("bnlgapfimcoterskqdjh"), "adtclebmnpjsrqfkigoh", 10, 20, 10);
+  test(S("kgdlrobpmjcthqsafeni"), "", 19, 0, S::npos);
+  test(S("dfkechomjapgnslbtqir"), "beafg", 19, 0, S::npos);
+  test(S("rloadknfbqtgmhcsipje"), "iclat", 19, 1, 16);
+  test(S("mgjhkolrnadqbpetcifs"), "rkhnf", 19, 2, 7);
+  test(S("cmlfakiojdrgtbsphqen"), "clshq", 19, 4, 16);
+  test(S("kghbfipeomsntdalrqjc"), "dtcoj", 19, 5, 19);
+  test(S("eldiqckrnmtasbghjfpo"), "rqosnjmfth", 19, 0, S::npos);
+  test(S("abqjcfedgotihlnspkrm"), "siatdfqglh", 19, 1, 15);
+  test(S("qfbadrtjsimkolcenhpg"), "mrlshtpgjq", 19, 5, 17);
+  test(S("abseghclkjqifmtodrnp"), "adlcskgqjt", 19, 9, 16);
+  test(S("ibmsnlrjefhtdokacqpg"), "drshcjknaf", 19, 10, 16);
+  test(S("mrkfciqjebaponsthldg"), "etsaqroinghpkjdlfcbm", 19, 0, S::npos);
+  test(S("mjkticdeoqshpalrfbgn"), "sgepdnkqliambtrocfhj", 19, 1, 10);
+  test(S("rqnoclbdejgiphtfsakm"), "nlmcjaqgbsortfdihkpe", 19, 10, 19);
+  test(S("plkqbhmtfaeodjcrsing"), "racfnpmosldibqkghjet", 19, 19, 19);
+  test(S("oegalhmstjrfickpbndq"), "fjhdsctkqeiolagrnmbp", 19, 20, 19);
+  test(S("rdtgjcaohpblniekmsfq"), "", 20, 0, S::npos);
+  test(S("ofkqbnjetrmsaidphglc"), "ejanp", 20, 0, S::npos);
+  test(S("grkpahljcftesdmonqib"), "odife", 20, 1, 15);
+  test(S("jimlgbhfqkteospardcn"), "okaqd", 20, 2, 12);
+  test(S("gftenihpmslrjkqadcob"), "lcdbi", 20, 4, 19);
+  test(S("bmhldogtckrfsanijepq"), "fsqbj", 20, 5, 19);
+  test(S("nfqkrpjdesabgtlcmoih"), "bigdomnplq", 20, 0, S::npos);
+  test(S("focalnrpiqmdkstehbjg"), "apiblotgcd", 20, 1, 3);
+  test(S("rhqdspkmebiflcotnjga"), "acfhdenops", 20, 5, 19);
+  test(S("rahdtmsckfboqlpniegj"), "jopdeamcrk", 20, 9, 19);
+  test(S("fbkeiopclstmdqranjhg"), "trqncbkgmh", 20, 10, 19);
+  test(S("lifhpdgmbconstjeqark"), "tomglrkencbsfjqpihda", 20, 0, S::npos);
 }
 
 template <class S>
-void test3()
-{
-    test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, 4);
-    test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, 17);
-    test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, 19);
-    test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, 19);
-    test(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos);
-    test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos);
-    test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, 6);
-    test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, 13);
-    test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, 10);
-    test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, 17);
-    test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos);
-    test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, 14);
-    test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, 19);
-    test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, 14);
-    test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, 16);
-    test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos);
-    test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, 17);
-    test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, 17);
-    test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, 19);
-    test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, 19);
+void test3() {
+  test(S("pboqganrhedjmltsicfk"), "gbkhdnpoietfcmrslajq", 20, 1, 4);
+  test(S("klchabsimetjnqgorfpd"), "rtfnmbsglkjaichoqedp", 20, 10, 17);
+  test(S("sirfgmjqhctndbklaepo"), "ohkmdpfqbsacrtjnlgei", 20, 19, 19);
+  test(S("rlbdsiceaonqjtfpghkm"), "dlbrteoisgphmkncajfq", 20, 20, 19);
+  test(S("ecgdanriptblhjfqskom"), "", 21, 0, S::npos);
+  test(S("fdmiarlpgcskbhoteqjn"), "sjrlo", 21, 0, S::npos);
+  test(S("rlbstjqopignecmfadkh"), "qjpor", 21, 1, 6);
+  test(S("grjpqmbshektdolcafni"), "odhfn", 21, 2, 13);
+  test(S("sakfcohtqnibprjmlged"), "qtfin", 21, 4, 10);
+  test(S("mjtdglasihqpocebrfkn"), "hpqfo", 21, 5, 17);
+  test(S("okaplfrntghqbmeicsdj"), "fabmertkos", 21, 0, S::npos);
+  test(S("sahngemrtcjidqbklfpo"), "brqtgkmaej", 21, 1, 14);
+  test(S("dlmsipcnekhbgoaftqjr"), "nfrdeihsgl", 21, 5, 19);
+  test(S("ahegrmqnoiklpfsdbcjt"), "hlfrosekpi", 21, 9, 14);
+  test(S("hdsjbnmlegtkqripacof"), "atgbkrjdsm", 21, 10, 16);
+  test(S("pcnedrfjihqbalkgtoms"), "blnrptjgqmaifsdkhoec", 21, 0, S::npos);
+  test(S("qjidealmtpskrbfhocng"), "ctpmdahebfqjgknloris", 21, 1, 17);
+  test(S("qeindtagmokpfhsclrbj"), "apnkeqthrmlbfodiscgj", 21, 10, 17);
+  test(S("kpfegbjhsrnodltqciam"), "jdgictpframeoqlsbknh", 21, 19, 19);
+  test(S("hnbrcplsjfgiktoedmaq"), "qprlsfojamgndekthibc", 21, 20, 19);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
     test2<S>();
     test3<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find_last_of( "",      0, 0) == SV::npos, "" );
-    static_assert (sv1.find_last_of( "irkhs", 0, 5) == SV::npos, "" );
-    static_assert (sv2.find_last_of( "",      0, 0) == SV::npos, "" );
-    static_assert (sv2.find_last_of( "gfsrt", 5, 5) == SV::npos, "" );
-    static_assert (sv2.find_last_of( "lecar", 5, 5) == 4, "" );
-    }
+    static_assert(sv1.find_last_of("", 0, 0) == SV::npos, "");
+    static_assert(sv1.find_last_of("irkhs", 0, 5) == SV::npos, "");
+    static_assert(sv2.find_last_of("", 0, 0) == SV::npos, "");
+    static_assert(sv2.find_last_of("gfsrt", 5, 5) == SV::npos, "");
+    static_assert(sv2.find_last_of("lecar", 5, 5) == 4, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_last_of_string_view_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_last_of_string_view_size.pass.cpp
index 5c0ee6419b6c499..e8464a388f84b25 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_last_of_string_view_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_last_of_string_view_size.pass.cpp
@@ -18,138 +18,131 @@
 #include "test_macros.h"
 
 template <class S>
-void
-test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str, pos));
-    assert(s.find_last_of(str, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x < s.size());
+void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str, pos));
+  assert(s.find_last_of(str, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x < s.size());
 }
 
 template <class S>
-void
-test(const S& s, const S& str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str));
-    assert(s.find_last_of(str) == x);
-    if (x != S::npos)
-        assert(x < s.size());
+void test(const S& s, const S& str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find_last_of(str));
+  assert(s.find_last_of(str) == x);
+  if (x != S::npos)
+    assert(x < s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), S(""), 0, S::npos);
-    test(S(""), S("laenf"), 0, S::npos);
-    test(S(""), S("pqlnkmbdjo"), 0, S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
-    test(S(""), S(""), 1, S::npos);
-    test(S(""), S("bjaht"), 1, S::npos);
-    test(S(""), S("hjlcmgpket"), 1, S::npos);
-    test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
-    test(S("fodgq"), S(""), 0, S::npos);
-    test(S("qanej"), S("dfkap"), 0, S::npos);
-    test(S("clbao"), S("ihqrfebgad"), 0, S::npos);
-    test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, 0);
-    test(S("srdfq"), S(""), 1, S::npos);
-    test(S("oemth"), S("ikcrq"), 1, S::npos);
-    test(S("cdaih"), S("dmajblfhsg"), 1, 1);
-    test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, 1);
-    test(S("cshmd"), S(""), 2, S::npos);
-    test(S("lhcdo"), S("oebqi"), 2, S::npos);
-    test(S("qnsoh"), S("kojhpmbsfe"), 2, 2);
-    test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, 2);
-    test(S("fmtsp"), S(""), 4, S::npos);
-    test(S("khbpm"), S("aobjd"), 4, 2);
-    test(S("pbsji"), S("pcbahntsje"), 4, 3);
-    test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, 4);
-    test(S("eqmpa"), S(""), 5, S::npos);
-    test(S("omigs"), S("kocgb"), 5, 3);
-    test(S("onmje"), S("fbslrjiqkm"), 5, 3);
-    test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, 4);
-    test(S("schfa"), S(""), 6, S::npos);
-    test(S("igdsc"), S("qngpd"), 6, 2);
-    test(S("brqgo"), S("rodhqklgmb"), 6, 4);
-    test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, 4);
-    test(S("hcjitbfapl"), S(""), 0, S::npos);
-    test(S("daiprenocl"), S("ashjd"), 0, 0);
-    test(S("litpcfdghe"), S("mgojkldsqh"), 0, 0);
-    test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, 0);
-    test(S("qpghtfbaji"), S(""), 1, S::npos);
-    test(S("gfshlcmdjr"), S("nadkh"), 1, S::npos);
-    test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 1);
-    test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, 1);
-    test(S("crnklpmegd"), S(""), 5, S::npos);
-    test(S("jsbtafedoc"), S("prqgn"), 5, S::npos);
-    test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 5);
-    test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, 5);
-    test(S("lmofqdhpki"), S(""), 9, S::npos);
-    test(S("hnefkqimca"), S("rtjpa"), 9, 9);
-    test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, 7);
-    test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, 9);
-    test(S("elgofjmbrq"), S(""), 10, S::npos);
-    test(S("mjqdgalkpc"), S("dplqa"), 10, 8);
-    test(S("kthqnfcerm"), S("dkacjoptns"), 10, 6);
-    test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, 9);
-    test(S("eqsgalomhb"), S(""), 11, S::npos);
-    test(S("akiteljmoh"), S("lofbc"), 11, 8);
-    test(S("hlbdfreqjo"), S("astoegbfpn"), 11, 9);
-    test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, 9);
-    test(S("snafbdlghrjkpqtoceim"), S(""), 0, S::npos);
-    test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, S::npos);
-    test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, 0);
-    test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, 0);
-    test(S("jlnkraeodhcspfgbqitm"), S(""), 1, S::npos);
-    test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, S::npos);
-    test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 1);
-    test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, 1);
-    test(S("hdpkobnsalmcfijregtq"), S(""), 10, S::npos);
-    test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 10);
-    test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 10);
-    test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, 10);
-    test(S("niptglfbosehkamrdqcj"), S(""), 19, S::npos);
-    test(S("copqdhstbingamjfkler"), S("djkqc"), 19, 16);
-    test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, 19);
-    test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, 19);
-    test(S("eaintpchlqsbdgrkjofm"), S(""), 20, S::npos);
-    test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, 19);
-    test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, 18);
-    test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, 19);
-    test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, S::npos);
-    test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, 12);
-    test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, 17);
-    test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, 19);
+void test0() {
+  test(S(""), S(""), 0, S::npos);
+  test(S(""), S("laenf"), 0, S::npos);
+  test(S(""), S("pqlnkmbdjo"), 0, S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), 0, S::npos);
+  test(S(""), S(""), 1, S::npos);
+  test(S(""), S("bjaht"), 1, S::npos);
+  test(S(""), S("hjlcmgpket"), 1, S::npos);
+  test(S(""), S("htaobedqikfplcgjsmrn"), 1, S::npos);
+  test(S("fodgq"), S(""), 0, S::npos);
+  test(S("qanej"), S("dfkap"), 0, S::npos);
+  test(S("clbao"), S("ihqrfebgad"), 0, S::npos);
+  test(S("mekdn"), S("ngtjfcalbseiqrphmkdo"), 0, 0);
+  test(S("srdfq"), S(""), 1, S::npos);
+  test(S("oemth"), S("ikcrq"), 1, S::npos);
+  test(S("cdaih"), S("dmajblfhsg"), 1, 1);
+  test(S("qohtk"), S("oqftjhdmkgsblacenirp"), 1, 1);
+  test(S("cshmd"), S(""), 2, S::npos);
+  test(S("lhcdo"), S("oebqi"), 2, S::npos);
+  test(S("qnsoh"), S("kojhpmbsfe"), 2, 2);
+  test(S("pkrof"), S("acbsjqogpltdkhinfrem"), 2, 2);
+  test(S("fmtsp"), S(""), 4, S::npos);
+  test(S("khbpm"), S("aobjd"), 4, 2);
+  test(S("pbsji"), S("pcbahntsje"), 4, 3);
+  test(S("mprdj"), S("fhepcrntkoagbmldqijs"), 4, 4);
+  test(S("eqmpa"), S(""), 5, S::npos);
+  test(S("omigs"), S("kocgb"), 5, 3);
+  test(S("onmje"), S("fbslrjiqkm"), 5, 3);
+  test(S("oqmrj"), S("jeidpcmalhfnqbgtrsko"), 5, 4);
+  test(S("schfa"), S(""), 6, S::npos);
+  test(S("igdsc"), S("qngpd"), 6, 2);
+  test(S("brqgo"), S("rodhqklgmb"), 6, 4);
+  test(S("tnrph"), S("thdjgafrlbkoiqcspmne"), 6, 4);
+  test(S("hcjitbfapl"), S(""), 0, S::npos);
+  test(S("daiprenocl"), S("ashjd"), 0, 0);
+  test(S("litpcfdghe"), S("mgojkldsqh"), 0, 0);
+  test(S("aidjksrolc"), S("imqnaghkfrdtlopbjesc"), 0, 0);
+  test(S("qpghtfbaji"), S(""), 1, S::npos);
+  test(S("gfshlcmdjr"), S("nadkh"), 1, S::npos);
+  test(S("nkodajteqp"), S("ofdrqmkebl"), 1, 1);
+  test(S("gbmetiprqd"), S("bdfjqgatlksriohemnpc"), 1, 1);
+  test(S("crnklpmegd"), S(""), 5, S::npos);
+  test(S("jsbtafedoc"), S("prqgn"), 5, S::npos);
+  test(S("qnmodrtkeb"), S("pejafmnokr"), 5, 5);
+  test(S("cpebqsfmnj"), S("odnqkgijrhabfmcestlp"), 5, 5);
+  test(S("lmofqdhpki"), S(""), 9, S::npos);
+  test(S("hnefkqimca"), S("rtjpa"), 9, 9);
+  test(S("drtasbgmfp"), S("ktsrmnqagd"), 9, 7);
+  test(S("lsaijeqhtr"), S("rtdhgcisbnmoaqkfpjle"), 9, 9);
+  test(S("elgofjmbrq"), S(""), 10, S::npos);
+  test(S("mjqdgalkpc"), S("dplqa"), 10, 8);
+  test(S("kthqnfcerm"), S("dkacjoptns"), 10, 6);
+  test(S("dfsjhanorc"), S("hqfimtrgnbekpdcsjalo"), 10, 9);
+  test(S("eqsgalomhb"), S(""), 11, S::npos);
+  test(S("akiteljmoh"), S("lofbc"), 11, 8);
+  test(S("hlbdfreqjo"), S("astoegbfpn"), 11, 9);
+  test(S("taqobhlerg"), S("pdgreqomsncafklhtibj"), 11, 9);
+  test(S("snafbdlghrjkpqtoceim"), S(""), 0, S::npos);
+  test(S("aemtbrgcklhndjisfpoq"), S("lbtqd"), 0, S::npos);
+  test(S("pnracgfkjdiholtbqsem"), S("tboimldpjh"), 0, 0);
+  test(S("dicfltehbsgrmojnpkaq"), S("slcerthdaiqjfnobgkpm"), 0, 0);
+  test(S("jlnkraeodhcspfgbqitm"), S(""), 1, S::npos);
+  test(S("lhosrngtmfjikbqpcade"), S("aqibs"), 1, S::npos);
+  test(S("rbtaqjhgkneisldpmfoc"), S("gtfblmqinc"), 1, 1);
+  test(S("gpifsqlrdkbonjtmheca"), S("mkqpbtdalgniorhfescj"), 1, 1);
+  test(S("hdpkobnsalmcfijregtq"), S(""), 10, S::npos);
+  test(S("jtlshdgqaiprkbcoenfm"), S("pblas"), 10, 10);
+  test(S("fkdrbqltsgmcoiphneaj"), S("arosdhcfme"), 10, 10);
+  test(S("crsplifgtqedjohnabmk"), S("blkhjeogicatqfnpdmsr"), 10, 10);
+  test(S("niptglfbosehkamrdqcj"), S(""), 19, S::npos);
+  test(S("copqdhstbingamjfkler"), S("djkqc"), 19, 16);
+  test(S("mrtaefilpdsgocnhqbjk"), S("lgokshjtpb"), 19, 19);
+  test(S("kojatdhlcmigpbfrqnes"), S("bqjhtkfepimcnsgrlado"), 19, 19);
+  test(S("eaintpchlqsbdgrkjofm"), S(""), 20, S::npos);
+  test(S("gjnhidfsepkrtaqbmclo"), S("nocfa"), 20, 19);
+  test(S("spocfaktqdbiejlhngmr"), S("bgtajmiedc"), 20, 18);
+  test(S("rphmlekgfscndtaobiqj"), S("lsckfnqgdahejiopbtmr"), 20, 19);
+  test(S("liatsqdoegkmfcnbhrpj"), S(""), 21, S::npos);
+  test(S("binjagtfldkrspcomqeh"), S("gfsrt"), 21, 12);
+  test(S("latkmisecnorjbfhqpdg"), S("pfsocbhjtm"), 21, 17);
+  test(S("lecfratdjkhnsmqpoigb"), S("tpflmdnoicjgkberhqsa"), 21, 19);
 }
 
 template <class S>
-void test1()
-{
-    test(S(""), S(""), S::npos);
-    test(S(""), S("laenf"), S::npos);
-    test(S(""), S("pqlnkmbdjo"), S::npos);
-    test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
-    test(S("nhmko"), S(""), S::npos);
-    test(S("lahfb"), S("irkhs"), 2);
-    test(S("gmfhd"), S("kantesmpgj"), 1);
-    test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), 4);
-    test(S("eolhfgpjqk"), S(""), S::npos);
-    test(S("nbatdlmekr"), S("bnrpe"), 9);
-    test(S("jdmciepkaq"), S("jtdaefblso"), 8);
-    test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), 9);
-    test(S("gprdcokbnjhlsfmtieqa"), S(""), S::npos);
-    test(S("qjghlnftcaismkropdeb"), S("bjaht"), 19);
-    test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 19);
-    test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), 19);
+void test1() {
+  test(S(""), S(""), S::npos);
+  test(S(""), S("laenf"), S::npos);
+  test(S(""), S("pqlnkmbdjo"), S::npos);
+  test(S(""), S("qkamfogpnljdcshbreti"), S::npos);
+  test(S("nhmko"), S(""), S::npos);
+  test(S("lahfb"), S("irkhs"), 2);
+  test(S("gmfhd"), S("kantesmpgj"), 1);
+  test(S("odaft"), S("oknlrstdpiqmjbaghcfe"), 4);
+  test(S("eolhfgpjqk"), S(""), S::npos);
+  test(S("nbatdlmekr"), S("bnrpe"), 9);
+  test(S("jdmciepkaq"), S("jtdaefblso"), 8);
+  test(S("hkbgspoflt"), S("oselktgbcapndfjihrmq"), 9);
+  test(S("gprdcokbnjhlsfmtieqa"), S(""), S::npos);
+  test(S("qjghlnftcaismkropdeb"), S("bjaht"), 19);
+  test(S("pnalfrdtkqcmojiesbhg"), S("hjlcmgpket"), 19);
+  test(S("pniotcfrhqsmgdkjbael"), S("htaobedqikfplcgjsmrn"), 19);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
-    }
+  }
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_pointer_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_pointer_size.pass.cpp
index ecd0b15f8c31c3a..a144aaf46d964c2 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_pointer_size.pass.cpp
@@ -19,158 +19,148 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos));
-    assert(s.find(str, pos) == x);
-    if (x != S::npos)
-    {
-        typename S::size_type n = S::traits_type::length(str);
-        assert(pos <= x && x + n <= s.size());
-    }
+void test(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos));
+  assert(s.find(str, pos) == x);
+  if (x != S::npos) {
+    typename S::size_type n = S::traits_type::length(str);
+    assert(pos <= x && x + n <= s.size());
+  }
 }
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(str));
-    assert(s.find(str) == x);
-    if (x != S::npos)
-    {
-        typename S::size_type n = S::traits_type::length(str);
-        assert(0 <= x && x + n <= s.size());
-    }
+void test(const S& s, const typename S::value_type* str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(str));
+  assert(s.find(str) == x);
+  if (x != S::npos) {
+    typename S::size_type n = S::traits_type::length(str);
+    assert(0 <= x && x + n <= s.size());
+  }
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), "", 0, 0);
-    test(S(""), "abcde", 0, S::npos);
-    test(S(""), "abcdeabcde", 0, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, S::npos);
-    test(S(""), "", 1, S::npos);
-    test(S(""), "abcde", 1, S::npos);
-    test(S(""), "abcdeabcde", 1, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcde"), "", 0, 0);
-    test(S("abcde"), "abcde", 0, 0);
-    test(S("abcde"), "abcdeabcde", 0, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
-    test(S("abcde"), "", 1, 1);
-    test(S("abcde"), "abcde", 1, S::npos);
-    test(S("abcde"), "abcdeabcde", 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcde"), "", 2, 2);
-    test(S("abcde"), "abcde", 2, S::npos);
-    test(S("abcde"), "abcdeabcde", 2, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, S::npos);
-    test(S("abcde"), "", 4, 4);
-    test(S("abcde"), "abcde", 4, S::npos);
-    test(S("abcde"), "abcdeabcde", 4, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, S::npos);
-    test(S("abcde"), "", 5, 5);
-    test(S("abcde"), "abcde", 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 5, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
-    test(S("abcde"), "", 6, S::npos);
-    test(S("abcde"), "abcde", 6, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, S::npos);
-    test(S("abcdeabcde"), "", 0, 0);
-    test(S("abcdeabcde"), "abcde", 0, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
-    test(S("abcdeabcde"), "", 1, 1);
-    test(S("abcdeabcde"), "abcde", 1, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 1, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcdeabcde"), "", 5, 5);
-    test(S("abcdeabcde"), "abcde", 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
-    test(S("abcdeabcde"), "", 9, 9);
-    test(S("abcdeabcde"), "abcde", 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, S::npos);
-    test(S("abcdeabcde"), "", 10, 10);
-    test(S("abcdeabcde"), "abcde", 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, S::npos);
-    test(S("abcdeabcde"), "", 11, S::npos);
-    test(S("abcdeabcde"), "abcde", 11, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 11, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 1, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 19, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 20, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, S::npos);
+void test0() {
+  test(S(""), "", 0, 0);
+  test(S(""), "abcde", 0, S::npos);
+  test(S(""), "abcdeabcde", 0, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, S::npos);
+  test(S(""), "", 1, S::npos);
+  test(S(""), "abcde", 1, S::npos);
+  test(S(""), "abcdeabcde", 1, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcde"), "", 0, 0);
+  test(S("abcde"), "abcde", 0, 0);
+  test(S("abcde"), "abcdeabcde", 0, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
+  test(S("abcde"), "", 1, 1);
+  test(S("abcde"), "abcde", 1, S::npos);
+  test(S("abcde"), "abcdeabcde", 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcde"), "", 2, 2);
+  test(S("abcde"), "abcde", 2, S::npos);
+  test(S("abcde"), "abcdeabcde", 2, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, S::npos);
+  test(S("abcde"), "", 4, 4);
+  test(S("abcde"), "abcde", 4, S::npos);
+  test(S("abcde"), "abcdeabcde", 4, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, S::npos);
+  test(S("abcde"), "", 5, 5);
+  test(S("abcde"), "abcde", 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 5, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
+  test(S("abcde"), "", 6, S::npos);
+  test(S("abcde"), "abcde", 6, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, S::npos);
+  test(S("abcdeabcde"), "", 0, 0);
+  test(S("abcdeabcde"), "abcde", 0, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
+  test(S("abcdeabcde"), "", 1, 1);
+  test(S("abcdeabcde"), "abcde", 1, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 1, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcdeabcde"), "", 5, 5);
+  test(S("abcdeabcde"), "abcde", 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
+  test(S("abcdeabcde"), "", 9, 9);
+  test(S("abcdeabcde"), "abcde", 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, S::npos);
+  test(S("abcdeabcde"), "", 10, 10);
+  test(S("abcdeabcde"), "abcde", 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, S::npos);
+  test(S("abcdeabcde"), "", 11, S::npos);
+  test(S("abcdeabcde"), "abcde", 11, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 11, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 1, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 19, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 20, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, S::npos);
 }
 
 template <class S>
-void test1()
-{
-    test(S(""), "", 0);
-    test(S(""), "abcde", S::npos);
-    test(S(""), "abcdeabcde", S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", S::npos);
-    test(S("abcde"), "", 0);
-    test(S("abcde"), "abcde", 0);
-    test(S("abcde"), "abcdeabcde", S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", S::npos);
-    test(S("abcdeabcde"), "", 0);
-    test(S("abcdeabcde"), "abcde", 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0);
+void test1() {
+  test(S(""), "", 0);
+  test(S(""), "abcde", S::npos);
+  test(S(""), "abcdeabcde", S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", S::npos);
+  test(S("abcde"), "", 0);
+  test(S("abcde"), "abcde", 0);
+  test(S("abcde"), "abcdeabcde", S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", S::npos);
+  test(S("abcdeabcde"), "", 0);
+  test(S("abcdeabcde"), "abcde", 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find( "") == 0, "" );
-    static_assert (sv1.find( "abcde") == SV::npos, "" );
-    static_assert (sv2.find( "") == 0, "" );
-    static_assert (sv2.find( "abcde") == 0, "" );
-    static_assert (sv2.find( "abcde", 1) == SV::npos, "" );
-    }
+    static_assert(sv1.find("") == 0, "");
+    static_assert(sv1.find("abcde") == SV::npos, "");
+    static_assert(sv2.find("") == 0, "");
+    static_assert(sv2.find("abcde") == 0, "");
+    static_assert(sv2.find("abcde", 1) == SV::npos, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_pointer_size_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_pointer_size_size.pass.cpp
index 2e68e9ec7ca903d..1d73cafd6613691 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_pointer_size_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_pointer_size_size.pass.cpp
@@ -19,379 +19,375 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type n, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos, n));
-    assert(s.find(str, pos, n) == x);
-    if (x != S::npos)
-        assert(pos <= x && x + n <= s.size());
+void test(const S& s,
+          const typename S::value_type* str,
+          typename S::size_type pos,
+          typename S::size_type n,
+          typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos, n));
+  assert(s.find(str, pos, n) == x);
+  if (x != S::npos)
+    assert(pos <= x && x + n <= s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), "", 0, 0, 0);
-    test(S(""), "abcde", 0, 0, 0);
-    test(S(""), "abcde", 0, 1, S::npos);
-    test(S(""), "abcde", 0, 2, S::npos);
-    test(S(""), "abcde", 0, 4, S::npos);
-    test(S(""), "abcde", 0, 5, S::npos);
-    test(S(""), "abcdeabcde", 0, 0, 0);
-    test(S(""), "abcdeabcde", 0, 1, S::npos);
-    test(S(""), "abcdeabcde", 0, 5, S::npos);
-    test(S(""), "abcdeabcde", 0, 9, S::npos);
-    test(S(""), "abcdeabcde", 0, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
-    test(S(""), "", 1, 0, S::npos);
-    test(S(""), "abcde", 1, 0, S::npos);
-    test(S(""), "abcde", 1, 1, S::npos);
-    test(S(""), "abcde", 1, 2, S::npos);
-    test(S(""), "abcde", 1, 4, S::npos);
-    test(S(""), "abcde", 1, 5, S::npos);
-    test(S(""), "abcdeabcde", 1, 0, S::npos);
-    test(S(""), "abcdeabcde", 1, 1, S::npos);
-    test(S(""), "abcdeabcde", 1, 5, S::npos);
-    test(S(""), "abcdeabcde", 1, 9, S::npos);
-    test(S(""), "abcdeabcde", 1, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 0, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcde"), "", 0, 0, 0);
-    test(S("abcde"), "abcde", 0, 0, 0);
-    test(S("abcde"), "abcde", 0, 1, 0);
-    test(S("abcde"), "abcde", 0, 2, 0);
-    test(S("abcde"), "abcde", 0, 4, 0);
-    test(S("abcde"), "abcde", 0, 5, 0);
-    test(S("abcde"), "abcdeabcde", 0, 0, 0);
-    test(S("abcde"), "abcdeabcde", 0, 1, 0);
-    test(S("abcde"), "abcdeabcde", 0, 5, 0);
-    test(S("abcde"), "abcdeabcde", 0, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 0, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
-    test(S("abcde"), "", 1, 0, 1);
-    test(S("abcde"), "abcde", 1, 0, 1);
-    test(S("abcde"), "abcde", 1, 1, S::npos);
-    test(S("abcde"), "abcde", 1, 2, S::npos);
-    test(S("abcde"), "abcde", 1, 4, S::npos);
-    test(S("abcde"), "abcde", 1, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 1, 0, 1);
-    test(S("abcde"), "abcdeabcde", 1, 1, S::npos);
-    test(S("abcde"), "abcdeabcde", 1, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 1, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 1, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcde"), "", 2, 0, 2);
-    test(S("abcde"), "abcde", 2, 0, 2);
-    test(S("abcde"), "abcde", 2, 1, S::npos);
-    test(S("abcde"), "abcde", 2, 2, S::npos);
-    test(S("abcde"), "abcde", 2, 4, S::npos);
-    test(S("abcde"), "abcde", 2, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 2, 0, 2);
-    test(S("abcde"), "abcdeabcde", 2, 1, S::npos);
-    test(S("abcde"), "abcdeabcde", 2, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 2, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 2, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos);
-    test(S("abcde"), "", 4, 0, 4);
-    test(S("abcde"), "abcde", 4, 0, 4);
-    test(S("abcde"), "abcde", 4, 1, S::npos);
-    test(S("abcde"), "abcde", 4, 2, S::npos);
-    test(S("abcde"), "abcde", 4, 4, S::npos);
-    test(S("abcde"), "abcde", 4, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 4, 0, 4);
-    test(S("abcde"), "abcdeabcde", 4, 1, S::npos);
-    test(S("abcde"), "abcdeabcde", 4, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 4, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 4, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos);
-    test(S("abcde"), "", 5, 0, 5);
-    test(S("abcde"), "abcde", 5, 0, 5);
-    test(S("abcde"), "abcde", 5, 1, S::npos);
-    test(S("abcde"), "abcde", 5, 2, S::npos);
+void test0() {
+  test(S(""), "", 0, 0, 0);
+  test(S(""), "abcde", 0, 0, 0);
+  test(S(""), "abcde", 0, 1, S::npos);
+  test(S(""), "abcde", 0, 2, S::npos);
+  test(S(""), "abcde", 0, 4, S::npos);
+  test(S(""), "abcde", 0, 5, S::npos);
+  test(S(""), "abcdeabcde", 0, 0, 0);
+  test(S(""), "abcdeabcde", 0, 1, S::npos);
+  test(S(""), "abcdeabcde", 0, 5, S::npos);
+  test(S(""), "abcdeabcde", 0, 9, S::npos);
+  test(S(""), "abcdeabcde", 0, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
+  test(S(""), "", 1, 0, S::npos);
+  test(S(""), "abcde", 1, 0, S::npos);
+  test(S(""), "abcde", 1, 1, S::npos);
+  test(S(""), "abcde", 1, 2, S::npos);
+  test(S(""), "abcde", 1, 4, S::npos);
+  test(S(""), "abcde", 1, 5, S::npos);
+  test(S(""), "abcdeabcde", 1, 0, S::npos);
+  test(S(""), "abcdeabcde", 1, 1, S::npos);
+  test(S(""), "abcdeabcde", 1, 5, S::npos);
+  test(S(""), "abcdeabcde", 1, 9, S::npos);
+  test(S(""), "abcdeabcde", 1, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 0, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcde"), "", 0, 0, 0);
+  test(S("abcde"), "abcde", 0, 0, 0);
+  test(S("abcde"), "abcde", 0, 1, 0);
+  test(S("abcde"), "abcde", 0, 2, 0);
+  test(S("abcde"), "abcde", 0, 4, 0);
+  test(S("abcde"), "abcde", 0, 5, 0);
+  test(S("abcde"), "abcdeabcde", 0, 0, 0);
+  test(S("abcde"), "abcdeabcde", 0, 1, 0);
+  test(S("abcde"), "abcdeabcde", 0, 5, 0);
+  test(S("abcde"), "abcdeabcde", 0, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 0, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
+  test(S("abcde"), "", 1, 0, 1);
+  test(S("abcde"), "abcde", 1, 0, 1);
+  test(S("abcde"), "abcde", 1, 1, S::npos);
+  test(S("abcde"), "abcde", 1, 2, S::npos);
+  test(S("abcde"), "abcde", 1, 4, S::npos);
+  test(S("abcde"), "abcde", 1, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 1, 0, 1);
+  test(S("abcde"), "abcdeabcde", 1, 1, S::npos);
+  test(S("abcde"), "abcdeabcde", 1, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 1, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 1, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcde"), "", 2, 0, 2);
+  test(S("abcde"), "abcde", 2, 0, 2);
+  test(S("abcde"), "abcde", 2, 1, S::npos);
+  test(S("abcde"), "abcde", 2, 2, S::npos);
+  test(S("abcde"), "abcde", 2, 4, S::npos);
+  test(S("abcde"), "abcde", 2, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 2, 0, 2);
+  test(S("abcde"), "abcdeabcde", 2, 1, S::npos);
+  test(S("abcde"), "abcdeabcde", 2, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 2, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 2, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos);
+  test(S("abcde"), "", 4, 0, 4);
+  test(S("abcde"), "abcde", 4, 0, 4);
+  test(S("abcde"), "abcde", 4, 1, S::npos);
+  test(S("abcde"), "abcde", 4, 2, S::npos);
+  test(S("abcde"), "abcde", 4, 4, S::npos);
+  test(S("abcde"), "abcde", 4, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 4, 0, 4);
+  test(S("abcde"), "abcdeabcde", 4, 1, S::npos);
+  test(S("abcde"), "abcdeabcde", 4, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 4, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 4, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos);
+  test(S("abcde"), "", 5, 0, 5);
+  test(S("abcde"), "abcde", 5, 0, 5);
+  test(S("abcde"), "abcde", 5, 1, S::npos);
+  test(S("abcde"), "abcde", 5, 2, S::npos);
 }
 
 template <class S>
-void test1()
-{
-    test(S("abcde"), "abcde", 5, 4, S::npos);
-    test(S("abcde"), "abcde", 5, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 5, 0, 5);
-    test(S("abcde"), "abcdeabcde", 5, 1, S::npos);
-    test(S("abcde"), "abcdeabcde", 5, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 5, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 5, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
-    test(S("abcde"), "", 6, 0, S::npos);
-    test(S("abcde"), "abcde", 6, 0, S::npos);
-    test(S("abcde"), "abcde", 6, 1, S::npos);
-    test(S("abcde"), "abcde", 6, 2, S::npos);
-    test(S("abcde"), "abcde", 6, 4, S::npos);
-    test(S("abcde"), "abcde", 6, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, 0, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, 1, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, 5, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos);
-    test(S("abcdeabcde"), "", 0, 0, 0);
-    test(S("abcdeabcde"), "abcde", 0, 0, 0);
-    test(S("abcdeabcde"), "abcde", 0, 1, 0);
-    test(S("abcdeabcde"), "abcde", 0, 2, 0);
-    test(S("abcdeabcde"), "abcde", 0, 4, 0);
-    test(S("abcdeabcde"), "abcde", 0, 5, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 0, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 1, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 5, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
-    test(S("abcdeabcde"), "", 1, 0, 1);
-    test(S("abcdeabcde"), "abcde", 1, 0, 1);
-    test(S("abcdeabcde"), "abcde", 1, 1, 5);
-    test(S("abcdeabcde"), "abcde", 1, 2, 5);
-    test(S("abcdeabcde"), "abcde", 1, 4, 5);
-    test(S("abcdeabcde"), "abcde", 1, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 0, 1);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcdeabcde"), "", 5, 0, 5);
-    test(S("abcdeabcde"), "abcde", 5, 0, 5);
-    test(S("abcdeabcde"), "abcde", 5, 1, 5);
-    test(S("abcdeabcde"), "abcde", 5, 2, 5);
-    test(S("abcdeabcde"), "abcde", 5, 4, 5);
-    test(S("abcdeabcde"), "abcde", 5, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 0, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
-    test(S("abcdeabcde"), "", 9, 0, 9);
-    test(S("abcdeabcde"), "abcde", 9, 0, 9);
-    test(S("abcdeabcde"), "abcde", 9, 1, S::npos);
-    test(S("abcdeabcde"), "abcde", 9, 2, S::npos);
-    test(S("abcdeabcde"), "abcde", 9, 4, S::npos);
-    test(S("abcdeabcde"), "abcde", 9, 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 0, 9);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 1, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos);
-    test(S("abcdeabcde"), "", 10, 0, 10);
-    test(S("abcdeabcde"), "abcde", 10, 0, 10);
-    test(S("abcdeabcde"), "abcde", 10, 1, S::npos);
-    test(S("abcdeabcde"), "abcde", 10, 2, S::npos);
-    test(S("abcdeabcde"), "abcde", 10, 4, S::npos);
-    test(S("abcdeabcde"), "abcde", 10, 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 0, 10);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 1, S::npos);
+void test1() {
+  test(S("abcde"), "abcde", 5, 4, S::npos);
+  test(S("abcde"), "abcde", 5, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 5, 0, 5);
+  test(S("abcde"), "abcdeabcde", 5, 1, S::npos);
+  test(S("abcde"), "abcdeabcde", 5, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 5, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 5, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
+  test(S("abcde"), "", 6, 0, S::npos);
+  test(S("abcde"), "abcde", 6, 0, S::npos);
+  test(S("abcde"), "abcde", 6, 1, S::npos);
+  test(S("abcde"), "abcde", 6, 2, S::npos);
+  test(S("abcde"), "abcde", 6, 4, S::npos);
+  test(S("abcde"), "abcde", 6, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, 0, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, 1, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, 5, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos);
+  test(S("abcdeabcde"), "", 0, 0, 0);
+  test(S("abcdeabcde"), "abcde", 0, 0, 0);
+  test(S("abcdeabcde"), "abcde", 0, 1, 0);
+  test(S("abcdeabcde"), "abcde", 0, 2, 0);
+  test(S("abcdeabcde"), "abcde", 0, 4, 0);
+  test(S("abcdeabcde"), "abcde", 0, 5, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 0, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 1, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 5, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
+  test(S("abcdeabcde"), "", 1, 0, 1);
+  test(S("abcdeabcde"), "abcde", 1, 0, 1);
+  test(S("abcdeabcde"), "abcde", 1, 1, 5);
+  test(S("abcdeabcde"), "abcde", 1, 2, 5);
+  test(S("abcdeabcde"), "abcde", 1, 4, 5);
+  test(S("abcdeabcde"), "abcde", 1, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 0, 1);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcdeabcde"), "", 5, 0, 5);
+  test(S("abcdeabcde"), "abcde", 5, 0, 5);
+  test(S("abcdeabcde"), "abcde", 5, 1, 5);
+  test(S("abcdeabcde"), "abcde", 5, 2, 5);
+  test(S("abcdeabcde"), "abcde", 5, 4, 5);
+  test(S("abcdeabcde"), "abcde", 5, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 0, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
+  test(S("abcdeabcde"), "", 9, 0, 9);
+  test(S("abcdeabcde"), "abcde", 9, 0, 9);
+  test(S("abcdeabcde"), "abcde", 9, 1, S::npos);
+  test(S("abcdeabcde"), "abcde", 9, 2, S::npos);
+  test(S("abcdeabcde"), "abcde", 9, 4, S::npos);
+  test(S("abcdeabcde"), "abcde", 9, 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 0, 9);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 1, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos);
+  test(S("abcdeabcde"), "", 10, 0, 10);
+  test(S("abcdeabcde"), "abcde", 10, 0, 10);
+  test(S("abcdeabcde"), "abcde", 10, 1, S::npos);
+  test(S("abcdeabcde"), "abcde", 10, 2, S::npos);
+  test(S("abcdeabcde"), "abcde", 10, 4, S::npos);
+  test(S("abcdeabcde"), "abcde", 10, 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 0, 10);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 1, S::npos);
 }
 
 template <class S>
-void test2()
-{
-    test(S("abcdeabcde"), "abcdeabcde", 10, 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
-    test(S("abcdeabcde"), "", 11, 0, S::npos);
-    test(S("abcdeabcde"), "abcde", 11, 0, S::npos);
-    test(S("abcdeabcde"), "abcde", 11, 1, S::npos);
-    test(S("abcdeabcde"), "abcde", 11, 2, S::npos);
-    test(S("abcdeabcde"), "abcde", 11, 4, S::npos);
-    test(S("abcdeabcde"), "abcde", 11, 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 0, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 1, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 5, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 9, S::npos);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 5);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20);
+void test2() {
+  test(S("abcdeabcde"), "abcdeabcde", 10, 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
+  test(S("abcdeabcde"), "", 11, 0, S::npos);
+  test(S("abcdeabcde"), "abcde", 11, 0, S::npos);
+  test(S("abcdeabcde"), "abcde", 11, 1, S::npos);
+  test(S("abcdeabcde"), "abcde", 11, 2, S::npos);
+  test(S("abcdeabcde"), "abcde", 11, 4, S::npos);
+  test(S("abcdeabcde"), "abcde", 11, 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 0, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 1, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 5, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 9, S::npos);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 5);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20);
 }
 
 template <class S>
-void test3()
-{
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 21, 0, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 0, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 2, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 4, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 5, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 0, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 5, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 9, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 20, S::npos);
+void test3() {
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 21, 0, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 0, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 2, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 4, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 5, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 0, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 5, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 9, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 20, S::npos);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
     test2<S>();
     test3<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find( "",      0, 0 ) == 0, "" );
-    static_assert (sv1.find( "abcde", 0, 0 ) == 0, "" );
-    static_assert (sv1.find( "abcde", 0, 1 ) == SV::npos, "" );
-    static_assert (sv2.find( "",      0, 0 ) == 0, "" );
-    static_assert (sv2.find( "abcde", 0, 0 ) == 0, "" );
-    static_assert (sv2.find( "abcde", 0, 1 ) == 0, "" );
-    }
+    static_assert(sv1.find("", 0, 0) == 0, "");
+    static_assert(sv1.find("abcde", 0, 0) == 0, "");
+    static_assert(sv1.find("abcde", 0, 1) == SV::npos, "");
+    static_assert(sv2.find("", 0, 0) == 0, "");
+    static_assert(sv2.find("abcde", 0, 0) == 0, "");
+    static_assert(sv2.find("abcde", 0, 1) == 0, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/find_string_view_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/find_string_view_size.pass.cpp
index d189578a5c6135a..e67dacf3f153d5d 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/find_string_view_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/find_string_view_size.pass.cpp
@@ -19,151 +19,144 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos));
-    assert(s.find(str, pos) == x);
-    if (x != S::npos)
-        assert(pos <= x && x + str.size() <= s.size());
+void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(str, pos));
+  assert(s.find(str, pos) == x);
+  if (x != S::npos)
+    assert(pos <= x && x + str.size() <= s.size());
 }
 
 template <class S>
-void
-test(const S& s, const S& str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.find(str));
-    assert(s.find(str) == x);
-    if (x != S::npos)
-        assert(0 <= x && x + str.size() <= s.size());
+void test(const S& s, const S& str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.find(str));
+  assert(s.find(str) == x);
+  if (x != S::npos)
+    assert(0 <= x && x + str.size() <= s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), S(""), 0, 0);
-    test(S(""), S("abcde"), 0, S::npos);
-    test(S(""), S("abcdeabcde"), 0, S::npos);
-    test(S(""), S("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S(""), S(""), 1, S::npos);
-    test(S(""), S("abcde"), 1, S::npos);
-    test(S(""), S("abcdeabcde"), 1, S::npos);
-    test(S(""), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcde"), S(""), 0, 0);
-    test(S("abcde"), S("abcde"), 0, 0);
-    test(S("abcde"), S("abcdeabcde"), 0, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S("abcde"), S(""), 1, 1);
-    test(S("abcde"), S("abcde"), 1, S::npos);
-    test(S("abcde"), S("abcdeabcde"), 1, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcde"), S(""), 2, 2);
-    test(S("abcde"), S("abcde"), 2, S::npos);
-    test(S("abcde"), S("abcdeabcde"), 2, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 2, S::npos);
-    test(S("abcde"), S(""), 4, 4);
-    test(S("abcde"), S("abcde"), 4, S::npos);
-    test(S("abcde"), S("abcdeabcde"), 4, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 4, S::npos);
-    test(S("abcde"), S(""), 5, 5);
-    test(S("abcde"), S("abcde"), 5, S::npos);
-    test(S("abcde"), S("abcdeabcde"), 5, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
-    test(S("abcde"), S(""), 6, S::npos);
-    test(S("abcde"), S("abcde"), 6, S::npos);
-    test(S("abcde"), S("abcdeabcde"), 6, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 6, S::npos);
-    test(S("abcdeabcde"), S(""), 0, 0);
-    test(S("abcdeabcde"), S("abcde"), 0, 0);
-    test(S("abcdeabcde"), S("abcdeabcde"), 0, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S("abcdeabcde"), S(""), 1, 1);
-    test(S("abcdeabcde"), S("abcde"), 1, 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 1, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcdeabcde"), S(""), 5, 5);
-    test(S("abcdeabcde"), S("abcde"), 5, 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 5, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
-    test(S("abcdeabcde"), S(""), 9, 9);
-    test(S("abcdeabcde"), S("abcde"), 9, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcde"), 9, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 9, S::npos);
-    test(S("abcdeabcde"), S(""), 10, 10);
-    test(S("abcdeabcde"), S("abcde"), 10, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcde"), 10, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos);
-    test(S("abcdeabcde"), S(""), 11, S::npos);
-    test(S("abcdeabcde"), S("abcde"), 11, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcde"), 11, S::npos);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 11, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 1, 1);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 1, 5);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 19, 19);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 19, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 20, 20);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 21, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 21, S::npos);
+void test0() {
+  test(S(""), S(""), 0, 0);
+  test(S(""), S("abcde"), 0, S::npos);
+  test(S(""), S("abcdeabcde"), 0, S::npos);
+  test(S(""), S("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S(""), S(""), 1, S::npos);
+  test(S(""), S("abcde"), 1, S::npos);
+  test(S(""), S("abcdeabcde"), 1, S::npos);
+  test(S(""), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcde"), S(""), 0, 0);
+  test(S("abcde"), S("abcde"), 0, 0);
+  test(S("abcde"), S("abcdeabcde"), 0, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S("abcde"), S(""), 1, 1);
+  test(S("abcde"), S("abcde"), 1, S::npos);
+  test(S("abcde"), S("abcdeabcde"), 1, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcde"), S(""), 2, 2);
+  test(S("abcde"), S("abcde"), 2, S::npos);
+  test(S("abcde"), S("abcdeabcde"), 2, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 2, S::npos);
+  test(S("abcde"), S(""), 4, 4);
+  test(S("abcde"), S("abcde"), 4, S::npos);
+  test(S("abcde"), S("abcdeabcde"), 4, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 4, S::npos);
+  test(S("abcde"), S(""), 5, 5);
+  test(S("abcde"), S("abcde"), 5, S::npos);
+  test(S("abcde"), S("abcdeabcde"), 5, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
+  test(S("abcde"), S(""), 6, S::npos);
+  test(S("abcde"), S("abcde"), 6, S::npos);
+  test(S("abcde"), S("abcdeabcde"), 6, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 6, S::npos);
+  test(S("abcdeabcde"), S(""), 0, 0);
+  test(S("abcdeabcde"), S("abcde"), 0, 0);
+  test(S("abcdeabcde"), S("abcdeabcde"), 0, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S("abcdeabcde"), S(""), 1, 1);
+  test(S("abcdeabcde"), S("abcde"), 1, 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 1, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcdeabcde"), S(""), 5, 5);
+  test(S("abcdeabcde"), S("abcde"), 5, 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 5, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
+  test(S("abcdeabcde"), S(""), 9, 9);
+  test(S("abcdeabcde"), S("abcde"), 9, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcde"), 9, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 9, S::npos);
+  test(S("abcdeabcde"), S(""), 10, 10);
+  test(S("abcdeabcde"), S("abcde"), 10, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcde"), 10, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos);
+  test(S("abcdeabcde"), S(""), 11, S::npos);
+  test(S("abcdeabcde"), S("abcde"), 11, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcde"), 11, S::npos);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 11, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 1, 1);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 1, 5);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 19, 19);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 19, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 20, 20);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 21, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 21, S::npos);
 }
 
 template <class S>
-void test1()
-{
-    test(S(""), S(""), 0);
-    test(S(""), S("abcde"), S::npos);
-    test(S(""), S("abcdeabcde"), S::npos);
-    test(S(""), S("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcde"), S(""), 0);
-    test(S("abcde"), S("abcde"), 0);
-    test(S("abcde"), S("abcdeabcde"), S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcdeabcde"), S(""), 0);
-    test(S("abcdeabcde"), S("abcde"), 0);
-    test(S("abcdeabcde"), S("abcdeabcde"), 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0);
+void test1() {
+  test(S(""), S(""), 0);
+  test(S(""), S("abcde"), S::npos);
+  test(S(""), S("abcdeabcde"), S::npos);
+  test(S(""), S("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcde"), S(""), 0);
+  test(S("abcde"), S("abcde"), 0);
+  test(S("abcde"), S("abcdeabcde"), S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcdeabcde"), S(""), 0);
+  test(S("abcdeabcde"), S("abcde"), 0);
+  test(S("abcdeabcde"), S("abcdeabcde"), 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.find(sv1) == 0, "" );
-    static_assert (sv1.find(sv2) == SV::npos, "" );
-    static_assert (sv2.find(sv1) == 0, "" );
-    static_assert (sv2.find(sv2) == 0, "" );
-    static_assert (sv2.find(sv2, 1 ) == SV::npos, "" );
-    }
+    static_assert(sv1.find(sv1) == 0, "");
+    static_assert(sv1.find(sv2) == SV::npos, "");
+    static_assert(sv2.find(sv1) == 0, "");
+    static_assert(sv2.find(sv2) == 0, "");
+    static_assert(sv2.find(sv2, 1) == SV::npos, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/rfind_char_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/rfind_char_size.pass.cpp
index 96a0be54ebbdb53..8393d34ae0594a3 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/rfind_char_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/rfind_char_size.pass.cpp
@@ -18,29 +18,23 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, typename S::value_type c, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(c, pos));
-    assert(s.rfind(c, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x + 1 <= s.size());
+void test(const S& s, typename S::value_type c, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(c, pos));
+  assert(s.rfind(c, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x + 1 <= s.size());
 }
 
 template <class S>
-void
-test(const S& s, typename S::value_type c, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(c));
-    assert(s.rfind(c) == x);
-    if (x != S::npos)
-        assert(x + 1 <= s.size());
+void test(const S& s, typename S::value_type c, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(c));
+  assert(s.rfind(c) == x);
+  if (x != S::npos)
+    assert(x + 1 <= s.size());
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test(S(""), 'b', 0, S::npos);
     test(S(""), 'b', 1, S::npos);
@@ -67,22 +61,22 @@ int main(int, char**)
     test(S("abcde"), 'b', 1);
     test(S("abcdeabcde"), 'b', 6);
     test(S("abcdeabcdeabcdeabcde"), 'b', 16);
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.rfind( 'b', 0 ) == SV::npos, "" );
-    static_assert (sv1.rfind( 'b', 1 ) == SV::npos, "" );
-    static_assert (sv2.rfind( 'b', 0 ) == SV::npos, "" );
-    static_assert (sv2.rfind( 'b', 1 ) == 1, "" );
-    static_assert (sv2.rfind( 'b', 2 ) == 1, "" );
-    static_assert (sv2.rfind( 'b', 3 ) == 1, "" );
-    static_assert (sv2.rfind( 'b', 4 ) == 1, "" );
-    }
+    static_assert(sv1.rfind('b', 0) == SV::npos, "");
+    static_assert(sv1.rfind('b', 1) == SV::npos, "");
+    static_assert(sv2.rfind('b', 0) == SV::npos, "");
+    static_assert(sv2.rfind('b', 1) == 1, "");
+    static_assert(sv2.rfind('b', 2) == 1, "");
+    static_assert(sv2.rfind('b', 3) == 1, "");
+    static_assert(sv2.rfind('b', 4) == 1, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/rfind_pointer_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/rfind_pointer_size.pass.cpp
index 6dfde175148ccd0..f436ece805eb58e 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/rfind_pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/rfind_pointer_size.pass.cpp
@@ -18,159 +18,149 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-     typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(str, pos));
-    assert(s.rfind(str, pos) == x);
-    if (x != S::npos)
-    {
-        typename S::size_type n = S::traits_type::length(str);
-        assert(x <= pos && x + n <= s.size());
-    }
+void test(const S& s, const typename S::value_type* str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(str, pos));
+  assert(s.rfind(str, pos) == x);
+  if (x != S::npos) {
+    typename S::size_type n = S::traits_type::length(str);
+    assert(x <= pos && x + n <= s.size());
+  }
 }
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(str));
-    assert(s.rfind(str) == x);
-    if (x != S::npos)
-    {
-        typename S::size_type pos = s.size();
-        typename S::size_type n = S::traits_type::length(str);
-        assert(x <= pos && x + n <= s.size());
-    }
+void test(const S& s, const typename S::value_type* str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(str));
+  assert(s.rfind(str) == x);
+  if (x != S::npos) {
+    typename S::size_type pos = s.size();
+    typename S::size_type n   = S::traits_type::length(str);
+    assert(x <= pos && x + n <= s.size());
+  }
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), "", 0, 0);
-    test(S(""), "abcde", 0, S::npos);
-    test(S(""), "abcdeabcde", 0, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, S::npos);
-    test(S(""), "", 1, 0);
-    test(S(""), "abcde", 1, S::npos);
-    test(S(""), "abcdeabcde", 1, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcde"), "", 0, 0);
-    test(S("abcde"), "abcde", 0, 0);
-    test(S("abcde"), "abcdeabcde", 0, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
-    test(S("abcde"), "", 1, 1);
-    test(S("abcde"), "abcde", 1, 0);
-    test(S("abcde"), "abcdeabcde", 1, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcde"), "", 2, 2);
-    test(S("abcde"), "abcde", 2, 0);
-    test(S("abcde"), "abcdeabcde", 2, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, S::npos);
-    test(S("abcde"), "", 4, 4);
-    test(S("abcde"), "abcde", 4, 0);
-    test(S("abcde"), "abcdeabcde", 4, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, S::npos);
-    test(S("abcde"), "", 5, 5);
-    test(S("abcde"), "abcde", 5, 0);
-    test(S("abcde"), "abcdeabcde", 5, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
-    test(S("abcde"), "", 6, 5);
-    test(S("abcde"), "abcde", 6, 0);
-    test(S("abcde"), "abcdeabcde", 6, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, S::npos);
-    test(S("abcdeabcde"), "", 0, 0);
-    test(S("abcdeabcde"), "abcde", 0, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
-    test(S("abcdeabcde"), "", 1, 1);
-    test(S("abcdeabcde"), "abcde", 1, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
-    test(S("abcdeabcde"), "", 5, 5);
-    test(S("abcdeabcde"), "abcde", 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
-    test(S("abcdeabcde"), "", 9, 9);
-    test(S("abcdeabcde"), "abcde", 9, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, S::npos);
-    test(S("abcdeabcde"), "", 10, 10);
-    test(S("abcdeabcde"), "abcde", 10, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, S::npos);
-    test(S("abcdeabcde"), "", 11, 10);
-    test(S("abcdeabcde"), "abcde", 11, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 1, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 19, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 20, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 21, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0);
+void test0() {
+  test(S(""), "", 0, 0);
+  test(S(""), "abcde", 0, S::npos);
+  test(S(""), "abcdeabcde", 0, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, S::npos);
+  test(S(""), "", 1, 0);
+  test(S(""), "abcde", 1, S::npos);
+  test(S(""), "abcdeabcde", 1, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcde"), "", 0, 0);
+  test(S("abcde"), "abcde", 0, 0);
+  test(S("abcde"), "abcdeabcde", 0, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
+  test(S("abcde"), "", 1, 1);
+  test(S("abcde"), "abcde", 1, 0);
+  test(S("abcde"), "abcdeabcde", 1, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcde"), "", 2, 2);
+  test(S("abcde"), "abcde", 2, 0);
+  test(S("abcde"), "abcdeabcde", 2, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, S::npos);
+  test(S("abcde"), "", 4, 4);
+  test(S("abcde"), "abcde", 4, 0);
+  test(S("abcde"), "abcdeabcde", 4, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, S::npos);
+  test(S("abcde"), "", 5, 5);
+  test(S("abcde"), "abcde", 5, 0);
+  test(S("abcde"), "abcdeabcde", 5, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
+  test(S("abcde"), "", 6, 5);
+  test(S("abcde"), "abcde", 6, 0);
+  test(S("abcde"), "abcdeabcde", 6, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, S::npos);
+  test(S("abcdeabcde"), "", 0, 0);
+  test(S("abcdeabcde"), "abcde", 0, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, S::npos);
+  test(S("abcdeabcde"), "", 1, 1);
+  test(S("abcdeabcde"), "abcde", 1, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, S::npos);
+  test(S("abcdeabcde"), "", 5, 5);
+  test(S("abcdeabcde"), "abcde", 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, S::npos);
+  test(S("abcdeabcde"), "", 9, 9);
+  test(S("abcdeabcde"), "abcde", 9, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, S::npos);
+  test(S("abcdeabcde"), "", 10, 10);
+  test(S("abcdeabcde"), "abcde", 10, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, S::npos);
+  test(S("abcdeabcde"), "", 11, 10);
+  test(S("abcdeabcde"), "abcde", 11, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 1, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 19, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 20, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 21, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0);
 }
 
 template <class S>
-void test1()
-{
-    test(S(""), "", 0);
-    test(S(""), "abcde", S::npos);
-    test(S(""), "abcdeabcde", S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", S::npos);
-    test(S("abcde"), "", 5);
-    test(S("abcde"), "abcde", 0);
-    test(S("abcde"), "abcdeabcde", S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", S::npos);
-    test(S("abcdeabcde"), "", 10);
-    test(S("abcdeabcde"), "abcde", 5);
-    test(S("abcdeabcde"), "abcdeabcde", 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0);
+void test1() {
+  test(S(""), "", 0);
+  test(S(""), "abcde", S::npos);
+  test(S(""), "abcdeabcde", S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", S::npos);
+  test(S("abcde"), "", 5);
+  test(S("abcde"), "abcde", 0);
+  test(S("abcde"), "abcdeabcde", S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", S::npos);
+  test(S("abcdeabcde"), "", 10);
+  test(S("abcdeabcde"), "abcde", 5);
+  test(S("abcdeabcde"), "abcdeabcde", 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.rfind( "") == 0, "" );
-    static_assert (sv1.rfind( "abcde") == SV::npos, "" );
-    static_assert (sv2.rfind( "") == 5, "" );
-    static_assert (sv2.rfind( "abcde") == 0, "" );
-    static_assert (sv2.rfind( "abcde", 1) == 0, "" );
-    }
+    static_assert(sv1.rfind("") == 0, "");
+    static_assert(sv1.rfind("abcde") == SV::npos, "");
+    static_assert(sv2.rfind("") == 5, "");
+    static_assert(sv2.rfind("abcde") == 0, "");
+    static_assert(sv2.rfind("abcde", 1) == 0, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/rfind_pointer_size_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/rfind_pointer_size_size.pass.cpp
index 509293b956e20be..88b8370a90b01bd 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/rfind_pointer_size_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/rfind_pointer_size_size.pass.cpp
@@ -18,379 +18,375 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const typename S::value_type* str, typename S::size_type pos,
-      typename S::size_type n, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(str, pos, n));
-    assert(s.rfind(str, pos, n) == x);
-    if (x != S::npos)
-        assert(x <= pos && x + n <= s.size());
+void test(const S& s,
+          const typename S::value_type* str,
+          typename S::size_type pos,
+          typename S::size_type n,
+          typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(str, pos, n));
+  assert(s.rfind(str, pos, n) == x);
+  if (x != S::npos)
+    assert(x <= pos && x + n <= s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), "", 0, 0, 0);
-    test(S(""), "abcde", 0, 0, 0);
-    test(S(""), "abcde", 0, 1, S::npos);
-    test(S(""), "abcde", 0, 2, S::npos);
-    test(S(""), "abcde", 0, 4, S::npos);
-    test(S(""), "abcde", 0, 5, S::npos);
-    test(S(""), "abcdeabcde", 0, 0, 0);
-    test(S(""), "abcdeabcde", 0, 1, S::npos);
-    test(S(""), "abcdeabcde", 0, 5, S::npos);
-    test(S(""), "abcdeabcde", 0, 9, S::npos);
-    test(S(""), "abcdeabcde", 0, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
-    test(S(""), "", 1, 0, 0);
-    test(S(""), "abcde", 1, 0, 0);
-    test(S(""), "abcde", 1, 1, S::npos);
-    test(S(""), "abcde", 1, 2, S::npos);
-    test(S(""), "abcde", 1, 4, S::npos);
-    test(S(""), "abcde", 1, 5, S::npos);
-    test(S(""), "abcdeabcde", 1, 0, 0);
-    test(S(""), "abcdeabcde", 1, 1, S::npos);
-    test(S(""), "abcdeabcde", 1, 5, S::npos);
-    test(S(""), "abcdeabcde", 1, 9, S::npos);
-    test(S(""), "abcdeabcde", 1, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 0, 0);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcde"), "", 0, 0, 0);
-    test(S("abcde"), "abcde", 0, 0, 0);
-    test(S("abcde"), "abcde", 0, 1, 0);
-    test(S("abcde"), "abcde", 0, 2, 0);
-    test(S("abcde"), "abcde", 0, 4, 0);
-    test(S("abcde"), "abcde", 0, 5, 0);
-    test(S("abcde"), "abcdeabcde", 0, 0, 0);
-    test(S("abcde"), "abcdeabcde", 0, 1, 0);
-    test(S("abcde"), "abcdeabcde", 0, 5, 0);
-    test(S("abcde"), "abcdeabcde", 0, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 0, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
-    test(S("abcde"), "", 1, 0, 1);
-    test(S("abcde"), "abcde", 1, 0, 1);
-    test(S("abcde"), "abcde", 1, 1, 0);
-    test(S("abcde"), "abcde", 1, 2, 0);
-    test(S("abcde"), "abcde", 1, 4, 0);
-    test(S("abcde"), "abcde", 1, 5, 0);
-    test(S("abcde"), "abcdeabcde", 1, 0, 1);
-    test(S("abcde"), "abcdeabcde", 1, 1, 0);
-    test(S("abcde"), "abcdeabcde", 1, 5, 0);
-    test(S("abcde"), "abcdeabcde", 1, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 1, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcde"), "", 2, 0, 2);
-    test(S("abcde"), "abcde", 2, 0, 2);
-    test(S("abcde"), "abcde", 2, 1, 0);
-    test(S("abcde"), "abcde", 2, 2, 0);
-    test(S("abcde"), "abcde", 2, 4, 0);
-    test(S("abcde"), "abcde", 2, 5, 0);
-    test(S("abcde"), "abcdeabcde", 2, 0, 2);
-    test(S("abcde"), "abcdeabcde", 2, 1, 0);
-    test(S("abcde"), "abcdeabcde", 2, 5, 0);
-    test(S("abcde"), "abcdeabcde", 2, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 2, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos);
-    test(S("abcde"), "", 4, 0, 4);
-    test(S("abcde"), "abcde", 4, 0, 4);
-    test(S("abcde"), "abcde", 4, 1, 0);
-    test(S("abcde"), "abcde", 4, 2, 0);
-    test(S("abcde"), "abcde", 4, 4, 0);
-    test(S("abcde"), "abcde", 4, 5, 0);
-    test(S("abcde"), "abcdeabcde", 4, 0, 4);
-    test(S("abcde"), "abcdeabcde", 4, 1, 0);
-    test(S("abcde"), "abcdeabcde", 4, 5, 0);
-    test(S("abcde"), "abcdeabcde", 4, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 4, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos);
-    test(S("abcde"), "", 5, 0, 5);
-    test(S("abcde"), "abcde", 5, 0, 5);
-    test(S("abcde"), "abcde", 5, 1, 0);
-    test(S("abcde"), "abcde", 5, 2, 0);
+void test0() {
+  test(S(""), "", 0, 0, 0);
+  test(S(""), "abcde", 0, 0, 0);
+  test(S(""), "abcde", 0, 1, S::npos);
+  test(S(""), "abcde", 0, 2, S::npos);
+  test(S(""), "abcde", 0, 4, S::npos);
+  test(S(""), "abcde", 0, 5, S::npos);
+  test(S(""), "abcdeabcde", 0, 0, 0);
+  test(S(""), "abcdeabcde", 0, 1, S::npos);
+  test(S(""), "abcdeabcde", 0, 5, S::npos);
+  test(S(""), "abcdeabcde", 0, 9, S::npos);
+  test(S(""), "abcdeabcde", 0, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 1, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
+  test(S(""), "", 1, 0, 0);
+  test(S(""), "abcde", 1, 0, 0);
+  test(S(""), "abcde", 1, 1, S::npos);
+  test(S(""), "abcde", 1, 2, S::npos);
+  test(S(""), "abcde", 1, 4, S::npos);
+  test(S(""), "abcde", 1, 5, S::npos);
+  test(S(""), "abcdeabcde", 1, 0, 0);
+  test(S(""), "abcdeabcde", 1, 1, S::npos);
+  test(S(""), "abcdeabcde", 1, 5, S::npos);
+  test(S(""), "abcdeabcde", 1, 9, S::npos);
+  test(S(""), "abcdeabcde", 1, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 0, 0);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 1, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S(""), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcde"), "", 0, 0, 0);
+  test(S("abcde"), "abcde", 0, 0, 0);
+  test(S("abcde"), "abcde", 0, 1, 0);
+  test(S("abcde"), "abcde", 0, 2, 0);
+  test(S("abcde"), "abcde", 0, 4, 0);
+  test(S("abcde"), "abcde", 0, 5, 0);
+  test(S("abcde"), "abcdeabcde", 0, 0, 0);
+  test(S("abcde"), "abcdeabcde", 0, 1, 0);
+  test(S("abcde"), "abcdeabcde", 0, 5, 0);
+  test(S("abcde"), "abcdeabcde", 0, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 0, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
+  test(S("abcde"), "", 1, 0, 1);
+  test(S("abcde"), "abcde", 1, 0, 1);
+  test(S("abcde"), "abcde", 1, 1, 0);
+  test(S("abcde"), "abcde", 1, 2, 0);
+  test(S("abcde"), "abcde", 1, 4, 0);
+  test(S("abcde"), "abcde", 1, 5, 0);
+  test(S("abcde"), "abcdeabcde", 1, 0, 1);
+  test(S("abcde"), "abcdeabcde", 1, 1, 0);
+  test(S("abcde"), "abcdeabcde", 1, 5, 0);
+  test(S("abcde"), "abcdeabcde", 1, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 1, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcde"), "", 2, 0, 2);
+  test(S("abcde"), "abcde", 2, 0, 2);
+  test(S("abcde"), "abcde", 2, 1, 0);
+  test(S("abcde"), "abcde", 2, 2, 0);
+  test(S("abcde"), "abcde", 2, 4, 0);
+  test(S("abcde"), "abcde", 2, 5, 0);
+  test(S("abcde"), "abcdeabcde", 2, 0, 2);
+  test(S("abcde"), "abcdeabcde", 2, 1, 0);
+  test(S("abcde"), "abcdeabcde", 2, 5, 0);
+  test(S("abcde"), "abcdeabcde", 2, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 2, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 0, 2);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 2, 20, S::npos);
+  test(S("abcde"), "", 4, 0, 4);
+  test(S("abcde"), "abcde", 4, 0, 4);
+  test(S("abcde"), "abcde", 4, 1, 0);
+  test(S("abcde"), "abcde", 4, 2, 0);
+  test(S("abcde"), "abcde", 4, 4, 0);
+  test(S("abcde"), "abcde", 4, 5, 0);
+  test(S("abcde"), "abcdeabcde", 4, 0, 4);
+  test(S("abcde"), "abcdeabcde", 4, 1, 0);
+  test(S("abcde"), "abcdeabcde", 4, 5, 0);
+  test(S("abcde"), "abcdeabcde", 4, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 4, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 0, 4);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 4, 20, S::npos);
+  test(S("abcde"), "", 5, 0, 5);
+  test(S("abcde"), "abcde", 5, 0, 5);
+  test(S("abcde"), "abcde", 5, 1, 0);
+  test(S("abcde"), "abcde", 5, 2, 0);
 }
 
 template <class S>
-void test1()
-{
-    test(S("abcde"), "abcde", 5, 4, 0);
-    test(S("abcde"), "abcde", 5, 5, 0);
-    test(S("abcde"), "abcdeabcde", 5, 0, 5);
-    test(S("abcde"), "abcdeabcde", 5, 1, 0);
-    test(S("abcde"), "abcdeabcde", 5, 5, 0);
-    test(S("abcde"), "abcdeabcde", 5, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 5, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
-    test(S("abcde"), "", 6, 0, 5);
-    test(S("abcde"), "abcde", 6, 0, 5);
-    test(S("abcde"), "abcde", 6, 1, 0);
-    test(S("abcde"), "abcde", 6, 2, 0);
-    test(S("abcde"), "abcde", 6, 4, 0);
-    test(S("abcde"), "abcde", 6, 5, 0);
-    test(S("abcde"), "abcdeabcde", 6, 0, 5);
-    test(S("abcde"), "abcdeabcde", 6, 1, 0);
-    test(S("abcde"), "abcdeabcde", 6, 5, 0);
-    test(S("abcde"), "abcdeabcde", 6, 9, S::npos);
-    test(S("abcde"), "abcdeabcde", 6, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, 5);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, 0);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos);
-    test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos);
-    test(S("abcdeabcde"), "", 0, 0, 0);
-    test(S("abcdeabcde"), "abcde", 0, 0, 0);
-    test(S("abcdeabcde"), "abcde", 0, 1, 0);
-    test(S("abcdeabcde"), "abcde", 0, 2, 0);
-    test(S("abcdeabcde"), "abcde", 0, 4, 0);
-    test(S("abcdeabcde"), "abcde", 0, 5, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 0, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 1, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 5, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 0, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
-    test(S("abcdeabcde"), "", 1, 0, 1);
-    test(S("abcdeabcde"), "abcde", 1, 0, 1);
-    test(S("abcdeabcde"), "abcde", 1, 1, 0);
-    test(S("abcdeabcde"), "abcde", 1, 2, 0);
-    test(S("abcdeabcde"), "abcde", 1, 4, 0);
-    test(S("abcdeabcde"), "abcde", 1, 5, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 0, 1);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 1, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 5, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 1, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
-    test(S("abcdeabcde"), "", 5, 0, 5);
-    test(S("abcdeabcde"), "abcde", 5, 0, 5);
-    test(S("abcdeabcde"), "abcde", 5, 1, 5);
-    test(S("abcdeabcde"), "abcde", 5, 2, 5);
-    test(S("abcdeabcde"), "abcde", 5, 4, 5);
-    test(S("abcdeabcde"), "abcde", 5, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 0, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 5, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
-    test(S("abcdeabcde"), "", 9, 0, 9);
-    test(S("abcdeabcde"), "abcde", 9, 0, 9);
-    test(S("abcdeabcde"), "abcde", 9, 1, 5);
-    test(S("abcdeabcde"), "abcde", 9, 2, 5);
-    test(S("abcdeabcde"), "abcde", 9, 4, 5);
-    test(S("abcdeabcde"), "abcde", 9, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 0, 9);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 9, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos);
-    test(S("abcdeabcde"), "", 10, 0, 10);
-    test(S("abcdeabcde"), "abcde", 10, 0, 10);
-    test(S("abcdeabcde"), "abcde", 10, 1, 5);
-    test(S("abcdeabcde"), "abcde", 10, 2, 5);
-    test(S("abcdeabcde"), "abcde", 10, 4, 5);
-    test(S("abcdeabcde"), "abcde", 10, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 0, 10);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 1, 5);
+void test1() {
+  test(S("abcde"), "abcde", 5, 4, 0);
+  test(S("abcde"), "abcde", 5, 5, 0);
+  test(S("abcde"), "abcdeabcde", 5, 0, 5);
+  test(S("abcde"), "abcdeabcde", 5, 1, 0);
+  test(S("abcde"), "abcdeabcde", 5, 5, 0);
+  test(S("abcde"), "abcdeabcde", 5, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 5, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
+  test(S("abcde"), "", 6, 0, 5);
+  test(S("abcde"), "abcde", 6, 0, 5);
+  test(S("abcde"), "abcde", 6, 1, 0);
+  test(S("abcde"), "abcde", 6, 2, 0);
+  test(S("abcde"), "abcde", 6, 4, 0);
+  test(S("abcde"), "abcde", 6, 5, 0);
+  test(S("abcde"), "abcdeabcde", 6, 0, 5);
+  test(S("abcde"), "abcdeabcde", 6, 1, 0);
+  test(S("abcde"), "abcdeabcde", 6, 5, 0);
+  test(S("abcde"), "abcdeabcde", 6, 9, S::npos);
+  test(S("abcde"), "abcdeabcde", 6, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 0, 5);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 1, 0);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 10, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 19, S::npos);
+  test(S("abcde"), "abcdeabcdeabcdeabcde", 6, 20, S::npos);
+  test(S("abcdeabcde"), "", 0, 0, 0);
+  test(S("abcdeabcde"), "abcde", 0, 0, 0);
+  test(S("abcdeabcde"), "abcde", 0, 1, 0);
+  test(S("abcdeabcde"), "abcde", 0, 2, 0);
+  test(S("abcdeabcde"), "abcde", 0, 4, 0);
+  test(S("abcdeabcde"), "abcde", 0, 5, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 0, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 1, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 5, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 0, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, S::npos);
+  test(S("abcdeabcde"), "", 1, 0, 1);
+  test(S("abcdeabcde"), "abcde", 1, 0, 1);
+  test(S("abcdeabcde"), "abcde", 1, 1, 0);
+  test(S("abcdeabcde"), "abcde", 1, 2, 0);
+  test(S("abcdeabcde"), "abcde", 1, 4, 0);
+  test(S("abcdeabcde"), "abcde", 1, 5, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 0, 1);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 1, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 5, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 1, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, S::npos);
+  test(S("abcdeabcde"), "", 5, 0, 5);
+  test(S("abcdeabcde"), "abcde", 5, 0, 5);
+  test(S("abcdeabcde"), "abcde", 5, 1, 5);
+  test(S("abcdeabcde"), "abcde", 5, 2, 5);
+  test(S("abcdeabcde"), "abcde", 5, 4, 5);
+  test(S("abcdeabcde"), "abcde", 5, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 0, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 5, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 0, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 5, 20, S::npos);
+  test(S("abcdeabcde"), "", 9, 0, 9);
+  test(S("abcdeabcde"), "abcde", 9, 0, 9);
+  test(S("abcdeabcde"), "abcde", 9, 1, 5);
+  test(S("abcdeabcde"), "abcde", 9, 2, 5);
+  test(S("abcdeabcde"), "abcde", 9, 4, 5);
+  test(S("abcdeabcde"), "abcde", 9, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 0, 9);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 9, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 0, 9);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 9, 20, S::npos);
+  test(S("abcdeabcde"), "", 10, 0, 10);
+  test(S("abcdeabcde"), "abcde", 10, 0, 10);
+  test(S("abcdeabcde"), "abcde", 10, 1, 5);
+  test(S("abcdeabcde"), "abcde", 10, 2, 5);
+  test(S("abcdeabcde"), "abcde", 10, 4, 5);
+  test(S("abcdeabcde"), "abcde", 10, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 0, 10);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 1, 5);
 }
 
 template <class S>
-void test2()
-{
-    test(S("abcdeabcde"), "abcdeabcde", 10, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 10, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
-    test(S("abcdeabcde"), "", 11, 0, 10);
-    test(S("abcdeabcde"), "abcde", 11, 0, 10);
-    test(S("abcdeabcde"), "abcde", 11, 1, 5);
-    test(S("abcdeabcde"), "abcde", 11, 2, 5);
-    test(S("abcdeabcde"), "abcde", 11, 4, 5);
-    test(S("abcdeabcde"), "abcde", 11, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 0, 10);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 5, 5);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 9, 0);
-    test(S("abcdeabcde"), "abcdeabcde", 11, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, 10);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, 5);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, 0);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos);
-    test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20);
+void test2() {
+  test(S("abcdeabcde"), "abcdeabcde", 10, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 10, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, S::npos);
+  test(S("abcdeabcde"), "", 11, 0, 10);
+  test(S("abcdeabcde"), "abcde", 11, 0, 10);
+  test(S("abcdeabcde"), "abcde", 11, 1, 5);
+  test(S("abcdeabcde"), "abcde", 11, 2, 5);
+  test(S("abcdeabcde"), "abcde", 11, 4, 5);
+  test(S("abcdeabcde"), "abcde", 11, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 0, 10);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 5, 5);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 9, 0);
+  test(S("abcdeabcde"), "abcdeabcde", 11, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 0, 10);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 1, 5);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 10, 0);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 19, S::npos);
+  test(S("abcdeabcde"), "abcdeabcdeabcdeabcde", 11, 20, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), "", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 2, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 4, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 0, 5, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 5, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 9, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 0, 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 0, 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 2, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 4, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 1, 5, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 5, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 9, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 1, 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 0, 1);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 1, 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 1, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 2, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 4, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 10, 5, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 1, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 5, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 9, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 10, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 0, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 1, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 10, 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 2, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 4, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 19, 5, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 5, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 9, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 19, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 0, 19);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 19, 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 20, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 2, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 4, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 20, 5, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 5, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 9, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 20, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 0, 20);
 }
 
 template <class S>
-void test3()
-{
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), "", 21, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 2, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 4, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 5, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 5, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 9, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0, 20);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 1, 15);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 20, 0);
+void test3() {
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 20, 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), "", 21, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 2, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 4, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcde", 21, 5, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 5, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 9, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcde", 21, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 0, 20);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 1, 15);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), "abcdeabcdeabcdeabcde", 21, 20, 0);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
     test2<S>();
     test3<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.rfind( "",      0, 0 ) == 0, "" );
-    static_assert (sv1.rfind( "abcde", 0, 0 ) == 0, "" );
-    static_assert (sv1.rfind( "abcde", 0, 1 ) == SV::npos, "" );
-    static_assert (sv2.rfind( "",      0, 0 ) == 0, "" );
-    static_assert (sv2.rfind( "abcde", 0, 0 ) == 0, "" );
-    static_assert (sv2.rfind( "abcde", 0, 1 ) == 0, "" );
-    }
+    static_assert(sv1.rfind("", 0, 0) == 0, "");
+    static_assert(sv1.rfind("abcde", 0, 0) == 0, "");
+    static_assert(sv1.rfind("abcde", 0, 1) == SV::npos, "");
+    static_assert(sv2.rfind("", 0, 0) == 0, "");
+    static_assert(sv2.rfind("abcde", 0, 0) == 0, "");
+    static_assert(sv2.rfind("abcde", 0, 1) == 0, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.find/rfind_string_view_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.find/rfind_string_view_size.pass.cpp
index ad92d76e1a2ce1f..db80c65465e87c0 100644
--- a/libcxx/test/std/strings/string.view/string.view.find/rfind_string_view_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.find/rfind_string_view_size.pass.cpp
@@ -19,151 +19,144 @@
 #include "constexpr_char_traits.h"
 
 template <class S>
-void
-test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(str, pos));
-    assert(s.rfind(str, pos) == x);
-    if (x != S::npos)
-        assert(x <= pos && x + str.size() <= s.size());
+void test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(str, pos));
+  assert(s.rfind(str, pos) == x);
+  if (x != S::npos)
+    assert(x <= pos && x + str.size() <= s.size());
 }
 
 template <class S>
-void
-test(const S& s, const S& str, typename S::size_type x)
-{
-    LIBCPP_ASSERT_NOEXCEPT(s.rfind(str));
-    assert(s.rfind(str) == x);
-    if (x != S::npos)
-        assert(0 <= x && x + str.size() <= s.size());
+void test(const S& s, const S& str, typename S::size_type x) {
+  LIBCPP_ASSERT_NOEXCEPT(s.rfind(str));
+  assert(s.rfind(str) == x);
+  if (x != S::npos)
+    assert(0 <= x && x + str.size() <= s.size());
 }
 
 template <class S>
-void test0()
-{
-    test(S(""), S(""), 0, 0);
-    test(S(""), S("abcde"), 0, S::npos);
-    test(S(""), S("abcdeabcde"), 0, S::npos);
-    test(S(""), S("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S(""), S(""), 1, 0);
-    test(S(""), S("abcde"), 1, S::npos);
-    test(S(""), S("abcdeabcde"), 1, S::npos);
-    test(S(""), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcde"), S(""), 0, 0);
-    test(S("abcde"), S("abcde"), 0, 0);
-    test(S("abcde"), S("abcdeabcde"), 0, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S("abcde"), S(""), 1, 1);
-    test(S("abcde"), S("abcde"), 1, 0);
-    test(S("abcde"), S("abcdeabcde"), 1, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcde"), S(""), 2, 2);
-    test(S("abcde"), S("abcde"), 2, 0);
-    test(S("abcde"), S("abcdeabcde"), 2, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 2, S::npos);
-    test(S("abcde"), S(""), 4, 4);
-    test(S("abcde"), S("abcde"), 4, 0);
-    test(S("abcde"), S("abcdeabcde"), 4, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 4, S::npos);
-    test(S("abcde"), S(""), 5, 5);
-    test(S("abcde"), S("abcde"), 5, 0);
-    test(S("abcde"), S("abcdeabcde"), 5, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
-    test(S("abcde"), S(""), 6, 5);
-    test(S("abcde"), S("abcde"), 6, 0);
-    test(S("abcde"), S("abcdeabcde"), 6, S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), 6, S::npos);
-    test(S("abcdeabcde"), S(""), 0, 0);
-    test(S("abcdeabcde"), S("abcde"), 0, 0);
-    test(S("abcdeabcde"), S("abcdeabcde"), 0, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
-    test(S("abcdeabcde"), S(""), 1, 1);
-    test(S("abcdeabcde"), S("abcde"), 1, 0);
-    test(S("abcdeabcde"), S("abcdeabcde"), 1, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
-    test(S("abcdeabcde"), S(""), 5, 5);
-    test(S("abcdeabcde"), S("abcde"), 5, 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 5, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
-    test(S("abcdeabcde"), S(""), 9, 9);
-    test(S("abcdeabcde"), S("abcde"), 9, 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 9, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 9, S::npos);
-    test(S("abcdeabcde"), S(""), 10, 10);
-    test(S("abcdeabcde"), S("abcde"), 10, 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 10, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos);
-    test(S("abcdeabcde"), S(""), 11, 10);
-    test(S("abcdeabcde"), S("abcde"), 11, 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 11, 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 11, S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, 0);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 1, 1);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, 0);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, 0);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 19, 19);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 19, 15);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 19, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 19, 0);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 20, 20);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 20, 15);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 20, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 20, 0);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 21, 20);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 21, 15);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 21, 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 21, 0);
+void test0() {
+  test(S(""), S(""), 0, 0);
+  test(S(""), S("abcde"), 0, S::npos);
+  test(S(""), S("abcdeabcde"), 0, S::npos);
+  test(S(""), S("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S(""), S(""), 1, 0);
+  test(S(""), S("abcde"), 1, S::npos);
+  test(S(""), S("abcdeabcde"), 1, S::npos);
+  test(S(""), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcde"), S(""), 0, 0);
+  test(S("abcde"), S("abcde"), 0, 0);
+  test(S("abcde"), S("abcdeabcde"), 0, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S("abcde"), S(""), 1, 1);
+  test(S("abcde"), S("abcde"), 1, 0);
+  test(S("abcde"), S("abcdeabcde"), 1, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcde"), S(""), 2, 2);
+  test(S("abcde"), S("abcde"), 2, 0);
+  test(S("abcde"), S("abcdeabcde"), 2, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 2, S::npos);
+  test(S("abcde"), S(""), 4, 4);
+  test(S("abcde"), S("abcde"), 4, 0);
+  test(S("abcde"), S("abcdeabcde"), 4, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 4, S::npos);
+  test(S("abcde"), S(""), 5, 5);
+  test(S("abcde"), S("abcde"), 5, 0);
+  test(S("abcde"), S("abcdeabcde"), 5, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
+  test(S("abcde"), S(""), 6, 5);
+  test(S("abcde"), S("abcde"), 6, 0);
+  test(S("abcde"), S("abcdeabcde"), 6, S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), 6, S::npos);
+  test(S("abcdeabcde"), S(""), 0, 0);
+  test(S("abcdeabcde"), S("abcde"), 0, 0);
+  test(S("abcdeabcde"), S("abcdeabcde"), 0, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos);
+  test(S("abcdeabcde"), S(""), 1, 1);
+  test(S("abcdeabcde"), S("abcde"), 1, 0);
+  test(S("abcdeabcde"), S("abcdeabcde"), 1, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos);
+  test(S("abcdeabcde"), S(""), 5, 5);
+  test(S("abcdeabcde"), S("abcde"), 5, 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 5, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos);
+  test(S("abcdeabcde"), S(""), 9, 9);
+  test(S("abcdeabcde"), S("abcde"), 9, 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 9, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 9, S::npos);
+  test(S("abcdeabcde"), S(""), 10, 10);
+  test(S("abcdeabcde"), S("abcde"), 10, 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 10, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos);
+  test(S("abcdeabcde"), S(""), 11, 10);
+  test(S("abcdeabcde"), S("abcde"), 11, 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 11, 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 11, S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, 0);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 1, 1);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, 0);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, 0);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 19, 19);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 19, 15);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 19, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 19, 0);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 20, 20);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 20, 15);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 20, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 20, 0);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 21, 20);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 21, 15);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 21, 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 21, 0);
 }
 
 template <class S>
-void test1()
-{
-    test(S(""), S(""), 0);
-    test(S(""), S("abcde"), S::npos);
-    test(S(""), S("abcdeabcde"), S::npos);
-    test(S(""), S("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcde"), S(""), 5);
-    test(S("abcde"), S("abcde"), 0);
-    test(S("abcde"), S("abcdeabcde"), S::npos);
-    test(S("abcde"), S("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcdeabcde"), S(""), 10);
-    test(S("abcdeabcde"), S("abcde"), 5);
-    test(S("abcdeabcde"), S("abcdeabcde"), 0);
-    test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), S::npos);
-    test(S("abcdeabcdeabcdeabcde"), S(""), 20);
-    test(S("abcdeabcdeabcdeabcde"), S("abcde"), 15);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10);
-    test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0);
+void test1() {
+  test(S(""), S(""), 0);
+  test(S(""), S("abcde"), S::npos);
+  test(S(""), S("abcdeabcde"), S::npos);
+  test(S(""), S("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcde"), S(""), 5);
+  test(S("abcde"), S("abcde"), 0);
+  test(S("abcde"), S("abcdeabcde"), S::npos);
+  test(S("abcde"), S("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcdeabcde"), S(""), 10);
+  test(S("abcdeabcde"), S("abcde"), 5);
+  test(S("abcdeabcde"), S("abcdeabcde"), 0);
+  test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), S::npos);
+  test(S("abcdeabcdeabcdeabcde"), S(""), 20);
+  test(S("abcdeabcdeabcdeabcde"), S("abcde"), 15);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10);
+  test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view S;
     test0<S>();
     test1<S>();
-    }
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
 
-    static_assert (sv1.rfind(sv1) == 0, "" );
-    static_assert (sv1.rfind(sv2) == SV::npos, "" );
-    static_assert (sv2.rfind(sv1) == 5, "" );
-    static_assert (sv2.rfind(sv2) == 0, "" );
-    static_assert (sv2.rfind(sv2, 1) == 0, "" );
-    }
+    static_assert(sv1.rfind(sv1) == 0, "");
+    static_assert(sv1.rfind(sv2) == SV::npos, "");
+    static_assert(sv2.rfind(sv1) == 5, "");
+    static_assert(sv2.rfind(sv2) == 0, "");
+    static_assert(sv2.rfind(sv2, 1) == 0, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.hash/char_type.hash.verify.cpp b/libcxx/test/std/strings/string.view/string.view.hash/char_type.hash.verify.cpp
index c81b61b527e69f1..da59228288f706a 100644
--- a/libcxx/test/std/strings/string.view/string.view.hash/char_type.hash.verify.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.hash/char_type.hash.verify.cpp
@@ -21,57 +21,50 @@
 template <class _CharT>
 struct trait // copied from <__string>
 {
-    typedef _CharT         char_type;
-    typedef int            int_type;
-    typedef std::streamoff off_type;
-    typedef std::streampos pos_type;
-    typedef std::mbstate_t state_type;
+  typedef _CharT char_type;
+  typedef int int_type;
+  typedef std::streamoff off_type;
+  typedef std::streampos pos_type;
+  typedef std::mbstate_t state_type;
 
-    static inline void assign(char_type& __c1, const char_type& __c2) {
-        __c1 = __c2;
-    }
-    static inline bool eq(char_type __c1, char_type __c2) { return __c1 == __c2; }
-    static inline bool lt(char_type __c1, char_type __c2) { return __c1 < __c2; }
+  static inline void assign(char_type& __c1, const char_type& __c2) { __c1 = __c2; }
+  static inline bool eq(char_type __c1, char_type __c2) { return __c1 == __c2; }
+  static inline bool lt(char_type __c1, char_type __c2) { return __c1 < __c2; }
 
-    static int compare(const char_type* __s1, const char_type* __s2, std::size_t __n);
-    static std::size_t length(const char_type* __s);
-    static const char_type* find(const char_type* __s, std::size_t __n,
-                                 const char_type& __a);
+  static int compare(const char_type* __s1, const char_type* __s2, std::size_t __n);
+  static std::size_t length(const char_type* __s);
+  static const char_type* find(const char_type* __s, std::size_t __n, const char_type& __a);
 
-    static char_type* move(char_type* __s1, const char_type* __s2, std::size_t __n);
-    static char_type* copy(char_type* __s1, const char_type* __s2, std::size_t __n);
-    static char_type* assign(char_type* __s, std::size_t __n, char_type __a);
+  static char_type* move(char_type* __s1, const char_type* __s2, std::size_t __n);
+  static char_type* copy(char_type* __s1, const char_type* __s2, std::size_t __n);
+  static char_type* assign(char_type* __s, std::size_t __n, char_type __a);
 
-    static inline int_type not_eof(int_type __c) {
-        return eq_int_type(__c, eof()) ? ~eof() : __c;
-    }
-    static inline char_type to_char_type(int_type __c) { return char_type(__c); }
-    static inline int_type to_int_type(char_type __c) { return int_type(__c); }
-    static inline bool eq_int_type(int_type __c1, int_type __c2) {
-        return __c1 == __c2;
-    }
-    static inline int_type eof() { return int_type(EOF); }
+  static inline int_type not_eof(int_type __c) { return eq_int_type(__c, eof()) ? ~eof() : __c; }
+  static inline char_type to_char_type(int_type __c) { return char_type(__c); }
+  static inline int_type to_int_type(char_type __c) { return int_type(__c); }
+  static inline bool eq_int_type(int_type __c1, int_type __c2) { return __c1 == __c2; }
+  static inline int_type eof() { return int_type(EOF); }
 };
 
 template <class CharT>
 void test() {
-    typedef std::basic_string_view<CharT, trait<CharT> > strv_t;
-    std::hash<strv_t>
-        h; // expected-error-re 4 {{{{call to implicitly-deleted default constructor of 'std::hash<strv_t>'|implicit instantiation of undefined template}} {{.+}}}}}}
+  typedef std::basic_string_view<CharT, trait<CharT> > strv_t;
+  std::hash<strv_t>
+      h; // expected-error-re 4 {{{{call to implicitly-deleted default constructor of 'std::hash<strv_t>'|implicit instantiation of undefined template}} {{.+}}}}}}
 #if TEST_STD_VER > 17 && defined(__cpp_char8_t)
-    // expected-error-re at -2 {{{{call to implicitly-deleted default constructor of 'std::hash<strv_t>'|implicit instantiation of undefined template}} {{.+}}}}}}
+  // expected-error-re at -2 {{{{call to implicitly-deleted default constructor of 'std::hash<strv_t>'|implicit instantiation of undefined template}} {{.+}}}}}}
 #endif
-    (void)h;
+  (void)h;
 }
 
 int main(int, char**) {
-    test<char>();
-    test<wchar_t>();
+  test<char>();
+  test<wchar_t>();
 #if TEST_STD_VER > 17 && defined(__cpp_char8_t)
-    test<char8_t>();
+  test<char8_t>();
 #endif
-    test<char16_t>();
-    test<char32_t>();
+  test<char16_t>();
+  test<char32_t>();
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.hash/enabled_hashes.pass.cpp b/libcxx/test/std/strings/string.view/string.view.hash/enabled_hashes.pass.cpp
index f0fffbd32e7aec9..b2ffd20108389ed 100644
--- a/libcxx/test/std/strings/string.view/string.view.hash/enabled_hashes.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.hash/enabled_hashes.pass.cpp
@@ -36,18 +36,18 @@ struct std::char_traits<MyChar> {
   static bool eq(char_type, char_type);
   static bool lt(char_type, char_type);
 
-  static int              compare(const char_type*, const char_type*, std::size_t);
-  static std::size_t           length(const char_type*);
+  static int compare(const char_type*, const char_type*, std::size_t);
+  static std::size_t length(const char_type*);
   static const char_type* find(const char_type*, std::size_t, const char_type&);
-  static char_type*       move(char_type*, const char_type*, std::size_t);
-  static char_type*       copy(char_type*, const char_type*, std::size_t);
-  static char_type*       assign(char_type*, std::size_t, char_type);
+  static char_type* move(char_type*, const char_type*, std::size_t);
+  static char_type* copy(char_type*, const char_type*, std::size_t);
+  static char_type* assign(char_type*, std::size_t, char_type);
 
-  static int_type  not_eof(int_type);
+  static int_type not_eof(int_type);
   static char_type to_char_type(int_type);
-  static int_type  to_int_type(char_type);
-  static bool      eq_int_type(int_type, int_type);
-  static int_type  eof();
+  static int_type to_int_type(char_type);
+  static bool eq_int_type(int_type, int_type);
+  static int_type eof();
 };
 
 int main(int, char**) {

diff  --git a/libcxx/test/std/strings/string.view/string.view.hash/string_view.pass.cpp b/libcxx/test/std/strings/string.view/string.view.hash/string_view.pass.cpp
index 44b72ce780d6177..981c83423ba0a1e 100644
--- a/libcxx/test/std/strings/string.view/string.view.hash/string_view.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.hash/string_view.pass.cpp
@@ -28,46 +28,43 @@
 using std::string_view;
 
 template <class SV>
-void
-test()
-{
-    typedef std::hash<SV> H;
+void test() {
+  typedef std::hash<SV> H;
 #if TEST_STD_VER <= 14
-    static_assert((std::is_same<typename H::argument_type, SV>::value), "" );
-    static_assert((std::is_same<typename H::result_type, std::size_t>::value), "" );
+  static_assert((std::is_same<typename H::argument_type, SV>::value), "");
+  static_assert((std::is_same<typename H::result_type, std::size_t>::value), "");
 #endif
 
-    typedef typename SV::value_type char_type;
-    typedef std::basic_string<char_type> String;
-    typedef std::hash<String> SH;
-    ASSERT_NOEXCEPT(H()(SV()));
+  typedef typename SV::value_type char_type;
+  typedef std::basic_string<char_type> String;
+  typedef std::hash<String> SH;
+  ASSERT_NOEXCEPT(H()(SV()));
 
-    char_type g1 [ 10 ];
-    char_type g2 [ 10 ];
-    for ( int i = 0; i < 10; ++i )
-        g1[i] = g2[9-i] = static_cast<char_type>('0' + i);
-    H h;
-    SH sh;
-    SV s1(g1, 10);
-    String ss1(s1);
-    SV s2(g2, 10);
-    String ss2(s2);
-    assert(h(s1) == h(s1));
-    assert(h(s1) != h(s2));
-    assert(sh(ss1) == h(s1));
-    assert(sh(ss2) == h(s2));
+  char_type g1[10];
+  char_type g2[10];
+  for (int i = 0; i < 10; ++i)
+    g1[i] = g2[9 - i] = static_cast<char_type>('0' + i);
+  H h;
+  SH sh;
+  SV s1(g1, 10);
+  String ss1(s1);
+  SV s2(g2, 10);
+  String ss2(s2);
+  assert(h(s1) == h(s1));
+  assert(h(s1) != h(s2));
+  assert(sh(ss1) == h(s1));
+  assert(sh(ss2) == h(s2));
 }
 
-int main(int, char**)
-{
-    test<std::string_view>();
+int main(int, char**) {
+  test<std::string_view>();
 #ifndef TEST_HAS_NO_CHAR8_T
-    test<std::u8string_view>();
+  test<std::u8string_view>();
 #endif
-    test<std::u16string_view>();
-    test<std::u32string_view>();
+  test<std::u16string_view>();
+  test<std::u32string_view>();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test<std::wstring_view>();
+  test<std::wstring_view>();
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.io/stream_insert.pass.cpp b/libcxx/test/std/strings/string.view/string.view.io/stream_insert.pass.cpp
index 083b84a61a679b9..c7772b031dbebc0 100644
--- a/libcxx/test/std/strings/string.view/string.view.io/stream_insert.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.io/stream_insert.pass.cpp
@@ -22,41 +22,40 @@
 
 #include "test_macros.h"
 
-int main(int, char**)
-{
-    {
-        std::ostringstream out;
-        std::string_view sv("some text");
-        out << sv;
-        assert(out.good());
-        assert(sv == out.str());
-    }
-    {
-        std::ostringstream out;
-        std::string s("some text");
-        std::string_view sv(s);
-        out.width(12);
-        out << sv;
-        assert(out.good());
-        assert("   " + s == out.str());
-    }
+int main(int, char**) {
+  {
+    std::ostringstream out;
+    std::string_view sv("some text");
+    out << sv;
+    assert(out.good());
+    assert(sv == out.str());
+  }
+  {
+    std::ostringstream out;
+    std::string s("some text");
+    std::string_view sv(s);
+    out.width(12);
+    out << sv;
+    assert(out.good());
+    assert("   " + s == out.str());
+  }
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
-        std::wostringstream out;
-        std::wstring_view sv(L"some text");
-        out << sv;
-        assert(out.good());
-        assert(sv == out.str());
-    }
-    {
-        std::wostringstream out;
-        std::wstring s(L"some text");
-        std::wstring_view sv(s);
-        out.width(12);
-        out << sv;
-        assert(out.good());
-        assert(L"   " + s == out.str());
-    }
+  {
+    std::wostringstream out;
+    std::wstring_view sv(L"some text");
+    out << sv;
+    assert(out.good());
+    assert(sv == out.str());
+  }
+  {
+    std::wostringstream out;
+    std::wstring s(L"some text");
+    std::wstring_view sv(s);
+    out.width(12);
+    out << sv;
+    assert(out.good());
+    assert(L"   " + s == out.str());
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.io/stream_insert_decl_present.compile.pass.cpp b/libcxx/test/std/strings/string.view/string.view.io/stream_insert_decl_present.compile.pass.cpp
index 9698ba514069bc1..6f39ade8c898452 100644
--- a/libcxx/test/std/strings/string.view/string.view.io/stream_insert_decl_present.compile.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.io/stream_insert_decl_present.compile.pass.cpp
@@ -22,6 +22,7 @@
 template <class SV, class = void>
 struct HasDecl : std::false_type {};
 template <class SV>
-struct HasDecl<SV, decltype(static_cast<void>(std::declval<std::ostream&>() << std::declval<SV&>()))> : std::true_type {};
+struct HasDecl<SV, decltype(static_cast<void>(std::declval<std::ostream&>() << std::declval<SV&>()))> : std::true_type {
+};
 
 static_assert(HasDecl<std::string_view>::value, "streaming operator declaration not present");

diff  --git a/libcxx/test/std/strings/string.view/string.view.iterators/begin.pass.cpp b/libcxx/test/std/strings/string.view/string.view.iterators/begin.pass.cpp
index 73007fc4c32a2f5..ed39c6e2c7e0efc 100644
--- a/libcxx/test/std/strings/string.view/string.view.iterators/begin.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.iterators/begin.pass.cpp
@@ -18,87 +18,81 @@
 #include "test_macros.h"
 
 template <class S>
-void
-test(S s)
-{
-    const S& cs = s;
-    typename S::iterator b = s.begin();
-    typename S::const_iterator cb1 = cs.begin();
-    typename S::const_iterator cb2 = s.cbegin();
-    if (!s.empty())
-    {
-        assert(   *b ==  s[0]);
-        assert(  &*b == &s[0]);
-        assert( *cb1 ==  s[0]);
-        assert(&*cb1 == &s[0]);
-        assert( *cb2 ==  s[0]);
-        assert(&*cb2 == &s[0]);
-
-    }
-    assert(  b == cb1);
-    assert(  b == cb2);
-    assert(cb1 == cb2);
+void test(S s) {
+  const S& cs                    = s;
+  typename S::iterator b         = s.begin();
+  typename S::const_iterator cb1 = cs.begin();
+  typename S::const_iterator cb2 = s.cbegin();
+  if (!s.empty()) {
+    assert(*b == s[0]);
+    assert(&*b == &s[0]);
+    assert(*cb1 == s[0]);
+    assert(&*cb1 == &s[0]);
+    assert(*cb2 == s[0]);
+    assert(&*cb2 == &s[0]);
+  }
+  assert(b == cb1);
+  assert(b == cb2);
+  assert(cb1 == cb2);
 }
 
-
-int main(int, char**)
-{
-    typedef std::string_view    string_view;
+int main(int, char**) {
+  typedef std::string_view string_view;
 #ifndef TEST_HAS_NO_CHAR8_T
-    typedef std::u8string_view  u8string_view;
+  typedef std::u8string_view u8string_view;
 #endif
-    typedef std::u16string_view u16string_view;
-    typedef std::u32string_view u32string_view;
+  typedef std::u16string_view u16string_view;
+  typedef std::u32string_view u32string_view;
 
-    test(string_view   ());
-    test(u16string_view());
-    test(u32string_view());
-    test(string_view   ( "123"));
+  test(string_view());
+  test(u16string_view());
+  test(u32string_view());
+  test(string_view("123"));
 #ifndef TEST_HAS_NO_CHAR8_T
-    test(u8string_view{u8"123"});
+  test(u8string_view{u8"123"});
 #endif
 #if TEST_STD_VER >= 11
-    test(u16string_view{u"123"});
-    test(u32string_view{U"123"});
+  test(u16string_view{u"123"});
+  test(u32string_view{U"123"});
 #endif
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    typedef std::wstring_view   wstring_view;
-    test(wstring_view  ());
-    test(wstring_view  (L"123"));
+  typedef std::wstring_view wstring_view;
+  test(wstring_view());
+  test(wstring_view(L"123"));
 #endif
 
 #if TEST_STD_VER > 11
-    {
-    constexpr string_view       sv { "123", 3 };
+  {
+    constexpr string_view sv{"123", 3};
 #  ifndef TEST_HAS_NO_CHAR8_T
-    constexpr u8string_view u8sv  {u8"123", 3 };
-#endif
-    constexpr u16string_view u16sv {u"123", 3 };
-    constexpr u32string_view u32sv {U"123", 3 };
+    constexpr u8string_view u8sv{u8"123", 3};
+#  endif
+    constexpr u16string_view u16sv{u"123", 3};
+    constexpr u32string_view u32sv{U"123", 3};
 
-    static_assert (    *sv.begin() ==    sv[0], "" );
+    static_assert(*sv.begin() == sv[0], "");
 #  ifndef TEST_HAS_NO_CHAR8_T
-    static_assert (  *u8sv.begin() ==  u8sv[0], "" );
-#endif
-    static_assert ( *u16sv.begin() == u16sv[0], "" );
-    static_assert ( *u32sv.begin() == u32sv[0], "" );
+    static_assert(*u8sv.begin() == u8sv[0], "");
+#  endif
+    static_assert(*u16sv.begin() == u16sv[0], "");
+    static_assert(*u32sv.begin() == u32sv[0], "");
 
-    static_assert (    *sv.cbegin() ==    sv[0], "" );
+    static_assert(*sv.cbegin() == sv[0], "");
 #  ifndef TEST_HAS_NO_CHAR8_T
-    static_assert (  *u8sv.cbegin() ==  u8sv[0], "" );
-#endif
-    static_assert ( *u16sv.cbegin() == u16sv[0], "" );
-    static_assert ( *u32sv.cbegin() == u32sv[0], "" );
+    static_assert(*u8sv.cbegin() == u8sv[0], "");
+#  endif
+    static_assert(*u16sv.cbegin() == u16sv[0], "");
+    static_assert(*u32sv.cbegin() == u32sv[0], "");
 
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        {
-            constexpr wstring_view     wsv {L"123", 3 };
-            static_assert (   *wsv.begin() ==   wsv[0], "" );
-            static_assert (   *wsv.cbegin() ==   wsv[0], "" );
-        }
-#endif
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+    {
+      constexpr wstring_view wsv{L"123", 3};
+      static_assert(*wsv.begin() == wsv[0], "");
+      static_assert(*wsv.cbegin() == wsv[0], "");
     }
+#  endif
+  }
 #endif // TEST_STD_VER > 11
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.iterators/end.pass.cpp b/libcxx/test/std/strings/string.view/string.view.iterators/end.pass.cpp
index 70e30e0fdfa3d96..da04ab4525bcee7 100644
--- a/libcxx/test/std/strings/string.view/string.view.iterators/end.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.iterators/end.pass.cpp
@@ -19,95 +19,88 @@
 #include "test_macros.h"
 
 template <class S>
-void
-test(S s)
-{
-    const S& cs = s;
-    typename S::iterator e = s.end();
-    typename S::const_iterator ce1 = cs.end();
-    typename S::const_iterator ce2 = s.cend();
-
-    if (s.empty())
-    {
-        assert(  e ==  s.begin());
-        assert(ce1 == cs.begin());
-        assert(ce2 ==  s.begin());
-    }
-    else
-    {
-        assert(  e !=  s.begin());
-        assert(ce1 != cs.begin());
-        assert(ce2 !=  s.begin());
-    }
-
-    assert(static_cast<std::size_t>(  e -  s.begin()) == s.size());
-    assert(static_cast<std::size_t>(ce1 - cs.begin()) == cs.size());
-    assert(static_cast<std::size_t>(ce2 - s.cbegin()) == s.size());
-
-    assert(  e == ce1);
-    assert(  e == ce2);
-    assert(ce1 == ce2);
+void test(S s) {
+  const S& cs                    = s;
+  typename S::iterator e         = s.end();
+  typename S::const_iterator ce1 = cs.end();
+  typename S::const_iterator ce2 = s.cend();
+
+  if (s.empty()) {
+    assert(e == s.begin());
+    assert(ce1 == cs.begin());
+    assert(ce2 == s.begin());
+  } else {
+    assert(e != s.begin());
+    assert(ce1 != cs.begin());
+    assert(ce2 != s.begin());
+  }
+
+  assert(static_cast<std::size_t>(e - s.begin()) == s.size());
+  assert(static_cast<std::size_t>(ce1 - cs.begin()) == cs.size());
+  assert(static_cast<std::size_t>(ce2 - s.cbegin()) == s.size());
+
+  assert(e == ce1);
+  assert(e == ce2);
+  assert(ce1 == ce2);
 }
 
-
-int main(int, char**)
-{
-    typedef std::string_view    string_view;
+int main(int, char**) {
+  typedef std::string_view string_view;
 #ifndef TEST_HAS_NO_CHAR8_T
-    typedef std::u8string_view  u8string_view;
+  typedef std::u8string_view u8string_view;
 #endif
-    typedef std::u16string_view u16string_view;
-    typedef std::u32string_view u32string_view;
+  typedef std::u16string_view u16string_view;
+  typedef std::u32string_view u32string_view;
 
-    test(string_view   ());
-    test(u16string_view());
-    test(u32string_view());
-    test(string_view   ( "123"));
+  test(string_view());
+  test(u16string_view());
+  test(u32string_view());
+  test(string_view("123"));
 #ifndef TEST_HAS_NO_CHAR8_T
-    test(u8string_view{u8"123"});
+  test(u8string_view{u8"123"});
 #endif
 #if TEST_STD_VER >= 11
-    test(u16string_view{u"123"});
-    test(u32string_view{U"123"});
+  test(u16string_view{u"123"});
+  test(u32string_view{U"123"});
 #endif
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    typedef std::wstring_view   wstring_view;
-    test(wstring_view  ());
-    test(wstring_view  (L"123"));
+  typedef std::wstring_view wstring_view;
+  test(wstring_view());
+  test(wstring_view(L"123"));
 #endif
 
 #if TEST_STD_VER > 11
-    {
-    constexpr string_view       sv { "123", 3 };
+  {
+    constexpr string_view sv{"123", 3};
 #  ifndef TEST_HAS_NO_CHAR8_T
-    constexpr u8string_view u8sv  {u8"123", 3 };
-#endif
-    constexpr u16string_view u16sv {u"123", 3 };
-    constexpr u32string_view u32sv {U"123", 3 };
+    constexpr u8string_view u8sv{u8"123", 3};
+#  endif
+    constexpr u16string_view u16sv{u"123", 3};
+    constexpr u32string_view u32sv{U"123", 3};
 
-    static_assert (    sv.begin() !=    sv.end(), "" );
+    static_assert(sv.begin() != sv.end(), "");
 #  ifndef TEST_HAS_NO_CHAR8_T
-    static_assert (  u8sv.begin() !=  u8sv.end(), "" );
-#endif
-    static_assert ( u16sv.begin() != u16sv.end(), "" );
-    static_assert ( u32sv.begin() != u32sv.end(), "" );
+    static_assert(u8sv.begin() != u8sv.end(), "");
+#  endif
+    static_assert(u16sv.begin() != u16sv.end(), "");
+    static_assert(u32sv.begin() != u32sv.end(), "");
 
-    static_assert (    sv.begin() !=    sv.cend(), "" );
+    static_assert(sv.begin() != sv.cend(), "");
 #  ifndef TEST_HAS_NO_CHAR8_T
-    static_assert (  u8sv.begin() !=  u8sv.cend(), "" );
-#endif
-    static_assert ( u16sv.begin() != u16sv.cend(), "" );
-    static_assert ( u32sv.begin() != u32sv.cend(), "" );
+    static_assert(u8sv.begin() != u8sv.cend(), "");
+#  endif
+    static_assert(u16sv.begin() != u16sv.cend(), "");
+    static_assert(u32sv.begin() != u32sv.cend(), "");
 
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        {
-            constexpr wstring_view     wsv {L"123", 3 };
-            static_assert (   wsv.begin() !=   wsv.end(), "" );
-            static_assert (   wsv.begin() !=   wsv.cend(), "" );
-        }
-#endif
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+    {
+      constexpr wstring_view wsv{L"123", 3};
+      static_assert(wsv.begin() != wsv.end(), "");
+      static_assert(wsv.begin() != wsv.cend(), "");
     }
+#  endif
+  }
 #endif // TEST_STD_VER > 11
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp
index bd49f87ff54afc6..7e148f32f8946b4 100644
--- a/libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.iterators/iterator_concept_conformance.compile.pass.cpp
@@ -16,9 +16,9 @@
 
 #include "test_macros.h"
 
-using iterator = std::string_view::iterator;
-using const_iterator = std::string_view::const_iterator;
-using reverse_iterator = std::string_view::reverse_iterator;
+using iterator               = std::string_view::iterator;
+using const_iterator         = std::string_view::const_iterator;
+using reverse_iterator       = std::string_view::reverse_iterator;
 using const_reverse_iterator = std::string_view::const_reverse_iterator;
 
 static_assert(std::contiguous_iterator<iterator>);

diff  --git a/libcxx/test/std/strings/string.view/string.view.iterators/rbegin.pass.cpp b/libcxx/test/std/strings/string.view/string.view.iterators/rbegin.pass.cpp
index e5f0db5ffbf2472..38ccbda2179ff18 100644
--- a/libcxx/test/std/strings/string.view/string.view.iterators/rbegin.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.iterators/rbegin.pass.cpp
@@ -18,88 +18,82 @@
 #include "test_macros.h"
 
 template <class S>
-void
-test(S s)
-{
-    const S& cs = s;
-    typename S::reverse_iterator b = s.rbegin();
-    typename S::const_reverse_iterator cb1 = cs.rbegin();
-    typename S::const_reverse_iterator cb2 = s.crbegin();
-    if (!s.empty())
-    {
-        const std::size_t last = s.size() - 1;
-        assert(   *b ==  s[last]);
-        assert(  &*b == &s[last]);
-        assert( *cb1 ==  s[last]);
-        assert(&*cb1 == &s[last]);
-        assert( *cb2 ==  s[last]);
-        assert(&*cb2 == &s[last]);
-
-    }
-    assert(  b == cb1);
-    assert(  b == cb2);
-    assert(cb1 == cb2);
+void test(S s) {
+  const S& cs                            = s;
+  typename S::reverse_iterator b         = s.rbegin();
+  typename S::const_reverse_iterator cb1 = cs.rbegin();
+  typename S::const_reverse_iterator cb2 = s.crbegin();
+  if (!s.empty()) {
+    const std::size_t last = s.size() - 1;
+    assert(*b == s[last]);
+    assert(&*b == &s[last]);
+    assert(*cb1 == s[last]);
+    assert(&*cb1 == &s[last]);
+    assert(*cb2 == s[last]);
+    assert(&*cb2 == &s[last]);
+  }
+  assert(b == cb1);
+  assert(b == cb2);
+  assert(cb1 == cb2);
 }
 
-
-int main(int, char**)
-{
-    typedef std::string_view    string_view;
+int main(int, char**) {
+  typedef std::string_view string_view;
 #ifndef TEST_HAS_NO_CHAR8_T
-    typedef std::u8string_view  u8string_view;
+  typedef std::u8string_view u8string_view;
 #endif
-    typedef std::u16string_view u16string_view;
-    typedef std::u32string_view u32string_view;
+  typedef std::u16string_view u16string_view;
+  typedef std::u32string_view u32string_view;
 
-    test(string_view   ());
-    test(u16string_view());
-    test(u32string_view());
-    test(string_view   ( "123"));
+  test(string_view());
+  test(u16string_view());
+  test(u32string_view());
+  test(string_view("123"));
 #ifndef TEST_HAS_NO_CHAR8_T
-    test(u8string_view{u8"123"});
+  test(u8string_view{u8"123"});
 #endif
 #if TEST_STD_VER >= 11
-    test(u16string_view{u"123"});
-    test(u32string_view{U"123"});
+  test(u16string_view{u"123"});
+  test(u32string_view{U"123"});
 #endif
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    typedef std::wstring_view   wstring_view;
-    test(wstring_view  ());
-    test(wstring_view  (L"123"));
+  typedef std::wstring_view wstring_view;
+  test(wstring_view());
+  test(wstring_view(L"123"));
 #endif
 
 #if TEST_STD_VER > 14
-    {
-    constexpr string_view       sv { "123", 3 };
+  {
+    constexpr string_view sv{"123", 3};
 #  ifndef TEST_HAS_NO_CHAR8_T
-    constexpr u8string_view u8sv  {u8"123", 3 };
-#endif
-    constexpr u16string_view u16sv {u"123", 3 };
-    constexpr u32string_view u32sv {U"123", 3 };
+    constexpr u8string_view u8sv{u8"123", 3};
+#  endif
+    constexpr u16string_view u16sv{u"123", 3};
+    constexpr u32string_view u32sv{U"123", 3};
 
-    static_assert (    *sv.rbegin() ==    sv[2], "" );
+    static_assert(*sv.rbegin() == sv[2], "");
 #  ifndef TEST_HAS_NO_CHAR8_T
-    static_assert (  *u8sv.rbegin() ==  u8sv[2], "" );
-#endif
-    static_assert ( *u16sv.rbegin() == u16sv[2], "" );
-    static_assert ( *u32sv.rbegin() == u32sv[2], "" );
+    static_assert(*u8sv.rbegin() == u8sv[2], "");
+#  endif
+    static_assert(*u16sv.rbegin() == u16sv[2], "");
+    static_assert(*u32sv.rbegin() == u32sv[2], "");
 
-    static_assert (    *sv.crbegin() ==    sv[2], "" );
+    static_assert(*sv.crbegin() == sv[2], "");
 #  ifndef TEST_HAS_NO_CHAR8_T
-    static_assert (  *u8sv.crbegin() == u8sv[2], "" );
-#endif
-    static_assert ( *u16sv.crbegin() == u16sv[2], "" );
-    static_assert ( *u32sv.crbegin() == u32sv[2], "" );
+    static_assert(*u8sv.crbegin() == u8sv[2], "");
+#  endif
+    static_assert(*u16sv.crbegin() == u16sv[2], "");
+    static_assert(*u32sv.crbegin() == u32sv[2], "");
 
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        {
-            constexpr wstring_view     wsv {L"123", 3 };
-            static_assert (   *wsv.rbegin() ==   wsv[2], "" );
-            static_assert (   *wsv.crbegin() ==   wsv[2], "" );
-        }
-#endif
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+    {
+      constexpr wstring_view wsv{L"123", 3};
+      static_assert(*wsv.rbegin() == wsv[2], "");
+      static_assert(*wsv.crbegin() == wsv[2], "");
     }
+#  endif
+  }
 #endif // TEST_STD_VER > 14
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.iterators/rend.pass.cpp b/libcxx/test/std/strings/string.view/string.view.iterators/rend.pass.cpp
index 481d623eb715a18..196639f985edb22 100644
--- a/libcxx/test/std/strings/string.view/string.view.iterators/rend.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.iterators/rend.pass.cpp
@@ -19,95 +19,88 @@
 #include "test_macros.h"
 
 template <class S>
-void
-test(S s)
-{
-    const S& cs = s;
-    typename S::reverse_iterator e = s.rend();
-    typename S::const_reverse_iterator ce1 = cs.rend();
-    typename S::const_reverse_iterator ce2 = s.crend();
-
-    if (s.empty())
-    {
-        assert(  e ==  s.rbegin());
-        assert(ce1 == cs.rbegin());
-        assert(ce2 ==  s.rbegin());
-    }
-    else
-    {
-        assert(  e !=  s.rbegin());
-        assert(ce1 != cs.rbegin());
-        assert(ce2 !=  s.rbegin());
-    }
-
-    assert(static_cast<std::size_t>(  e -  s.rbegin()) == s.size());
-    assert(static_cast<std::size_t>(ce1 - cs.rbegin()) == cs.size());
-    assert(static_cast<std::size_t>(ce2 - s.crbegin()) == s.size());
-
-    assert(  e == ce1);
-    assert(  e == ce2);
-    assert(ce1 == ce2);
+void test(S s) {
+  const S& cs                            = s;
+  typename S::reverse_iterator e         = s.rend();
+  typename S::const_reverse_iterator ce1 = cs.rend();
+  typename S::const_reverse_iterator ce2 = s.crend();
+
+  if (s.empty()) {
+    assert(e == s.rbegin());
+    assert(ce1 == cs.rbegin());
+    assert(ce2 == s.rbegin());
+  } else {
+    assert(e != s.rbegin());
+    assert(ce1 != cs.rbegin());
+    assert(ce2 != s.rbegin());
+  }
+
+  assert(static_cast<std::size_t>(e - s.rbegin()) == s.size());
+  assert(static_cast<std::size_t>(ce1 - cs.rbegin()) == cs.size());
+  assert(static_cast<std::size_t>(ce2 - s.crbegin()) == s.size());
+
+  assert(e == ce1);
+  assert(e == ce2);
+  assert(ce1 == ce2);
 }
 
-
-int main(int, char**)
-{
-    typedef std::string_view    string_view;
+int main(int, char**) {
+  typedef std::string_view string_view;
 #ifndef TEST_HAS_NO_CHAR8_T
-    typedef std::u8string_view u8string_view;
+  typedef std::u8string_view u8string_view;
 #endif
-    typedef std::u16string_view u16string_view;
-    typedef std::u32string_view u32string_view;
+  typedef std::u16string_view u16string_view;
+  typedef std::u32string_view u32string_view;
 
-    test(string_view   ());
-    test(u16string_view());
-    test(u32string_view());
-    test(string_view   ( "123"));
+  test(string_view());
+  test(u16string_view());
+  test(u32string_view());
+  test(string_view("123"));
 #ifndef TEST_HAS_NO_CHAR8_T
-    test(u8string_view{u8"123"});
+  test(u8string_view{u8"123"});
 #endif
 #if TEST_STD_VER >= 11
-    test(u16string_view{u"123"});
-    test(u32string_view{U"123"});
+  test(u16string_view{u"123"});
+  test(u32string_view{U"123"});
 #endif
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    typedef std::wstring_view   wstring_view;
-    test(wstring_view  ());
-    test(wstring_view  (L"123"));
+  typedef std::wstring_view wstring_view;
+  test(wstring_view());
+  test(wstring_view(L"123"));
 #endif
 
 #if TEST_STD_VER > 14
-    {
-    constexpr string_view       sv { "123", 3 };
+  {
+    constexpr string_view sv{"123", 3};
 #  ifndef TEST_HAS_NO_CHAR8_T
-    constexpr u8string_view u8sv {u8"123", 3 };
-#endif
-    constexpr u16string_view u16sv {u"123", 3 };
-    constexpr u32string_view u32sv {U"123", 3 };
+    constexpr u8string_view u8sv{u8"123", 3};
+#  endif
+    constexpr u16string_view u16sv{u"123", 3};
+    constexpr u32string_view u32sv{U"123", 3};
 
-    static_assert (    *--sv.rend() ==    sv[0], "" );
+    static_assert(*--sv.rend() == sv[0], "");
 #  ifndef TEST_HAS_NO_CHAR8_T
-    static_assert (  *--u8sv.rend() ==  u8sv[0], "" );
-#endif
-    static_assert ( *--u16sv.rend() == u16sv[0], "" );
-    static_assert ( *--u32sv.rend() == u32sv[0], "" );
+    static_assert(*--u8sv.rend() == u8sv[0], "");
+#  endif
+    static_assert(*--u16sv.rend() == u16sv[0], "");
+    static_assert(*--u32sv.rend() == u32sv[0], "");
 
-    static_assert (    *--sv.crend() ==    sv[0], "" );
+    static_assert(*--sv.crend() == sv[0], "");
 #  ifndef TEST_HAS_NO_CHAR8_T
-    static_assert (  *--u8sv.crend() ==  u8sv[0], "" );
-#endif
-    static_assert ( *--u16sv.crend() == u16sv[0], "" );
-    static_assert ( *--u32sv.crend() == u32sv[0], "" );
+    static_assert(*--u8sv.crend() == u8sv[0], "");
+#  endif
+    static_assert(*--u16sv.crend() == u16sv[0], "");
+    static_assert(*--u32sv.crend() == u32sv[0], "");
 
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        {
-            constexpr wstring_view     wsv {L"123", 3 };
-            static_assert (   *--wsv.rend() ==   wsv[0], "" );
-            static_assert (   *--wsv.crend() ==   wsv[0], "" );
-        }
-#endif
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+    {
+      constexpr wstring_view wsv{L"123", 3};
+      static_assert(*--wsv.rend() == wsv[0], "");
+      static_assert(*--wsv.crend() == wsv[0], "");
     }
+#  endif
+  }
 #endif // TEST_STD_VER > 14
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.modifiers/remove_prefix.pass.cpp b/libcxx/test/std/strings/string.view/string.view.modifiers/remove_prefix.pass.cpp
index 4e41130a54b6356..4bfa0f38829dda7 100644
--- a/libcxx/test/std/strings/string.view/string.view.modifiers/remove_prefix.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.modifiers/remove_prefix.pass.cpp
@@ -17,64 +17,64 @@
 
 #include "test_macros.h"
 
-template<typename CharT>
-void test ( const CharT *s, std::size_t len ) {
-    typedef std::basic_string_view<CharT> SV;
-    {
-    SV sv1 ( s );
-    assert ( sv1.size() == len );
-    assert ( sv1.data() == s );
+template <typename CharT>
+void test(const CharT* s, std::size_t len) {
+  typedef std::basic_string_view<CharT> SV;
+  {
+    SV sv1(s);
+    assert(sv1.size() == len);
+    assert(sv1.data() == s);
 
-    if ( len > 0 ) {
-        sv1.remove_prefix ( 1 );
-        assert ( sv1.size() == (len - 1));
-        assert ( sv1.data() == (s + 1));
-        sv1.remove_prefix ( len - 1 );
+    if (len > 0) {
+      sv1.remove_prefix(1);
+      assert(sv1.size() == (len - 1));
+      assert(sv1.data() == (s + 1));
+      sv1.remove_prefix(len - 1);
     }
 
-    assert ( sv1.size() == 0 );
-    sv1.remove_prefix ( 0 );
-    assert ( sv1.size() == 0 );
-    }
+    assert(sv1.size() == 0);
+    sv1.remove_prefix(0);
+    assert(sv1.size() == 0);
+  }
 }
 
 #if TEST_STD_VER > 11
-constexpr std::size_t test_ce ( size_t n, size_t k ) {
-    typedef std::basic_string_view<char> SV;
-    SV sv1{ "ABCDEFGHIJKL", n };
-    sv1.remove_prefix ( k );
-    return sv1.size();
+constexpr std::size_t test_ce(size_t n, size_t k) {
+  typedef std::basic_string_view<char> SV;
+  SV sv1{"ABCDEFGHIJKL", n};
+  sv1.remove_prefix(k);
+  return sv1.size();
 }
 #endif
 
 int main(int, char**) {
-    test ( "ABCDE", 5 );
-    test ( "a", 1 );
-    test ( "", 0 );
+  test("ABCDE", 5);
+  test("a", 1);
+  test("", 0);
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test ( L"ABCDE", 5 );
-    test ( L"a", 1 );
-    test ( L"", 0 );
+  test(L"ABCDE", 5);
+  test(L"a", 1);
+  test(L"", 0);
 #endif
 
 #if TEST_STD_VER >= 11
-    test ( u"ABCDE", 5 );
-    test ( u"a", 1 );
-    test ( u"", 0 );
+  test(u"ABCDE", 5);
+  test(u"a", 1);
+  test(u"", 0);
 
-    test ( U"ABCDE", 5 );
-    test ( U"a", 1 );
-    test ( U"", 0 );
+  test(U"ABCDE", 5);
+  test(U"a", 1);
+  test(U"", 0);
 #endif
 
 #if TEST_STD_VER > 11
-    {
-    static_assert ( test_ce ( 5, 0 ) == 5, "" );
-    static_assert ( test_ce ( 5, 1 ) == 4, "" );
-    static_assert ( test_ce ( 5, 5 ) == 0, "" );
-    static_assert ( test_ce ( 9, 3 ) == 6, "" );
-    }
+  {
+    static_assert(test_ce(5, 0) == 5, "");
+    static_assert(test_ce(5, 1) == 4, "");
+    static_assert(test_ce(5, 5) == 0, "");
+    static_assert(test_ce(9, 3) == 6, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.modifiers/remove_suffix.pass.cpp b/libcxx/test/std/strings/string.view/string.view.modifiers/remove_suffix.pass.cpp
index 2ebe665c78f9e3e..6d57f6c24a48774 100644
--- a/libcxx/test/std/strings/string.view/string.view.modifiers/remove_suffix.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.modifiers/remove_suffix.pass.cpp
@@ -17,65 +17,64 @@
 
 #include "test_macros.h"
 
-template<typename CharT>
-void test ( const CharT *s, std::size_t len ) {
-    typedef std::basic_string_view<CharT> SV;
-    {
-    SV sv1 ( s );
-    assert ( sv1.size() == len );
-    assert ( sv1.data() == s );
-
-    if ( len > 0 ) {
-        sv1.remove_suffix ( 1 );
-        assert ( sv1.size() == (len - 1));
-        assert ( sv1.data() == s);
-        sv1.remove_suffix ( len - 1 );
-        }
-
-    assert ( sv1.size() == 0 );
-    sv1.remove_suffix ( 0 );
-    assert ( sv1.size() == 0 );
+template <typename CharT>
+void test(const CharT* s, std::size_t len) {
+  typedef std::basic_string_view<CharT> SV;
+  {
+    SV sv1(s);
+    assert(sv1.size() == len);
+    assert(sv1.data() == s);
+
+    if (len > 0) {
+      sv1.remove_suffix(1);
+      assert(sv1.size() == (len - 1));
+      assert(sv1.data() == s);
+      sv1.remove_suffix(len - 1);
     }
 
+    assert(sv1.size() == 0);
+    sv1.remove_suffix(0);
+    assert(sv1.size() == 0);
+  }
 }
 
 #if TEST_STD_VER > 11
-constexpr std::size_t test_ce ( size_t n, size_t k ) {
-    typedef std::basic_string_view<char> SV;
-    SV sv1{ "ABCDEFGHIJKL", n };
-    sv1.remove_suffix ( k );
-    return sv1.size();
+constexpr std::size_t test_ce(size_t n, size_t k) {
+  typedef std::basic_string_view<char> SV;
+  SV sv1{"ABCDEFGHIJKL", n};
+  sv1.remove_suffix(k);
+  return sv1.size();
 }
 #endif
 
 int main(int, char**) {
-    test ( "ABCDE", 5 );
-    test ( "a", 1 );
-    test ( "", 0 );
+  test("ABCDE", 5);
+  test("a", 1);
+  test("", 0);
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test ( L"ABCDE", 5 );
-    test ( L"a", 1 );
-    test ( L"", 0 );
+  test(L"ABCDE", 5);
+  test(L"a", 1);
+  test(L"", 0);
 #endif
 
 #if TEST_STD_VER >= 11
-    test ( u"ABCDE", 5 );
-    test ( u"a", 1 );
-    test ( u"", 0 );
+  test(u"ABCDE", 5);
+  test(u"a", 1);
+  test(u"", 0);
 
-    test ( U"ABCDE", 5 );
-    test ( U"a", 1 );
-    test ( U"", 0 );
+  test(U"ABCDE", 5);
+  test(U"a", 1);
+  test(U"", 0);
 #endif
 
 #if TEST_STD_VER > 11
-    {
-    static_assert ( test_ce ( 5, 0 ) == 5, "" );
-    static_assert ( test_ce ( 5, 1 ) == 4, "" );
-    static_assert ( test_ce ( 5, 5 ) == 0, "" );
-    static_assert ( test_ce ( 9, 3 ) == 6, "" );
-    }
+  {
+    static_assert(test_ce(5, 0) == 5, "");
+    static_assert(test_ce(5, 1) == 4, "");
+    static_assert(test_ce(5, 5) == 0, "");
+    static_assert(test_ce(9, 3) == 6, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.modifiers/swap.pass.cpp b/libcxx/test/std/strings/string.view/string.view.modifiers/swap.pass.cpp
index 7f46cbf15e7c133..de0c5f423c4e8ee 100644
--- a/libcxx/test/std/strings/string.view/string.view.modifiers/swap.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.modifiers/swap.pass.cpp
@@ -17,63 +17,61 @@
 
 #include "test_macros.h"
 
-template<typename CharT>
-void test ( const CharT *s, std::size_t len ) {
-    typedef std::basic_string_view<CharT> SV;
-    {
+template <typename CharT>
+void test(const CharT* s, std::size_t len) {
+  typedef std::basic_string_view<CharT> SV;
+  {
     SV sv1(s);
     SV sv2;
 
-    assert ( sv1.size() == len );
-    assert ( sv1.data() == s );
-    assert ( sv2.size() == 0 );
-
-    sv1.swap ( sv2 );
-    assert ( sv1.size() == 0 );
-    assert ( sv2.size() == len );
-    assert ( sv2.data() == s );
-    }
+    assert(sv1.size() == len);
+    assert(sv1.data() == s);
+    assert(sv2.size() == 0);
 
+    sv1.swap(sv2);
+    assert(sv1.size() == 0);
+    assert(sv2.size() == len);
+    assert(sv2.data() == s);
+  }
 }
 
 #if TEST_STD_VER > 11
-constexpr std::size_t test_ce ( size_t n, size_t k ) {
-    typedef std::basic_string_view<char> SV;
-    SV sv1{ "ABCDEFGHIJKL", n };
-    SV sv2 { sv1.data(), k };
-    sv1.swap ( sv2 );
-    return sv1.size();
+constexpr std::size_t test_ce(size_t n, size_t k) {
+  typedef std::basic_string_view<char> SV;
+  SV sv1{"ABCDEFGHIJKL", n};
+  SV sv2{sv1.data(), k};
+  sv1.swap(sv2);
+  return sv1.size();
 }
 #endif
 
-
 int main(int, char**) {
-    test ( "ABCDE", 5 );
-    test ( "a", 1 );
-    test ( "", 0 );
+  test("ABCDE", 5);
+  test("a", 1);
+  test("", 0);
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test ( L"ABCDE", 5 );
-    test ( L"a", 1 );
-    test ( L"", 0 );
+  test(L"ABCDE", 5);
+  test(L"a", 1);
+  test(L"", 0);
 #endif
 
 #if TEST_STD_VER >= 11
-    test ( u"ABCDE", 5 );
-    test ( u"a", 1 );
-    test ( u"", 0 );
+  test(u"ABCDE", 5);
+  test(u"a", 1);
+  test(u"", 0);
 
-    test ( U"ABCDE", 5 );
-    test ( U"a", 1 );
-    test ( U"", 0 );
+  test(U"ABCDE", 5);
+  test(U"a", 1);
+  test(U"", 0);
 #endif
 
 #if TEST_STD_VER > 11
-    {
-    static_assert ( test_ce (2, 3) == 3, "" );
-    static_assert ( test_ce (5, 3) == 3, "" );
-    static_assert ( test_ce (0, 1) == 1, "" );
-    }
+  {
+    static_assert(test_ce(2, 3) == 3, "");
+    static_assert(test_ce(5, 3) == 3, "");
+    static_assert(test_ce(0, 1) == 1, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.nonmem/quoted.pass.cpp b/libcxx/test/std/strings/string.view/string.view.nonmem/quoted.pass.cpp
index 3d47f625a502117..07d041c4729428b 100644
--- a/libcxx/test/std/strings/string.view/string.view.nonmem/quoted.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.nonmem/quoted.pass.cpp
@@ -21,205 +21,196 @@
 
 #include "test_macros.h"
 
-bool is_skipws ( const std::istream *is ) {
-    return ( is->flags() & std::ios_base::skipws ) != 0;
-}
+bool is_skipws(const std::istream* is) { return (is->flags() & std::ios_base::skipws) != 0; }
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-bool is_skipws ( const std::wistream *is ) {
-    return ( is->flags() & std::ios_base::skipws ) != 0;
-}
+bool is_skipws(const std::wistream* is) { return (is->flags() & std::ios_base::skipws) != 0; }
 #endif
 
-void round_trip ( const char *p ) {
-    std::stringstream ss;
-    bool skippingws = is_skipws ( &ss );
-    std::string_view sv {p};
-
-    ss << std::quoted(sv);
-    std::string s;
-    ss >> std::quoted(s);
-    assert ( s == sv );
-    assert ( skippingws == is_skipws ( &ss ));
-    }
-
-void round_trip_ws ( const char *p ) {
-    std::stringstream ss;
-    std::noskipws ( ss );
-    bool skippingws = is_skipws ( &ss );
-    std::string_view sv {p};
-
-    ss << std::quoted(sv);
-    std::string s;
-    ss >> std::quoted(s);
-    assert ( s == sv );
-    assert ( skippingws == is_skipws ( &ss ));
-    }
-
-void round_trip_d ( const char *p, char delim ) {
-    std::stringstream ss;
-    std::string_view sv {p};
-
-    ss << std::quoted(sv, delim);
-    std::string s;
-    ss >> std::quoted(s, delim);
-    assert ( s == sv );
-    }
-
-void round_trip_e ( const char *p, char escape ) {
-    std::stringstream ss;
-    std::string_view sv {p};
-
-    ss << std::quoted(sv, '"', escape );
-    std::string s;
-    ss >> std::quoted(s, '"', escape );
-    assert ( s == sv );
-    }
-
-
-
-std::string quote ( const char *p, char delim='"', char escape='\\' ) {
-    std::stringstream ss;
-    ss << std::quoted(p, delim, escape);
-    std::string s;
-    ss >> s;    // no quote
-    return s;
+void round_trip(const char* p) {
+  std::stringstream ss;
+  bool skippingws = is_skipws(&ss);
+  std::string_view sv{p};
+
+  ss << std::quoted(sv);
+  std::string s;
+  ss >> std::quoted(s);
+  assert(s == sv);
+  assert(skippingws == is_skipws(&ss));
+}
+
+void round_trip_ws(const char* p) {
+  std::stringstream ss;
+  std::noskipws(ss);
+  bool skippingws = is_skipws(&ss);
+  std::string_view sv{p};
+
+  ss << std::quoted(sv);
+  std::string s;
+  ss >> std::quoted(s);
+  assert(s == sv);
+  assert(skippingws == is_skipws(&ss));
+}
+
+void round_trip_d(const char* p, char delim) {
+  std::stringstream ss;
+  std::string_view sv{p};
+
+  ss << std::quoted(sv, delim);
+  std::string s;
+  ss >> std::quoted(s, delim);
+  assert(s == sv);
+}
+
+void round_trip_e(const char* p, char escape) {
+  std::stringstream ss;
+  std::string_view sv{p};
+
+  ss << std::quoted(sv, '"', escape);
+  std::string s;
+  ss >> std::quoted(s, '"', escape);
+  assert(s == sv);
+}
+
+std::string quote(const char* p, char delim = '"', char escape = '\\') {
+  std::stringstream ss;
+  ss << std::quoted(p, delim, escape);
+  std::string s;
+  ss >> s; // no quote
+  return s;
 }
 
-std::string unquote ( const char *p, char delim='"', char escape='\\' ) {
-    std::stringstream ss;
-    ss << p;
-    std::string s;
-    ss >> std::quoted(s, delim, escape);
-    return s;
+std::string unquote(const char* p, char delim = '"', char escape = '\\') {
+  std::stringstream ss;
+  ss << p;
+  std::string s;
+  ss >> std::quoted(s, delim, escape);
+  return s;
 }
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-void round_trip ( const wchar_t *p ) {
-    std::wstringstream ss;
-    bool skippingws = is_skipws ( &ss );
-    std::wstring_view sv {p};
-
-    ss << std::quoted(sv);
-    std::wstring s;
-    ss >> std::quoted(s);
-    assert ( s == sv );
-    assert ( skippingws == is_skipws ( &ss ));
-    }
-
-
-void round_trip_ws ( const wchar_t *p ) {
-    std::wstringstream ss;
-    std::noskipws ( ss );
-    bool skippingws = is_skipws ( &ss );
-    std::wstring_view sv {p};
-
-    ss << std::quoted(sv);
-    std::wstring s;
-    ss >> std::quoted(s);
-    assert ( s == sv );
-    assert ( skippingws == is_skipws ( &ss ));
-    }
-
-void round_trip_d ( const wchar_t *p, wchar_t delim ) {
-    std::wstringstream ss;
-    std::wstring_view sv {p};
-
-    ss << std::quoted(sv, delim);
-    std::wstring s;
-    ss >> std::quoted(s, delim);
-    assert ( s == sv );
-    }
-
-void round_trip_e ( const wchar_t *p, wchar_t escape ) {
-    std::wstringstream ss;
-    std::wstring_view sv {p};
-
-    ss << std::quoted(sv, wchar_t('"'), escape );
-    std::wstring s;
-    ss >> std::quoted(s, wchar_t('"'), escape );
-    assert ( s == sv );
-    }
-
-
-std::wstring quote ( const wchar_t *p, wchar_t delim='"', wchar_t escape='\\' ) {
-    std::wstringstream ss;
-    std::wstring_view sv {p};
-
-    ss << std::quoted(sv, delim, escape);
-    std::wstring s;
-    ss >> s;    // no quote
-    return s;
+void round_trip(const wchar_t* p) {
+  std::wstringstream ss;
+  bool skippingws = is_skipws(&ss);
+  std::wstring_view sv{p};
+
+  ss << std::quoted(sv);
+  std::wstring s;
+  ss >> std::quoted(s);
+  assert(s == sv);
+  assert(skippingws == is_skipws(&ss));
+}
+
+void round_trip_ws(const wchar_t* p) {
+  std::wstringstream ss;
+  std::noskipws(ss);
+  bool skippingws = is_skipws(&ss);
+  std::wstring_view sv{p};
+
+  ss << std::quoted(sv);
+  std::wstring s;
+  ss >> std::quoted(s);
+  assert(s == sv);
+  assert(skippingws == is_skipws(&ss));
+}
+
+void round_trip_d(const wchar_t* p, wchar_t delim) {
+  std::wstringstream ss;
+  std::wstring_view sv{p};
+
+  ss << std::quoted(sv, delim);
+  std::wstring s;
+  ss >> std::quoted(s, delim);
+  assert(s == sv);
+}
+
+void round_trip_e(const wchar_t* p, wchar_t escape) {
+  std::wstringstream ss;
+  std::wstring_view sv{p};
+
+  ss << std::quoted(sv, wchar_t('"'), escape);
+  std::wstring s;
+  ss >> std::quoted(s, wchar_t('"'), escape);
+  assert(s == sv);
+}
+
+std::wstring quote(const wchar_t* p, wchar_t delim = '"', wchar_t escape = '\\') {
+  std::wstringstream ss;
+  std::wstring_view sv{p};
+
+  ss << std::quoted(sv, delim, escape);
+  std::wstring s;
+  ss >> s; // no quote
+  return s;
 }
 
-std::wstring unquote ( const wchar_t *p, wchar_t delim='"', wchar_t escape='\\' ) {
-    std::wstringstream ss;
-    std::wstring_view sv {p};
+std::wstring unquote(const wchar_t* p, wchar_t delim = '"', wchar_t escape = '\\') {
+  std::wstringstream ss;
+  std::wstring_view sv{p};
 
-    ss << sv;
-    std::wstring s;
-    ss >> std::quoted(s, delim, escape);
-    return s;
+  ss << sv;
+  std::wstring s;
+  ss >> std::quoted(s, delim, escape);
+  return s;
 }
 #endif // TEST_HAS_NO_WIDE_CHARACTERS
 
-int main(int, char**)
-{
-    round_trip    (  "" );
-    round_trip_ws (  "" );
-    round_trip_d  (  "", 'q' );
-    round_trip_e  (  "", 'q' );
+int main(int, char**) {
+  round_trip("");
+  round_trip_ws("");
+  round_trip_d("", 'q');
+  round_trip_e("", 'q');
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    round_trip    ( L"" );
-    round_trip_ws ( L"" );
-    round_trip_d  ( L"", 'q' );
-    round_trip_e  ( L"", 'q' );
+  round_trip(L"");
+  round_trip_ws(L"");
+  round_trip_d(L"", 'q');
+  round_trip_e(L"", 'q');
 #endif
 
-    round_trip    (  "Hi" );
-    round_trip_ws (  "Hi" );
-    round_trip_d  (  "Hi", '!' );
-    round_trip_e  (  "Hi", '!' );
-    assert ( quote ( "Hi", '!' ) == "!Hi!" );
-    assert ( quote ( "Hi!", '!' ) == R"(!Hi\!!)" );
+  round_trip("Hi");
+  round_trip_ws("Hi");
+  round_trip_d("Hi", '!');
+  round_trip_e("Hi", '!');
+  assert(quote("Hi", '!') == "!Hi!");
+  assert(quote("Hi!", '!') == R"(!Hi\!!)");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    round_trip    ( L"Hi" );
-    round_trip_ws ( L"Hi" );
-    round_trip_d  ( L"Hi", '!' );
-    round_trip_e  ( L"Hi", '!' );
-    assert ( quote ( L"Hi", '!' )  == L"!Hi!" );
-    assert ( quote ( L"Hi!", '!' ) == LR"(!Hi\!!)" );
+  round_trip(L"Hi");
+  round_trip_ws(L"Hi");
+  round_trip_d(L"Hi", '!');
+  round_trip_e(L"Hi", '!');
+  assert(quote(L"Hi", '!') == L"!Hi!");
+  assert(quote(L"Hi!", '!') == LR"(!Hi\!!)");
 #endif
 
-    round_trip    (  "Hi Mom" );
-    round_trip_ws (  "Hi Mom" );
+  round_trip("Hi Mom");
+  round_trip_ws("Hi Mom");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    round_trip    ( L"Hi Mom" );
-    round_trip_ws ( L"Hi Mom" );
+  round_trip(L"Hi Mom");
+  round_trip_ws(L"Hi Mom");
 #endif
 
-    assert ( quote (  "" )  ==  "\"\"" );
-    assert ( quote (  "a" ) ==  "\"a\"" );
+  assert(quote("") == "\"\"");
+  assert(quote("a") == "\"a\"");
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    assert ( quote ( L"" )  == L"\"\"" );
-    assert ( quote ( L"a" ) == L"\"a\"" );
+  assert(quote(L"") == L"\"\"");
+  assert(quote(L"a") == L"\"a\"");
 #endif
 
-    // missing end quote - must not hang
-    assert ( unquote (  "\"abc" ) ==  "abc" );
-    assert ( unquote (  "abc" ) == "abc" ); // no delimiter
-    assert ( unquote (  "abc def" ) ==  "abc" ); // no delimiter
-    assert ( unquote (  "" ) ==  "" ); // nothing there
+  // missing end quote - must not hang
+  assert(unquote("\"abc") == "abc");
+  assert(unquote("abc") == "abc");     // no delimiter
+  assert(unquote("abc def") == "abc"); // no delimiter
+  assert(unquote("") == "");           // nothing there
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    assert ( unquote ( L"\"abc" ) == L"abc" );
-    assert ( unquote ( L"abc" ) == L"abc" ); // no delimiter
-    assert ( unquote ( L"abc def" ) == L"abc" ); // no delimiter
-    assert ( unquote ( L"" ) == L"" ); // nothing there
+  assert(unquote(L"\"abc") == L"abc");
+  assert(unquote(L"abc") == L"abc");     // no delimiter
+  assert(unquote(L"abc def") == L"abc"); // no delimiter
+  assert(unquote(L"") == L"");           // nothing there
 #endif
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.ops/compare.pointer.pass.cpp b/libcxx/test/std/strings/string.view/string.view.ops/compare.pointer.pass.cpp
index ed06bec7039ec9f..755af066eb0496b 100644
--- a/libcxx/test/std/strings/string.view/string.view.ops/compare.pointer.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.ops/compare.pointer.pass.cpp
@@ -18,25 +18,22 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-int sign ( int x ) { return x > 0 ? 1 : ( x < 0 ? -1 : 0 ); }
+int sign(int x) { return x > 0 ? 1 : (x < 0 ? -1 : 0); }
 
-template<typename CharT>
-void test1 ( std::basic_string_view<CharT> sv1, const CharT *s, int expected ) {
-    assert ( sign( sv1.compare(s)) == sign(expected));
+template <typename CharT>
+void test1(std::basic_string_view<CharT> sv1, const CharT* s, int expected) {
+  assert(sign(sv1.compare(s)) == sign(expected));
 }
 
-template<typename CharT>
-void
-test( const CharT *s1, const CharT *s2, int expected)
-{
-    typedef std::basic_string_view<CharT> string_view_t;
-    string_view_t sv1 ( s1 );
-    test1 ( sv1, s2, expected );
+template <typename CharT>
+void test(const CharT* s1, const CharT* s2, int expected) {
+  typedef std::basic_string_view<CharT> string_view_t;
+  string_view_t sv1(s1);
+  test1(sv1, s2, expected);
 }
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     test("", "", 0);
     test("", "abcde", -5);
     test("", "abcdefghij", -10);
@@ -53,10 +50,10 @@ int main(int, char**)
     test("abcdefghijklmnopqrst", "abcde", 15);
     test("abcdefghijklmnopqrst", "abcdefghij", 10);
     test("abcdefghijklmnopqrst", "abcdefghijklmnopqrst", 0);
-    }
+  }
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
+  {
     test(L"", L"", 0);
     test(L"", L"abcde", -5);
     test(L"", L"abcdefghij", -10);
@@ -73,11 +70,11 @@ int main(int, char**)
     test(L"abcdefghijklmnopqrst", L"abcde", 15);
     test(L"abcdefghijklmnopqrst", L"abcdefghij", 10);
     test(L"abcdefghijklmnopqrst", L"abcdefghijklmnopqrst", 0);
-    }
+  }
 #endif
 
 #if TEST_STD_VER >= 11
-    {
+  {
     test(U"", U"", 0);
     test(U"", U"abcde", -5);
     test(U"", U"abcdefghij", -10);
@@ -94,9 +91,9 @@ int main(int, char**)
     test(U"abcdefghijklmnopqrst", U"abcde", 15);
     test(U"abcdefghijklmnopqrst", U"abcdefghij", 10);
     test(U"abcdefghijklmnopqrst", U"abcdefghijklmnopqrst", 0);
-    }
+  }
 
-    {
+  {
     test(u"", u"", 0);
     test(u"", u"abcde", -5);
     test(u"", u"abcdefghij", -10);
@@ -113,19 +110,19 @@ int main(int, char**)
     test(u"abcdefghijklmnopqrst", u"abcde", 15);
     test(u"abcdefghijklmnopqrst", u"abcdefghij", 10);
     test(u"abcdefghijklmnopqrst", u"abcdefghijklmnopqrst", 0);
-    }
+  }
 #endif
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
-    static_assert ( sv1.compare("") == 0, "" );
-    static_assert ( sv1.compare("abcde") < 0, "" );
-    static_assert ( sv2.compare("") > 0, "" );
-    static_assert ( sv2.compare("abcde") == 0, "" );
-    }
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
+    static_assert(sv1.compare("") == 0, "");
+    static_assert(sv1.compare("abcde") < 0, "");
+    static_assert(sv2.compare("") > 0, "");
+    static_assert(sv2.compare("abcde") == 0, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.ops/compare.pointer_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.ops/compare.pointer_size.pass.cpp
index b40ff6483ea6bf0..bcdae9714b4a9e0 100644
--- a/libcxx/test/std/strings/string.view/string.view.ops/compare.pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.ops/compare.pointer_size.pass.cpp
@@ -19,370 +19,361 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-int sign ( int x ) { return x > 0 ? 1 : ( x < 0 ? -1 : 0 ); }
+int sign(int x) { return x > 0 ? 1 : (x < 0 ? -1 : 0); }
 
-template<typename CharT>
-void test1 ( std::basic_string_view<CharT> sv1,
-             std::size_t pos1, size_t n1, const CharT *s, int expected ) {
+template <typename CharT>
+void test1(std::basic_string_view<CharT> sv1, std::size_t pos1, size_t n1, const CharT* s, int expected) {
 #ifdef TEST_HAS_NO_EXCEPTIONS
-    if (pos1 <= sv1.size())
-        assert(sign(sv1.compare(pos1, n1, s)) == sign(expected));
+  if (pos1 <= sv1.size())
+    assert(sign(sv1.compare(pos1, n1, s)) == sign(expected));
 #else
-    try {
-        assert(sign(sv1.compare(pos1, n1, s)) == sign(expected));
-        assert(pos1 <= sv1.size());
-    }
-    catch (const std::out_of_range&) {
-        assert(pos1 > sv1.size());
-    }
+  try {
+    assert(sign(sv1.compare(pos1, n1, s)) == sign(expected));
+    assert(pos1 <= sv1.size());
+  } catch (const std::out_of_range&) {
+    assert(pos1 > sv1.size());
+  }
 #endif
 }
 
-template<typename CharT>
-void
-test( const CharT *s1, std::size_t pos1, size_t n1, const CharT *s2, int expected)
-{
-    typedef std::basic_string_view<CharT> string_view_t;
-    string_view_t sv1 ( s1 );
-    test1 ( sv1, pos1, n1, s2, expected );
+template <typename CharT>
+void test(const CharT* s1, std::size_t pos1, size_t n1, const CharT* s2, int expected) {
+  typedef std::basic_string_view<CharT> string_view_t;
+  string_view_t sv1(s1);
+  test1(sv1, pos1, n1, s2, expected);
 }
 
-void test0()
-{
-    test("", 0, 0, "", 0);
-    test("", 0, 0, "abcde", -5);
-    test("", 0, 0, "abcdefghij", -10);
-    test("", 0, 0, "abcdefghijklmnopqrst", -20);
-    test("", 0, 1, "", 0);
-    test("", 0, 1, "abcde", -5);
-    test("", 0, 1, "abcdefghij", -10);
-    test("", 0, 1, "abcdefghijklmnopqrst", -20);
-    test("", 1, 0, "", 0);
-    test("", 1, 0, "abcde", 0);
-    test("", 1, 0, "abcdefghij", 0);
-    test("", 1, 0, "abcdefghijklmnopqrst", 0);
-    test("abcde", 0, 0, "", 0);
-    test("abcde", 0, 0, "abcde", -5);
-    test("abcde", 0, 0, "abcdefghij", -10);
-    test("abcde", 0, 0, "abcdefghijklmnopqrst", -20);
-    test("abcde", 0, 1, "", 1);
-    test("abcde", 0, 1, "abcde", -4);
-    test("abcde", 0, 1, "abcdefghij", -9);
-    test("abcde", 0, 1, "abcdefghijklmnopqrst", -19);
-    test("abcde", 0, 2, "", 2);
-    test("abcde", 0, 2, "abcde", -3);
-    test("abcde", 0, 2, "abcdefghij", -8);
-    test("abcde", 0, 2, "abcdefghijklmnopqrst", -18);
-    test("abcde", 0, 4, "", 4);
-    test("abcde", 0, 4, "abcde", -1);
-    test("abcde", 0, 4, "abcdefghij", -6);
-    test("abcde", 0, 4, "abcdefghijklmnopqrst", -16);
-    test("abcde", 0, 5, "", 5);
-    test("abcde", 0, 5, "abcde", 0);
-    test("abcde", 0, 5, "abcdefghij", -5);
-    test("abcde", 0, 5, "abcdefghijklmnopqrst", -15);
-    test("abcde", 0, 6, "", 5);
-    test("abcde", 0, 6, "abcde", 0);
-    test("abcde", 0, 6, "abcdefghij", -5);
-    test("abcde", 0, 6, "abcdefghijklmnopqrst", -15);
-    test("abcde", 1, 0, "", 0);
-    test("abcde", 1, 0, "abcde", -5);
-    test("abcde", 1, 0, "abcdefghij", -10);
-    test("abcde", 1, 0, "abcdefghijklmnopqrst", -20);
-    test("abcde", 1, 1, "", 1);
-    test("abcde", 1, 1, "abcde", 1);
-    test("abcde", 1, 1, "abcdefghij", 1);
-    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1);
-    test("abcde", 1, 2, "", 2);
-    test("abcde", 1, 2, "abcde", 1);
-    test("abcde", 1, 2, "abcdefghij", 1);
-    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1);
-    test("abcde", 1, 3, "", 3);
-    test("abcde", 1, 3, "abcde", 1);
-    test("abcde", 1, 3, "abcdefghij", 1);
-    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1);
-    test("abcde", 1, 4, "", 4);
-    test("abcde", 1, 4, "abcde", 1);
-    test("abcde", 1, 4, "abcdefghij", 1);
-    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1);
-    test("abcde", 1, 5, "", 4);
-    test("abcde", 1, 5, "abcde", 1);
-    test("abcde", 1, 5, "abcdefghij", 1);
-    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1);
-    test("abcde", 2, 0, "", 0);
-    test("abcde", 2, 0, "abcde", -5);
-    test("abcde", 2, 0, "abcdefghij", -10);
-    test("abcde", 2, 0, "abcdefghijklmnopqrst", -20);
-    test("abcde", 2, 1, "", 1);
-    test("abcde", 2, 1, "abcde", 2);
-    test("abcde", 2, 1, "abcdefghij", 2);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 2);
-    test("abcde", 2, 2, "", 2);
-    test("abcde", 2, 2, "abcde", 2);
-    test("abcde", 2, 2, "abcdefghij", 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 2);
-    test("abcde", 2, 3, "", 3);
-    test("abcde", 2, 3, "abcde", 2);
-    test("abcde", 2, 3, "abcdefghij", 2);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 2);
-    test("abcde", 2, 4, "", 3);
-    test("abcde", 2, 4, "abcde", 2);
-    test("abcde", 2, 4, "abcdefghij", 2);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 2);
-    test("abcde", 4, 0, "", 0);
-    test("abcde", 4, 0, "abcde", -5);
-    test("abcde", 4, 0, "abcdefghij", -10);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", -20);
-    test("abcde", 4, 1, "", 1);
-    test("abcde", 4, 1, "abcde", 4);
-    test("abcde", 4, 1, "abcdefghij", 4);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 4);
-    test("abcde", 4, 2, "", 1);
-    test("abcde", 4, 2, "abcde", 4);
-    test("abcde", 4, 2, "abcdefghij", 4);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 4);
-    test("abcde", 5, 0, "", 0);
-    test("abcde", 5, 0, "abcde", -5);
-    test("abcde", 5, 0, "abcdefghij", -10);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", -20);
-    test("abcde", 5, 1, "", 0);
-    test("abcde", 5, 1, "abcde", -5);
-    test("abcde", 5, 1, "abcdefghij", -10);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", -20);
+void test0() {
+  test("", 0, 0, "", 0);
+  test("", 0, 0, "abcde", -5);
+  test("", 0, 0, "abcdefghij", -10);
+  test("", 0, 0, "abcdefghijklmnopqrst", -20);
+  test("", 0, 1, "", 0);
+  test("", 0, 1, "abcde", -5);
+  test("", 0, 1, "abcdefghij", -10);
+  test("", 0, 1, "abcdefghijklmnopqrst", -20);
+  test("", 1, 0, "", 0);
+  test("", 1, 0, "abcde", 0);
+  test("", 1, 0, "abcdefghij", 0);
+  test("", 1, 0, "abcdefghijklmnopqrst", 0);
+  test("abcde", 0, 0, "", 0);
+  test("abcde", 0, 0, "abcde", -5);
+  test("abcde", 0, 0, "abcdefghij", -10);
+  test("abcde", 0, 0, "abcdefghijklmnopqrst", -20);
+  test("abcde", 0, 1, "", 1);
+  test("abcde", 0, 1, "abcde", -4);
+  test("abcde", 0, 1, "abcdefghij", -9);
+  test("abcde", 0, 1, "abcdefghijklmnopqrst", -19);
+  test("abcde", 0, 2, "", 2);
+  test("abcde", 0, 2, "abcde", -3);
+  test("abcde", 0, 2, "abcdefghij", -8);
+  test("abcde", 0, 2, "abcdefghijklmnopqrst", -18);
+  test("abcde", 0, 4, "", 4);
+  test("abcde", 0, 4, "abcde", -1);
+  test("abcde", 0, 4, "abcdefghij", -6);
+  test("abcde", 0, 4, "abcdefghijklmnopqrst", -16);
+  test("abcde", 0, 5, "", 5);
+  test("abcde", 0, 5, "abcde", 0);
+  test("abcde", 0, 5, "abcdefghij", -5);
+  test("abcde", 0, 5, "abcdefghijklmnopqrst", -15);
+  test("abcde", 0, 6, "", 5);
+  test("abcde", 0, 6, "abcde", 0);
+  test("abcde", 0, 6, "abcdefghij", -5);
+  test("abcde", 0, 6, "abcdefghijklmnopqrst", -15);
+  test("abcde", 1, 0, "", 0);
+  test("abcde", 1, 0, "abcde", -5);
+  test("abcde", 1, 0, "abcdefghij", -10);
+  test("abcde", 1, 0, "abcdefghijklmnopqrst", -20);
+  test("abcde", 1, 1, "", 1);
+  test("abcde", 1, 1, "abcde", 1);
+  test("abcde", 1, 1, "abcdefghij", 1);
+  test("abcde", 1, 1, "abcdefghijklmnopqrst", 1);
+  test("abcde", 1, 2, "", 2);
+  test("abcde", 1, 2, "abcde", 1);
+  test("abcde", 1, 2, "abcdefghij", 1);
+  test("abcde", 1, 2, "abcdefghijklmnopqrst", 1);
+  test("abcde", 1, 3, "", 3);
+  test("abcde", 1, 3, "abcde", 1);
+  test("abcde", 1, 3, "abcdefghij", 1);
+  test("abcde", 1, 3, "abcdefghijklmnopqrst", 1);
+  test("abcde", 1, 4, "", 4);
+  test("abcde", 1, 4, "abcde", 1);
+  test("abcde", 1, 4, "abcdefghij", 1);
+  test("abcde", 1, 4, "abcdefghijklmnopqrst", 1);
+  test("abcde", 1, 5, "", 4);
+  test("abcde", 1, 5, "abcde", 1);
+  test("abcde", 1, 5, "abcdefghij", 1);
+  test("abcde", 1, 5, "abcdefghijklmnopqrst", 1);
+  test("abcde", 2, 0, "", 0);
+  test("abcde", 2, 0, "abcde", -5);
+  test("abcde", 2, 0, "abcdefghij", -10);
+  test("abcde", 2, 0, "abcdefghijklmnopqrst", -20);
+  test("abcde", 2, 1, "", 1);
+  test("abcde", 2, 1, "abcde", 2);
+  test("abcde", 2, 1, "abcdefghij", 2);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 2);
+  test("abcde", 2, 2, "", 2);
+  test("abcde", 2, 2, "abcde", 2);
+  test("abcde", 2, 2, "abcdefghij", 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 2);
+  test("abcde", 2, 3, "", 3);
+  test("abcde", 2, 3, "abcde", 2);
+  test("abcde", 2, 3, "abcdefghij", 2);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 2);
+  test("abcde", 2, 4, "", 3);
+  test("abcde", 2, 4, "abcde", 2);
+  test("abcde", 2, 4, "abcdefghij", 2);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 2);
+  test("abcde", 4, 0, "", 0);
+  test("abcde", 4, 0, "abcde", -5);
+  test("abcde", 4, 0, "abcdefghij", -10);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", -20);
+  test("abcde", 4, 1, "", 1);
+  test("abcde", 4, 1, "abcde", 4);
+  test("abcde", 4, 1, "abcdefghij", 4);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 4);
+  test("abcde", 4, 2, "", 1);
+  test("abcde", 4, 2, "abcde", 4);
+  test("abcde", 4, 2, "abcdefghij", 4);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 4);
+  test("abcde", 5, 0, "", 0);
+  test("abcde", 5, 0, "abcde", -5);
+  test("abcde", 5, 0, "abcdefghij", -10);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", -20);
+  test("abcde", 5, 1, "", 0);
+  test("abcde", 5, 1, "abcde", -5);
+  test("abcde", 5, 1, "abcdefghij", -10);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", -20);
 }
 
-void test1()
-{
-    test("abcde", 6, 0, "", 0);
-    test("abcde", 6, 0, "abcde", 0);
-    test("abcde", 6, 0, "abcdefghij", 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0);
-    test("abcdefghij", 0, 0, "", 0);
-    test("abcdefghij", 0, 0, "abcde", -5);
-    test("abcdefghij", 0, 0, "abcdefghij", -10);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghij", 0, 1, "", 1);
-    test("abcdefghij", 0, 1, "abcde", -4);
-    test("abcdefghij", 0, 1, "abcdefghij", -9);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", -19);
-    test("abcdefghij", 0, 5, "", 5);
-    test("abcdefghij", 0, 5, "abcde", 0);
-    test("abcdefghij", 0, 5, "abcdefghij", -5);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", -15);
-    test("abcdefghij", 0, 9, "", 9);
-    test("abcdefghij", 0, 9, "abcde", 4);
-    test("abcdefghij", 0, 9, "abcdefghij", -1);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", -11);
-    test("abcdefghij", 0, 10, "", 10);
-    test("abcdefghij", 0, 10, "abcde", 5);
-    test("abcdefghij", 0, 10, "abcdefghij", 0);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", -10);
-    test("abcdefghij", 0, 11, "", 10);
-    test("abcdefghij", 0, 11, "abcde", 5);
-    test("abcdefghij", 0, 11, "abcdefghij", 0);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", -10);
-    test("abcdefghij", 1, 0, "", 0);
-    test("abcdefghij", 1, 0, "abcde", -5);
-    test("abcdefghij", 1, 0, "abcdefghij", -10);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghij", 1, 1, "", 1);
-    test("abcdefghij", 1, 1, "abcde", 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1);
-    test("abcdefghij", 1, 4, "", 4);
-    test("abcdefghij", 1, 4, "abcde", 1);
-    test("abcdefghij", 1, 4, "abcdefghij", 1);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1);
-    test("abcdefghij", 1, 8, "", 8);
-    test("abcdefghij", 1, 8, "abcde", 1);
-    test("abcdefghij", 1, 8, "abcdefghij", 1);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1);
-    test("abcdefghij", 1, 9, "", 9);
-    test("abcdefghij", 1, 9, "abcde", 1);
-    test("abcdefghij", 1, 9, "abcdefghij", 1);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1);
-    test("abcdefghij", 1, 10, "", 9);
-    test("abcdefghij", 1, 10, "abcde", 1);
-    test("abcdefghij", 1, 10, "abcdefghij", 1);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1);
-    test("abcdefghij", 5, 0, "", 0);
-    test("abcdefghij", 5, 0, "abcde", -5);
-    test("abcdefghij", 5, 0, "abcdefghij", -10);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghij", 5, 1, "", 1);
-    test("abcdefghij", 5, 1, "abcde", 5);
-    test("abcdefghij", 5, 1, "abcdefghij", 5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 5);
-    test("abcdefghij", 5, 2, "", 2);
-    test("abcdefghij", 5, 2, "abcde", 5);
-    test("abcdefghij", 5, 2, "abcdefghij", 5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 5);
-    test("abcdefghij", 5, 4, "", 4);
-    test("abcdefghij", 5, 4, "abcde", 5);
-    test("abcdefghij", 5, 4, "abcdefghij", 5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 5);
-    test("abcdefghij", 5, 5, "", 5);
-    test("abcdefghij", 5, 5, "abcde", 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 5);
-    test("abcdefghij", 5, 6, "", 5);
-    test("abcdefghij", 5, 6, "abcde", 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 5);
-    test("abcdefghij", 9, 0, "", 0);
-    test("abcdefghij", 9, 0, "abcde", -5);
-    test("abcdefghij", 9, 0, "abcdefghij", -10);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghij", 9, 1, "", 1);
-    test("abcdefghij", 9, 1, "abcde", 9);
-    test("abcdefghij", 9, 1, "abcdefghij", 9);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 9);
-    test("abcdefghij", 9, 2, "", 1);
-    test("abcdefghij", 9, 2, "abcde", 9);
-    test("abcdefghij", 9, 2, "abcdefghij", 9);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 9);
-    test("abcdefghij", 10, 0, "", 0);
-    test("abcdefghij", 10, 0, "abcde", -5);
-    test("abcdefghij", 10, 0, "abcdefghij", -10);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghij", 10, 1, "", 0);
-    test("abcdefghij", 10, 1, "abcde", -5);
-    test("abcdefghij", 10, 1, "abcdefghij", -10);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", -20);
-    test("abcdefghij", 11, 0, "", 0);
-    test("abcdefghij", 11, 0, "abcde", 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0);
+void test1() {
+  test("abcde", 6, 0, "", 0);
+  test("abcde", 6, 0, "abcde", 0);
+  test("abcde", 6, 0, "abcdefghij", 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 0);
+  test("abcdefghij", 0, 0, "", 0);
+  test("abcdefghij", 0, 0, "abcde", -5);
+  test("abcdefghij", 0, 0, "abcdefghij", -10);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghij", 0, 1, "", 1);
+  test("abcdefghij", 0, 1, "abcde", -4);
+  test("abcdefghij", 0, 1, "abcdefghij", -9);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", -19);
+  test("abcdefghij", 0, 5, "", 5);
+  test("abcdefghij", 0, 5, "abcde", 0);
+  test("abcdefghij", 0, 5, "abcdefghij", -5);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", -15);
+  test("abcdefghij", 0, 9, "", 9);
+  test("abcdefghij", 0, 9, "abcde", 4);
+  test("abcdefghij", 0, 9, "abcdefghij", -1);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", -11);
+  test("abcdefghij", 0, 10, "", 10);
+  test("abcdefghij", 0, 10, "abcde", 5);
+  test("abcdefghij", 0, 10, "abcdefghij", 0);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", -10);
+  test("abcdefghij", 0, 11, "", 10);
+  test("abcdefghij", 0, 11, "abcde", 5);
+  test("abcdefghij", 0, 11, "abcdefghij", 0);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", -10);
+  test("abcdefghij", 1, 0, "", 0);
+  test("abcdefghij", 1, 0, "abcde", -5);
+  test("abcdefghij", 1, 0, "abcdefghij", -10);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghij", 1, 1, "", 1);
+  test("abcdefghij", 1, 1, "abcde", 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1);
+  test("abcdefghij", 1, 4, "", 4);
+  test("abcdefghij", 1, 4, "abcde", 1);
+  test("abcdefghij", 1, 4, "abcdefghij", 1);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1);
+  test("abcdefghij", 1, 8, "", 8);
+  test("abcdefghij", 1, 8, "abcde", 1);
+  test("abcdefghij", 1, 8, "abcdefghij", 1);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1);
+  test("abcdefghij", 1, 9, "", 9);
+  test("abcdefghij", 1, 9, "abcde", 1);
+  test("abcdefghij", 1, 9, "abcdefghij", 1);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1);
+  test("abcdefghij", 1, 10, "", 9);
+  test("abcdefghij", 1, 10, "abcde", 1);
+  test("abcdefghij", 1, 10, "abcdefghij", 1);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1);
+  test("abcdefghij", 5, 0, "", 0);
+  test("abcdefghij", 5, 0, "abcde", -5);
+  test("abcdefghij", 5, 0, "abcdefghij", -10);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghij", 5, 1, "", 1);
+  test("abcdefghij", 5, 1, "abcde", 5);
+  test("abcdefghij", 5, 1, "abcdefghij", 5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 5);
+  test("abcdefghij", 5, 2, "", 2);
+  test("abcdefghij", 5, 2, "abcde", 5);
+  test("abcdefghij", 5, 2, "abcdefghij", 5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 5);
+  test("abcdefghij", 5, 4, "", 4);
+  test("abcdefghij", 5, 4, "abcde", 5);
+  test("abcdefghij", 5, 4, "abcdefghij", 5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 5);
+  test("abcdefghij", 5, 5, "", 5);
+  test("abcdefghij", 5, 5, "abcde", 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 5);
+  test("abcdefghij", 5, 6, "", 5);
+  test("abcdefghij", 5, 6, "abcde", 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 5);
+  test("abcdefghij", 9, 0, "", 0);
+  test("abcdefghij", 9, 0, "abcde", -5);
+  test("abcdefghij", 9, 0, "abcdefghij", -10);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghij", 9, 1, "", 1);
+  test("abcdefghij", 9, 1, "abcde", 9);
+  test("abcdefghij", 9, 1, "abcdefghij", 9);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 9);
+  test("abcdefghij", 9, 2, "", 1);
+  test("abcdefghij", 9, 2, "abcde", 9);
+  test("abcdefghij", 9, 2, "abcdefghij", 9);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 9);
+  test("abcdefghij", 10, 0, "", 0);
+  test("abcdefghij", 10, 0, "abcde", -5);
+  test("abcdefghij", 10, 0, "abcdefghij", -10);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghij", 10, 1, "", 0);
+  test("abcdefghij", 10, 1, "abcde", -5);
+  test("abcdefghij", 10, 1, "abcdefghij", -10);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", -20);
+  test("abcdefghij", 11, 0, "", 0);
+  test("abcdefghij", 11, 0, "abcde", 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0);
 }
 
-void test2()
-{
-    test("abcdefghijklmnopqrst", 0, 0, "", 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", -5);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", -10);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghijklmnopqrst", 0, 1, "", 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", -4);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", -9);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", -19);
-    test("abcdefghijklmnopqrst", 0, 10, "", 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 5);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", -10);
-    test("abcdefghijklmnopqrst", 0, 19, "", 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 14);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", -1);
-    test("abcdefghijklmnopqrst", 0, 20, "", 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 15);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0);
-    test("abcdefghijklmnopqrst", 0, 21, "", 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 15);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0);
-    test("abcdefghijklmnopqrst", 1, 0, "", 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", -5);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", -10);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghijklmnopqrst", 1, 1, "", 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1);
-    test("abcdefghijklmnopqrst", 1, 9, "", 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1);
-    test("abcdefghijklmnopqrst", 1, 18, "", 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1);
-    test("abcdefghijklmnopqrst", 1, 19, "", 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1);
-    test("abcdefghijklmnopqrst", 1, 20, "", 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1);
-    test("abcdefghijklmnopqrst", 10, 0, "", 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", -5);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", -10);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghijklmnopqrst", 10, 1, "", 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10);
-    test("abcdefghijklmnopqrst", 10, 5, "", 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10);
-    test("abcdefghijklmnopqrst", 10, 9, "", 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10);
-    test("abcdefghijklmnopqrst", 10, 10, "", 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10);
-    test("abcdefghijklmnopqrst", 10, 11, "", 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10);
-    test("abcdefghijklmnopqrst", 19, 0, "", 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", -5);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", -10);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghijklmnopqrst", 19, 1, "", 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19);
-    test("abcdefghijklmnopqrst", 19, 2, "", 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19);
-    test("abcdefghijklmnopqrst", 20, 0, "", 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", -5);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", -10);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghijklmnopqrst", 20, 1, "", 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", -5);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", -10);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", -20);
-    test("abcdefghijklmnopqrst", 21, 0, "", 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0);
+void test2() {
+  test("abcdefghijklmnopqrst", 0, 0, "", 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", -5);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", -10);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghijklmnopqrst", 0, 1, "", 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", -4);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", -9);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", -19);
+  test("abcdefghijklmnopqrst", 0, 10, "", 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 5);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", -10);
+  test("abcdefghijklmnopqrst", 0, 19, "", 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 14);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", -1);
+  test("abcdefghijklmnopqrst", 0, 20, "", 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 15);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0);
+  test("abcdefghijklmnopqrst", 0, 21, "", 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 15);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0);
+  test("abcdefghijklmnopqrst", 1, 0, "", 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", -5);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", -10);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghijklmnopqrst", 1, 1, "", 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1);
+  test("abcdefghijklmnopqrst", 1, 9, "", 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1);
+  test("abcdefghijklmnopqrst", 1, 18, "", 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1);
+  test("abcdefghijklmnopqrst", 1, 19, "", 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1);
+  test("abcdefghijklmnopqrst", 1, 20, "", 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1);
+  test("abcdefghijklmnopqrst", 10, 0, "", 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", -5);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", -10);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghijklmnopqrst", 10, 1, "", 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10);
+  test("abcdefghijklmnopqrst", 10, 5, "", 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10);
+  test("abcdefghijklmnopqrst", 10, 9, "", 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10);
+  test("abcdefghijklmnopqrst", 10, 10, "", 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10);
+  test("abcdefghijklmnopqrst", 10, 11, "", 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10);
+  test("abcdefghijklmnopqrst", 19, 0, "", 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", -5);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", -10);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghijklmnopqrst", 19, 1, "", 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19);
+  test("abcdefghijklmnopqrst", 19, 2, "", 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19);
+  test("abcdefghijklmnopqrst", 20, 0, "", 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", -5);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", -10);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghijklmnopqrst", 20, 1, "", 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", -5);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", -10);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", -20);
+  test("abcdefghijklmnopqrst", 21, 0, "", 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0);
 }
 
+int main(int, char**) {
+  test0();
+  test1();
+  test2();
 
-int main(int, char**)
-{
-    test0();
-    test1();
-    test2();
-
-    {
+  {
     test("", 0, 0, "", 0);
     test("", 0, 0, "abcde", -5);
     test("", 0, 0, "abcdefghij", -10);
     test("", 0, 0, "abcdefghijklmnopqrst", -20);
     test("abcde", 0, 2, "", 5);
-    test("abcde", 0, 6,"abcde", 0);
+    test("abcde", 0, 6, "abcde", 0);
     test("abcde", 0, 6, "abcdefghij", -5);
     test("abcde", 0, 6, "abcdefghijklmnopqrst", -15);
     test("abcdefghij", 3, 3, "", 10);
-    test("abcdefghij", 3, 3,"abcde", 5);
+    test("abcdefghij", 3, 3, "abcde", 5);
     test("abcdefghij", 3, 3, "def", 0);
     test("abcdefghij", 0, 4, "abcdefghijklmnopqrst", -10);
     test("abcdefghijklmnopqrst", 5, 5, "", 20);
     test("abcdefghijklmnopqrst", 0, 8, "abcde", 15);
     test("abcdefghijklmnopqrst", 0, 12, "abcdefghij", 10);
     test("abcdefghijklmnopqrst", 0, static_cast<std::size_t>(-1), "abcdefghijklmnopqrst", 0);
-    }
+  }
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
+  {
     test(L"", 0, 0, L"", 0);
     test(L"", 0, 0, L"abcde", -5);
     test(L"", 0, 0, L"abcdefghij", -10);
@@ -399,11 +390,11 @@ int main(int, char**)
     test(L"abcdefghijklmnopqrst", 0, 8, L"abcde", 15);
     test(L"abcdefghijklmnopqrst", 0, 12, L"abcdefghij", 10);
     test(L"abcdefghijklmnopqrst", 0, static_cast<std::size_t>(-1), L"abcdefghijklmnopqrst", 0);
-    }
+  }
 #endif
 
 #if TEST_STD_VER >= 11
-    {
+  {
     test(U"", 0, 0, U"", 0);
     test(U"", 0, 0, U"abcde", -5);
     test(U"", 0, 0, U"abcdefghij", -10);
@@ -420,9 +411,9 @@ int main(int, char**)
     test(U"abcdefghijklmnopqrst", 0, 8, U"abcde", 15);
     test(U"abcdefghijklmnopqrst", 0, 12, U"abcdefghij", 10);
     test(U"abcdefghijklmnopqrst", 0, static_cast<std::size_t>(-1), U"abcdefghijklmnopqrst", 0);
-    }
+  }
 
-    {
+  {
     test(u"", 0, 0, u"", 0);
     test(u"", 0, 0, u"abcde", -5);
     test(u"", 0, 0, u"abcdefghij", -10);
@@ -439,19 +430,19 @@ int main(int, char**)
     test(u"abcdefghijklmnopqrst", 0, 8, u"abcde", 15);
     test(u"abcdefghijklmnopqrst", 0, 12, u"abcdefghij", 10);
     test(u"abcdefghijklmnopqrst", 0, static_cast<std::size_t>(-1), u"abcdefghijklmnopqrst", 0);
-    }
+  }
 #endif
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcde", 5 };
-    static_assert ( sv1.compare(0, 0, "") == 0, "" );
-    static_assert ( sv1.compare(0, 0, "abcde") < 0, "" );
-    static_assert ( sv2.compare(0, 2, "") > 0, "" );
-    static_assert ( sv2.compare(0, 6, "abcde") == 0, "" );
-    }
+    constexpr SV sv1;
+    constexpr SV sv2{"abcde", 5};
+    static_assert(sv1.compare(0, 0, "") == 0, "");
+    static_assert(sv1.compare(0, 0, "abcde") < 0, "");
+    static_assert(sv2.compare(0, 2, "") > 0, "");
+    static_assert(sv2.compare(0, 6, "abcde") == 0, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv.pass.cpp b/libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv.pass.cpp
index c1999d292882be0..6974dceb5d3e0e2 100644
--- a/libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv.pass.cpp
@@ -19,388 +19,382 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-int sign ( int x ) { return x > 0 ? 1 : ( x < 0 ? -1 : 0 ); }
+int sign(int x) { return x > 0 ? 1 : (x < 0 ? -1 : 0); }
 
-template<typename CharT>
-void test1 ( std::basic_string_view<CharT> sv1, std::size_t pos1, size_t n1,
-            std::basic_string_view<CharT> sv2, int expected ) {
+template <typename CharT>
+void test1(
+    std::basic_string_view<CharT> sv1, std::size_t pos1, size_t n1, std::basic_string_view<CharT> sv2, int expected) {
 #ifdef TEST_HAS_NO_EXCEPTIONS
-    if (pos1 <= sv1.size())
-        assert(sign( sv1.compare(pos1, n1, sv2)) == sign(expected));
+  if (pos1 <= sv1.size())
+    assert(sign(sv1.compare(pos1, n1, sv2)) == sign(expected));
 #else
-    try {
-        assert(sign( sv1.compare(pos1, n1, sv2)) == sign(expected));
-        assert(pos1 <= sv1.size());
-    }
-    catch (const std::out_of_range&) {
-        assert(pos1 > sv1.size());
-    }
+  try {
+    assert(sign(sv1.compare(pos1, n1, sv2)) == sign(expected));
+    assert(pos1 <= sv1.size());
+  } catch (const std::out_of_range&) {
+    assert(pos1 > sv1.size());
+  }
 #endif
 }
 
-
-template<typename CharT>
-void test ( const CharT *s1, std::size_t pos1, size_t n1, const CharT  *s2, 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, expected);
+template <typename CharT>
+void test(const CharT* s1, std::size_t pos1, size_t n1, const CharT* s2, 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, expected);
 }
 
-void test0()
-{
-    test("", 0, 0, "", 0);
-    test("", 0, 0, "abcde", -5);
-    test("", 0, 0, "abcdefghij", -10);
-    test("", 0, 0, "abcdefghijklmnopqrst", -20);
-    test("", 0, 1, "", 0);
-    test("", 0, 1, "abcde", -5);
-    test("", 0, 1, "abcdefghij", -10);
-    test("", 0, 1, "abcdefghijklmnopqrst", -20);
-    test("", 1, 0, "", 0);
-    test("", 1, 0, "abcde", 0);
-    test("", 1, 0, "abcdefghij", 0);
-    test("", 1, 0, "abcdefghijklmnopqrst", 0);
-    test("abcde", 0, 0, "", 0);
-    test("abcde", 0, 0, "abcde", -5);
-    test("abcde", 0, 0, "abcdefghij", -10);
-    test("abcde", 0, 0, "abcdefghijklmnopqrst", -20);
-    test("abcde", 0, 1, "", 1);
-    test("abcde", 0, 1, "abcde", -4);
-    test("abcde", 0, 1, "abcdefghij", -9);
-    test("abcde", 0, 1, "abcdefghijklmnopqrst", -19);
-    test("abcde", 0, 2, "", 2);
-    test("abcde", 0, 2, "abcde", -3);
-    test("abcde", 0, 2, "abcdefghij", -8);
-    test("abcde", 0, 2, "abcdefghijklmnopqrst", -18);
-    test("abcde", 0, 4, "", 4);
-    test("abcde", 0, 4, "abcde", -1);
-    test("abcde", 0, 4, "abcdefghij", -6);
-    test("abcde", 0, 4, "abcdefghijklmnopqrst", -16);
-    test("abcde", 0, 5, "", 5);
-    test("abcde", 0, 5, "abcde", 0);
-    test("abcde", 0, 5, "abcdefghij", -5);
-    test("abcde", 0, 5, "abcdefghijklmnopqrst", -15);
-    test("abcde", 0, 6, "", 5);
-    test("abcde", 0, 6, "abcde", 0);
-    test("abcde", 0, 6, "abcdefghij", -5);
-    test("abcde", 0, 6, "abcdefghijklmnopqrst", -15);
-    test("abcde", 1, 0, "", 0);
-    test("abcde", 1, 0, "abcde", -5);
-    test("abcde", 1, 0, "abcdefghij", -10);
-    test("abcde", 1, 0, "abcdefghijklmnopqrst", -20);
-    test("abcde", 1, 1, "", 1);
-    test("abcde", 1, 1, "abcde", 1);
-    test("abcde", 1, 1, "abcdefghij", 1);
-    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1);
-    test("abcde", 1, 2, "", 2);
-    test("abcde", 1, 2, "abcde", 1);
-    test("abcde", 1, 2, "abcdefghij", 1);
-    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1);
-    test("abcde", 1, 3, "", 3);
-    test("abcde", 1, 3, "abcde", 1);
-    test("abcde", 1, 3, "abcdefghij", 1);
-    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1);
-    test("abcde", 1, 4, "", 4);
-    test("abcde", 1, 4, "abcde", 1);
-    test("abcde", 1, 4, "abcdefghij", 1);
-    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1);
-    test("abcde", 1, 5, "", 4);
-    test("abcde", 1, 5, "abcde", 1);
-    test("abcde", 1, 5, "abcdefghij", 1);
-    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1);
-    test("abcde", 2, 0, "", 0);
-    test("abcde", 2, 0, "abcde", -5);
-    test("abcde", 2, 0, "abcdefghij", -10);
-    test("abcde", 2, 0, "abcdefghijklmnopqrst", -20);
-    test("abcde", 2, 1, "", 1);
-    test("abcde", 2, 1, "abcde", 2);
-    test("abcde", 2, 1, "abcdefghij", 2);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 2);
-    test("abcde", 2, 2, "", 2);
-    test("abcde", 2, 2, "abcde", 2);
-    test("abcde", 2, 2, "abcdefghij", 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 2);
-    test("abcde", 2, 3, "", 3);
-    test("abcde", 2, 3, "abcde", 2);
-    test("abcde", 2, 3, "abcdefghij", 2);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 2);
-    test("abcde", 2, 4, "", 3);
-    test("abcde", 2, 4, "abcde", 2);
-    test("abcde", 2, 4, "abcdefghij", 2);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 2);
-    test("abcde", 4, 0, "", 0);
-    test("abcde", 4, 0, "abcde", -5);
-    test("abcde", 4, 0, "abcdefghij", -10);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", -20);
-    test("abcde", 4, 1, "", 1);
-    test("abcde", 4, 1, "abcde", 4);
-    test("abcde", 4, 1, "abcdefghij", 4);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 4);
-    test("abcde", 4, 2, "", 1);
-    test("abcde", 4, 2, "abcde", 4);
-    test("abcde", 4, 2, "abcdefghij", 4);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 4);
-    test("abcde", 5, 0, "", 0);
-    test("abcde", 5, 0, "abcde", -5);
-    test("abcde", 5, 0, "abcdefghij", -10);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", -20);
-    test("abcde", 5, 1, "", 0);
-    test("abcde", 5, 1, "abcde", -5);
-    test("abcde", 5, 1, "abcdefghij", -10);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", -20);
+void test0() {
+  test("", 0, 0, "", 0);
+  test("", 0, 0, "abcde", -5);
+  test("", 0, 0, "abcdefghij", -10);
+  test("", 0, 0, "abcdefghijklmnopqrst", -20);
+  test("", 0, 1, "", 0);
+  test("", 0, 1, "abcde", -5);
+  test("", 0, 1, "abcdefghij", -10);
+  test("", 0, 1, "abcdefghijklmnopqrst", -20);
+  test("", 1, 0, "", 0);
+  test("", 1, 0, "abcde", 0);
+  test("", 1, 0, "abcdefghij", 0);
+  test("", 1, 0, "abcdefghijklmnopqrst", 0);
+  test("abcde", 0, 0, "", 0);
+  test("abcde", 0, 0, "abcde", -5);
+  test("abcde", 0, 0, "abcdefghij", -10);
+  test("abcde", 0, 0, "abcdefghijklmnopqrst", -20);
+  test("abcde", 0, 1, "", 1);
+  test("abcde", 0, 1, "abcde", -4);
+  test("abcde", 0, 1, "abcdefghij", -9);
+  test("abcde", 0, 1, "abcdefghijklmnopqrst", -19);
+  test("abcde", 0, 2, "", 2);
+  test("abcde", 0, 2, "abcde", -3);
+  test("abcde", 0, 2, "abcdefghij", -8);
+  test("abcde", 0, 2, "abcdefghijklmnopqrst", -18);
+  test("abcde", 0, 4, "", 4);
+  test("abcde", 0, 4, "abcde", -1);
+  test("abcde", 0, 4, "abcdefghij", -6);
+  test("abcde", 0, 4, "abcdefghijklmnopqrst", -16);
+  test("abcde", 0, 5, "", 5);
+  test("abcde", 0, 5, "abcde", 0);
+  test("abcde", 0, 5, "abcdefghij", -5);
+  test("abcde", 0, 5, "abcdefghijklmnopqrst", -15);
+  test("abcde", 0, 6, "", 5);
+  test("abcde", 0, 6, "abcde", 0);
+  test("abcde", 0, 6, "abcdefghij", -5);
+  test("abcde", 0, 6, "abcdefghijklmnopqrst", -15);
+  test("abcde", 1, 0, "", 0);
+  test("abcde", 1, 0, "abcde", -5);
+  test("abcde", 1, 0, "abcdefghij", -10);
+  test("abcde", 1, 0, "abcdefghijklmnopqrst", -20);
+  test("abcde", 1, 1, "", 1);
+  test("abcde", 1, 1, "abcde", 1);
+  test("abcde", 1, 1, "abcdefghij", 1);
+  test("abcde", 1, 1, "abcdefghijklmnopqrst", 1);
+  test("abcde", 1, 2, "", 2);
+  test("abcde", 1, 2, "abcde", 1);
+  test("abcde", 1, 2, "abcdefghij", 1);
+  test("abcde", 1, 2, "abcdefghijklmnopqrst", 1);
+  test("abcde", 1, 3, "", 3);
+  test("abcde", 1, 3, "abcde", 1);
+  test("abcde", 1, 3, "abcdefghij", 1);
+  test("abcde", 1, 3, "abcdefghijklmnopqrst", 1);
+  test("abcde", 1, 4, "", 4);
+  test("abcde", 1, 4, "abcde", 1);
+  test("abcde", 1, 4, "abcdefghij", 1);
+  test("abcde", 1, 4, "abcdefghijklmnopqrst", 1);
+  test("abcde", 1, 5, "", 4);
+  test("abcde", 1, 5, "abcde", 1);
+  test("abcde", 1, 5, "abcdefghij", 1);
+  test("abcde", 1, 5, "abcdefghijklmnopqrst", 1);
+  test("abcde", 2, 0, "", 0);
+  test("abcde", 2, 0, "abcde", -5);
+  test("abcde", 2, 0, "abcdefghij", -10);
+  test("abcde", 2, 0, "abcdefghijklmnopqrst", -20);
+  test("abcde", 2, 1, "", 1);
+  test("abcde", 2, 1, "abcde", 2);
+  test("abcde", 2, 1, "abcdefghij", 2);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 2);
+  test("abcde", 2, 2, "", 2);
+  test("abcde", 2, 2, "abcde", 2);
+  test("abcde", 2, 2, "abcdefghij", 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 2);
+  test("abcde", 2, 3, "", 3);
+  test("abcde", 2, 3, "abcde", 2);
+  test("abcde", 2, 3, "abcdefghij", 2);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 2);
+  test("abcde", 2, 4, "", 3);
+  test("abcde", 2, 4, "abcde", 2);
+  test("abcde", 2, 4, "abcdefghij", 2);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 2);
+  test("abcde", 4, 0, "", 0);
+  test("abcde", 4, 0, "abcde", -5);
+  test("abcde", 4, 0, "abcdefghij", -10);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", -20);
+  test("abcde", 4, 1, "", 1);
+  test("abcde", 4, 1, "abcde", 4);
+  test("abcde", 4, 1, "abcdefghij", 4);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 4);
+  test("abcde", 4, 2, "", 1);
+  test("abcde", 4, 2, "abcde", 4);
+  test("abcde", 4, 2, "abcdefghij", 4);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 4);
+  test("abcde", 5, 0, "", 0);
+  test("abcde", 5, 0, "abcde", -5);
+  test("abcde", 5, 0, "abcdefghij", -10);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", -20);
+  test("abcde", 5, 1, "", 0);
+  test("abcde", 5, 1, "abcde", -5);
+  test("abcde", 5, 1, "abcdefghij", -10);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", -20);
 }
 
-void test1()
-{
-    test("abcde", 6, 0, "", 0);
-    test("abcde", 6, 0, "abcde", 0);
-    test("abcde", 6, 0, "abcdefghij", 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0);
-    test("abcdefghij", 0, 0, "", 0);
-    test("abcdefghij", 0, 0, "abcde", -5);
-    test("abcdefghij", 0, 0, "abcdefghij", -10);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghij", 0, 1, "", 1);
-    test("abcdefghij", 0, 1, "abcde", -4);
-    test("abcdefghij", 0, 1, "abcdefghij", -9);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", -19);
-    test("abcdefghij", 0, 5, "", 5);
-    test("abcdefghij", 0, 5, "abcde", 0);
-    test("abcdefghij", 0, 5, "abcdefghij", -5);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", -15);
-    test("abcdefghij", 0, 9, "", 9);
-    test("abcdefghij", 0, 9, "abcde", 4);
-    test("abcdefghij", 0, 9, "abcdefghij", -1);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", -11);
-    test("abcdefghij", 0, 10, "", 10);
-    test("abcdefghij", 0, 10, "abcde", 5);
-    test("abcdefghij", 0, 10, "abcdefghij", 0);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", -10);
-    test("abcdefghij", 0, 11, "", 10);
-    test("abcdefghij", 0, 11, "abcde", 5);
-    test("abcdefghij", 0, 11, "abcdefghij", 0);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", -10);
-    test("abcdefghij", 1, 0, "", 0);
-    test("abcdefghij", 1, 0, "abcde", -5);
-    test("abcdefghij", 1, 0, "abcdefghij", -10);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghij", 1, 1, "", 1);
-    test("abcdefghij", 1, 1, "abcde", 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1);
-    test("abcdefghij", 1, 4, "", 4);
-    test("abcdefghij", 1, 4, "abcde", 1);
-    test("abcdefghij", 1, 4, "abcdefghij", 1);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1);
-    test("abcdefghij", 1, 8, "", 8);
-    test("abcdefghij", 1, 8, "abcde", 1);
-    test("abcdefghij", 1, 8, "abcdefghij", 1);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1);
-    test("abcdefghij", 1, 9, "", 9);
-    test("abcdefghij", 1, 9, "abcde", 1);
-    test("abcdefghij", 1, 9, "abcdefghij", 1);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1);
-    test("abcdefghij", 1, 10, "", 9);
-    test("abcdefghij", 1, 10, "abcde", 1);
-    test("abcdefghij", 1, 10, "abcdefghij", 1);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1);
-    test("abcdefghij", 5, 0, "", 0);
-    test("abcdefghij", 5, 0, "abcde", -5);
-    test("abcdefghij", 5, 0, "abcdefghij", -10);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghij", 5, 1, "", 1);
-    test("abcdefghij", 5, 1, "abcde", 5);
-    test("abcdefghij", 5, 1, "abcdefghij", 5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 5);
-    test("abcdefghij", 5, 2, "", 2);
-    test("abcdefghij", 5, 2, "abcde", 5);
-    test("abcdefghij", 5, 2, "abcdefghij", 5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 5);
-    test("abcdefghij", 5, 4, "", 4);
-    test("abcdefghij", 5, 4, "abcde", 5);
-    test("abcdefghij", 5, 4, "abcdefghij", 5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 5);
-    test("abcdefghij", 5, 5, "", 5);
-    test("abcdefghij", 5, 5, "abcde", 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 5);
-    test("abcdefghij", 5, 6, "", 5);
-    test("abcdefghij", 5, 6, "abcde", 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 5);
-    test("abcdefghij", 9, 0, "", 0);
-    test("abcdefghij", 9, 0, "abcde", -5);
-    test("abcdefghij", 9, 0, "abcdefghij", -10);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghij", 9, 1, "", 1);
-    test("abcdefghij", 9, 1, "abcde", 9);
-    test("abcdefghij", 9, 1, "abcdefghij", 9);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 9);
-    test("abcdefghij", 9, 2, "", 1);
-    test("abcdefghij", 9, 2, "abcde", 9);
-    test("abcdefghij", 9, 2, "abcdefghij", 9);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 9);
-    test("abcdefghij", 10, 0, "", 0);
-    test("abcdefghij", 10, 0, "abcde", -5);
-    test("abcdefghij", 10, 0, "abcdefghij", -10);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghij", 10, 1, "", 0);
-    test("abcdefghij", 10, 1, "abcde", -5);
-    test("abcdefghij", 10, 1, "abcdefghij", -10);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", -20);
-    test("abcdefghij", 11, 0, "", 0);
-    test("abcdefghij", 11, 0, "abcde", 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0);
+void test1() {
+  test("abcde", 6, 0, "", 0);
+  test("abcde", 6, 0, "abcde", 0);
+  test("abcde", 6, 0, "abcdefghij", 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 0);
+  test("abcdefghij", 0, 0, "", 0);
+  test("abcdefghij", 0, 0, "abcde", -5);
+  test("abcdefghij", 0, 0, "abcdefghij", -10);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghij", 0, 1, "", 1);
+  test("abcdefghij", 0, 1, "abcde", -4);
+  test("abcdefghij", 0, 1, "abcdefghij", -9);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", -19);
+  test("abcdefghij", 0, 5, "", 5);
+  test("abcdefghij", 0, 5, "abcde", 0);
+  test("abcdefghij", 0, 5, "abcdefghij", -5);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", -15);
+  test("abcdefghij", 0, 9, "", 9);
+  test("abcdefghij", 0, 9, "abcde", 4);
+  test("abcdefghij", 0, 9, "abcdefghij", -1);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", -11);
+  test("abcdefghij", 0, 10, "", 10);
+  test("abcdefghij", 0, 10, "abcde", 5);
+  test("abcdefghij", 0, 10, "abcdefghij", 0);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", -10);
+  test("abcdefghij", 0, 11, "", 10);
+  test("abcdefghij", 0, 11, "abcde", 5);
+  test("abcdefghij", 0, 11, "abcdefghij", 0);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", -10);
+  test("abcdefghij", 1, 0, "", 0);
+  test("abcdefghij", 1, 0, "abcde", -5);
+  test("abcdefghij", 1, 0, "abcdefghij", -10);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghij", 1, 1, "", 1);
+  test("abcdefghij", 1, 1, "abcde", 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1);
+  test("abcdefghij", 1, 4, "", 4);
+  test("abcdefghij", 1, 4, "abcde", 1);
+  test("abcdefghij", 1, 4, "abcdefghij", 1);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1);
+  test("abcdefghij", 1, 8, "", 8);
+  test("abcdefghij", 1, 8, "abcde", 1);
+  test("abcdefghij", 1, 8, "abcdefghij", 1);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1);
+  test("abcdefghij", 1, 9, "", 9);
+  test("abcdefghij", 1, 9, "abcde", 1);
+  test("abcdefghij", 1, 9, "abcdefghij", 1);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1);
+  test("abcdefghij", 1, 10, "", 9);
+  test("abcdefghij", 1, 10, "abcde", 1);
+  test("abcdefghij", 1, 10, "abcdefghij", 1);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1);
+  test("abcdefghij", 5, 0, "", 0);
+  test("abcdefghij", 5, 0, "abcde", -5);
+  test("abcdefghij", 5, 0, "abcdefghij", -10);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghij", 5, 1, "", 1);
+  test("abcdefghij", 5, 1, "abcde", 5);
+  test("abcdefghij", 5, 1, "abcdefghij", 5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 5);
+  test("abcdefghij", 5, 2, "", 2);
+  test("abcdefghij", 5, 2, "abcde", 5);
+  test("abcdefghij", 5, 2, "abcdefghij", 5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 5);
+  test("abcdefghij", 5, 4, "", 4);
+  test("abcdefghij", 5, 4, "abcde", 5);
+  test("abcdefghij", 5, 4, "abcdefghij", 5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 5);
+  test("abcdefghij", 5, 5, "", 5);
+  test("abcdefghij", 5, 5, "abcde", 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 5);
+  test("abcdefghij", 5, 6, "", 5);
+  test("abcdefghij", 5, 6, "abcde", 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 5);
+  test("abcdefghij", 9, 0, "", 0);
+  test("abcdefghij", 9, 0, "abcde", -5);
+  test("abcdefghij", 9, 0, "abcdefghij", -10);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghij", 9, 1, "", 1);
+  test("abcdefghij", 9, 1, "abcde", 9);
+  test("abcdefghij", 9, 1, "abcdefghij", 9);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 9);
+  test("abcdefghij", 9, 2, "", 1);
+  test("abcdefghij", 9, 2, "abcde", 9);
+  test("abcdefghij", 9, 2, "abcdefghij", 9);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 9);
+  test("abcdefghij", 10, 0, "", 0);
+  test("abcdefghij", 10, 0, "abcde", -5);
+  test("abcdefghij", 10, 0, "abcdefghij", -10);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghij", 10, 1, "", 0);
+  test("abcdefghij", 10, 1, "abcde", -5);
+  test("abcdefghij", 10, 1, "abcdefghij", -10);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", -20);
+  test("abcdefghij", 11, 0, "", 0);
+  test("abcdefghij", 11, 0, "abcde", 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0);
 }
 
-void test2()
-{
-    test("abcdefghijklmnopqrst", 0, 0, "", 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", -5);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", -10);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghijklmnopqrst", 0, 1, "", 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", -4);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", -9);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", -19);
-    test("abcdefghijklmnopqrst", 0, 10, "", 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 5);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", -10);
-    test("abcdefghijklmnopqrst", 0, 19, "", 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 14);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", -1);
-    test("abcdefghijklmnopqrst", 0, 20, "", 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 15);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0);
-    test("abcdefghijklmnopqrst", 0, 21, "", 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 15);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0);
-    test("abcdefghijklmnopqrst", 1, 0, "", 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", -5);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", -10);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghijklmnopqrst", 1, 1, "", 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1);
-    test("abcdefghijklmnopqrst", 1, 9, "", 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1);
-    test("abcdefghijklmnopqrst", 1, 18, "", 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1);
-    test("abcdefghijklmnopqrst", 1, 19, "", 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1);
-    test("abcdefghijklmnopqrst", 1, 20, "", 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1);
-    test("abcdefghijklmnopqrst", 10, 0, "", 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", -5);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", -10);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghijklmnopqrst", 10, 1, "", 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10);
-    test("abcdefghijklmnopqrst", 10, 5, "", 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10);
-    test("abcdefghijklmnopqrst", 10, 9, "", 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10);
-    test("abcdefghijklmnopqrst", 10, 10, "", 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10);
-    test("abcdefghijklmnopqrst", 10, 11, "", 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10);
-    test("abcdefghijklmnopqrst", 19, 0, "", 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", -5);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", -10);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghijklmnopqrst", 19, 1, "", 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19);
-    test("abcdefghijklmnopqrst", 19, 2, "", 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19);
-    test("abcdefghijklmnopqrst", 20, 0, "", 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", -5);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", -10);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", -20);
-    test("abcdefghijklmnopqrst", 20, 1, "", 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", -5);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", -10);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", -20);
-    test("abcdefghijklmnopqrst", 21, 0, "", 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0);
+void test2() {
+  test("abcdefghijklmnopqrst", 0, 0, "", 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", -5);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", -10);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghijklmnopqrst", 0, 1, "", 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", -4);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", -9);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", -19);
+  test("abcdefghijklmnopqrst", 0, 10, "", 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 5);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", -10);
+  test("abcdefghijklmnopqrst", 0, 19, "", 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 14);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", -1);
+  test("abcdefghijklmnopqrst", 0, 20, "", 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 15);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0);
+  test("abcdefghijklmnopqrst", 0, 21, "", 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 15);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0);
+  test("abcdefghijklmnopqrst", 1, 0, "", 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", -5);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", -10);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghijklmnopqrst", 1, 1, "", 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1);
+  test("abcdefghijklmnopqrst", 1, 9, "", 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1);
+  test("abcdefghijklmnopqrst", 1, 18, "", 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1);
+  test("abcdefghijklmnopqrst", 1, 19, "", 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1);
+  test("abcdefghijklmnopqrst", 1, 20, "", 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1);
+  test("abcdefghijklmnopqrst", 10, 0, "", 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", -5);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", -10);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghijklmnopqrst", 10, 1, "", 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10);
+  test("abcdefghijklmnopqrst", 10, 5, "", 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10);
+  test("abcdefghijklmnopqrst", 10, 9, "", 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10);
+  test("abcdefghijklmnopqrst", 10, 10, "", 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10);
+  test("abcdefghijklmnopqrst", 10, 11, "", 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10);
+  test("abcdefghijklmnopqrst", 19, 0, "", 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", -5);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", -10);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghijklmnopqrst", 19, 1, "", 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19);
+  test("abcdefghijklmnopqrst", 19, 2, "", 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19);
+  test("abcdefghijklmnopqrst", 20, 0, "", 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", -5);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", -10);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", -20);
+  test("abcdefghijklmnopqrst", 20, 1, "", 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", -5);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", -10);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", -20);
+  test("abcdefghijklmnopqrst", 21, 0, "", 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0);
 }
 
-
 int main(int, char**) {
-    test0();
-    test1();
-    test2();
+  test0();
+  test1();
+  test2();
 
-    {
+  {
     test("abcde", 5, 1, "", 0);
     test("abcde", 2, 4, "", 3);
     test("abcde", 2, 4, "abcde", 2);
     test("ABCde", 2, 4, "abcde", -1);
-    }
+  }
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
+  {
     test(L"abcde", 5, 1, L"", 0);
     test(L"abcde", 2, 4, L"", 3);
     test(L"abcde", 2, 4, L"abcde", 2);
     test(L"ABCde", 2, 4, L"abcde", -1);
-    }
+  }
 #endif
 
 #if TEST_STD_VER >= 11
-    {
+  {
     test(u"abcde", 5, 1, u"", 0);
     test(u"abcde", 2, 4, u"", 3);
     test(u"abcde", 2, 4, u"abcde", 2);
     test(u"ABCde", 2, 4, u"abcde", -1);
-    }
+  }
 
-    {
+  {
     test(U"abcde", 5, 1, U"", 0);
     test(U"abcde", 2, 4, U"", 3);
     test(U"abcde", 2, 4, U"abcde", 2);
     test(U"ABCde", 2, 4, U"abcde", -1);
-    }
+  }
 #endif
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1 { "abcde", 5 };
-    constexpr SV  sv2 { "abcde", 0 };
-    static_assert ( sv1.compare(5, 1, sv2) == 0, "" );
-    static_assert ( sv1.compare(2, 4, sv2) > 0, "" );
-    }
+    constexpr SV sv1{"abcde", 5};
+    constexpr SV sv2{"abcde", 0};
+    static_assert(sv1.compare(5, 1, sv2) == 0, "");
+    static_assert(sv1.compare(2, 4, sv2) > 0, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv_pointer_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv_pointer_size.pass.cpp
index 4e5af15b9352f43..7368325554c90b7 100644
--- a/libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv_pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv_pointer_size.pass.cpp
@@ -20,1338 +20,1310 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-int sign ( int x ) { return x > 0 ? 1 : ( x < 0 ? -1 : 0 ); }
+int sign(int x) { return x > 0 ? 1 : (x < 0 ? -1 : 0); }
 
-template<typename CharT>
-void test1 ( std::basic_string_view<CharT> sv1, std::size_t pos1, size_t n1,
-             const CharT *s2, std::size_t n2, int expected ) {
+template <typename CharT>
+void test1(
+    std::basic_string_view<CharT> sv1, std::size_t pos1, size_t n1, const CharT* s2, std::size_t n2, int expected) {
 #ifdef TEST_HAS_NO_EXCEPTIONS
-    if (pos1 <= sv1.size())
-        assert(sign(sv1.compare(pos1, n1, s2, n2)) == sign(expected));
+  if (pos1 <= sv1.size())
+    assert(sign(sv1.compare(pos1, n1, s2, n2)) == sign(expected));
 #else
-    try {
-        assert(sign(sv1.compare(pos1, n1, s2, n2)) == sign(expected));
-        assert(pos1 <= sv1.size());
-        }
-    catch (const std::out_of_range&) {
-        assert(pos1 > sv1.size());
-        }
+  try {
+    assert(sign(sv1.compare(pos1, n1, s2, n2)) == sign(expected));
+    assert(pos1 <= sv1.size());
+  } catch (const std::out_of_range&) {
+    assert(pos1 > sv1.size());
+  }
 #endif
 }
 
-
-template<typename CharT>
-void test ( const CharT *s1, std::size_t pos1, size_t n1,
-            const CharT *s2, std::size_t n2,
-            int expected ) {
-    typedef std::basic_string_view<CharT> string_view_t;
-    string_view_t sv1 ( s1 );
-    test1 (sv1, pos1, n1, s2, n2, expected);
+template <typename CharT>
+void test(const CharT* s1, std::size_t pos1, size_t n1, const CharT* s2, std::size_t n2, int expected) {
+  typedef std::basic_string_view<CharT> string_view_t;
+  string_view_t sv1(s1);
+  test1(sv1, pos1, n1, s2, n2, expected);
 }
 
-
-void test0()
-{
-    test("", 0, 0, "", 0, 0);
-    test("", 0, 0, "abcde", 0, 0);
-    test("", 0, 0, "abcde", 1, -1);
-    test("", 0, 0, "abcde", 2, -2);
-    test("", 0, 0, "abcde", 4, -4);
-    test("", 0, 0, "abcde", 5, -5);
-    test("", 0, 0, "abcdefghij", 0, 0);
-    test("", 0, 0, "abcdefghij", 1, -1);
-    test("", 0, 0, "abcdefghij", 5, -5);
-    test("", 0, 0, "abcdefghij", 9, -9);
-    test("", 0, 0, "abcdefghij", 10, -10);
-    test("", 0, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("", 0, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("", 0, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("", 0, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("", 0, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("", 0, 1, "", 0, 0);
-    test("", 0, 1, "abcde", 0, 0);
-    test("", 0, 1, "abcde", 1, -1);
-    test("", 0, 1, "abcde", 2, -2);
-    test("", 0, 1, "abcde", 4, -4);
-    test("", 0, 1, "abcde", 5, -5);
-    test("", 0, 1, "abcdefghij", 0, 0);
-    test("", 0, 1, "abcdefghij", 1, -1);
-    test("", 0, 1, "abcdefghij", 5, -5);
-    test("", 0, 1, "abcdefghij", 9, -9);
-    test("", 0, 1, "abcdefghij", 10, -10);
-    test("", 0, 1, "abcdefghijklmnopqrst", 0, 0);
-    test("", 0, 1, "abcdefghijklmnopqrst", 1, -1);
-    test("", 0, 1, "abcdefghijklmnopqrst", 10, -10);
-    test("", 0, 1, "abcdefghijklmnopqrst", 19, -19);
-    test("", 0, 1, "abcdefghijklmnopqrst", 20, -20);
-    test("", 1, 0, "", 0, 0);
-    test("", 1, 0, "abcde", 0, 0);
-    test("", 1, 0, "abcde", 1, 0);
-    test("", 1, 0, "abcde", 2, 0);
-    test("", 1, 0, "abcde", 4, 0);
-    test("", 1, 0, "abcde", 5, 0);
-    test("", 1, 0, "abcdefghij", 0, 0);
-    test("", 1, 0, "abcdefghij", 1, 0);
-    test("", 1, 0, "abcdefghij", 5, 0);
-    test("", 1, 0, "abcdefghij", 9, 0);
-    test("", 1, 0, "abcdefghij", 10, 0);
-    test("", 1, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("", 1, 0, "abcdefghijklmnopqrst", 1, 0);
-    test("", 1, 0, "abcdefghijklmnopqrst", 10, 0);
-    test("", 1, 0, "abcdefghijklmnopqrst", 19, 0);
-    test("", 1, 0, "abcdefghijklmnopqrst", 20, 0);
-    test("abcde", 0, 0, "", 0, 0);
-    test("abcde", 0, 0, "abcde", 0, 0);
-    test("abcde", 0, 0, "abcde", 1, -1);
-    test("abcde", 0, 0, "abcde", 2, -2);
-    test("abcde", 0, 0, "abcde", 4, -4);
-    test("abcde", 0, 0, "abcde", 5, -5);
-    test("abcde", 0, 0, "abcdefghij", 0, 0);
-    test("abcde", 0, 0, "abcdefghij", 1, -1);
-    test("abcde", 0, 0, "abcdefghij", 5, -5);
-    test("abcde", 0, 0, "abcdefghij", 9, -9);
-    test("abcde", 0, 0, "abcdefghij", 10, -10);
-    test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcde", 0, 1, "", 0, 1);
-    test("abcde", 0, 1, "abcde", 0, 1);
-    test("abcde", 0, 1, "abcde", 1, 0);
-    test("abcde", 0, 1, "abcde", 2, -1);
-    test("abcde", 0, 1, "abcde", 4, -3);
-    test("abcde", 0, 1, "abcde", 5, -4);
-    test("abcde", 0, 1, "abcdefghij", 0, 1);
-    test("abcde", 0, 1, "abcdefghij", 1, 0);
-    test("abcde", 0, 1, "abcdefghij", 5, -4);
-    test("abcde", 0, 1, "abcdefghij", 9, -8);
-    test("abcde", 0, 1, "abcdefghij", 10, -9);
-    test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 1);
-    test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 0);
-    test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, -9);
-    test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, -18);
-    test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, -19);
-    test("abcde", 0, 2, "", 0, 2);
-    test("abcde", 0, 2, "abcde", 0, 2);
-    test("abcde", 0, 2, "abcde", 1, 1);
-    test("abcde", 0, 2, "abcde", 2, 0);
-    test("abcde", 0, 2, "abcde", 4, -2);
-    test("abcde", 0, 2, "abcde", 5, -3);
-    test("abcde", 0, 2, "abcdefghij", 0, 2);
-    test("abcde", 0, 2, "abcdefghij", 1, 1);
-    test("abcde", 0, 2, "abcdefghij", 5, -3);
-    test("abcde", 0, 2, "abcdefghij", 9, -7);
-    test("abcde", 0, 2, "abcdefghij", 10, -8);
-    test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 2);
-    test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 1);
-    test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, -8);
-    test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, -17);
-    test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, -18);
-    test("abcde", 0, 4, "", 0, 4);
-    test("abcde", 0, 4, "abcde", 0, 4);
-    test("abcde", 0, 4, "abcde", 1, 3);
-    test("abcde", 0, 4, "abcde", 2, 2);
+void test0() {
+  test("", 0, 0, "", 0, 0);
+  test("", 0, 0, "abcde", 0, 0);
+  test("", 0, 0, "abcde", 1, -1);
+  test("", 0, 0, "abcde", 2, -2);
+  test("", 0, 0, "abcde", 4, -4);
+  test("", 0, 0, "abcde", 5, -5);
+  test("", 0, 0, "abcdefghij", 0, 0);
+  test("", 0, 0, "abcdefghij", 1, -1);
+  test("", 0, 0, "abcdefghij", 5, -5);
+  test("", 0, 0, "abcdefghij", 9, -9);
+  test("", 0, 0, "abcdefghij", 10, -10);
+  test("", 0, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("", 0, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("", 0, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("", 0, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("", 0, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("", 0, 1, "", 0, 0);
+  test("", 0, 1, "abcde", 0, 0);
+  test("", 0, 1, "abcde", 1, -1);
+  test("", 0, 1, "abcde", 2, -2);
+  test("", 0, 1, "abcde", 4, -4);
+  test("", 0, 1, "abcde", 5, -5);
+  test("", 0, 1, "abcdefghij", 0, 0);
+  test("", 0, 1, "abcdefghij", 1, -1);
+  test("", 0, 1, "abcdefghij", 5, -5);
+  test("", 0, 1, "abcdefghij", 9, -9);
+  test("", 0, 1, "abcdefghij", 10, -10);
+  test("", 0, 1, "abcdefghijklmnopqrst", 0, 0);
+  test("", 0, 1, "abcdefghijklmnopqrst", 1, -1);
+  test("", 0, 1, "abcdefghijklmnopqrst", 10, -10);
+  test("", 0, 1, "abcdefghijklmnopqrst", 19, -19);
+  test("", 0, 1, "abcdefghijklmnopqrst", 20, -20);
+  test("", 1, 0, "", 0, 0);
+  test("", 1, 0, "abcde", 0, 0);
+  test("", 1, 0, "abcde", 1, 0);
+  test("", 1, 0, "abcde", 2, 0);
+  test("", 1, 0, "abcde", 4, 0);
+  test("", 1, 0, "abcde", 5, 0);
+  test("", 1, 0, "abcdefghij", 0, 0);
+  test("", 1, 0, "abcdefghij", 1, 0);
+  test("", 1, 0, "abcdefghij", 5, 0);
+  test("", 1, 0, "abcdefghij", 9, 0);
+  test("", 1, 0, "abcdefghij", 10, 0);
+  test("", 1, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("", 1, 0, "abcdefghijklmnopqrst", 1, 0);
+  test("", 1, 0, "abcdefghijklmnopqrst", 10, 0);
+  test("", 1, 0, "abcdefghijklmnopqrst", 19, 0);
+  test("", 1, 0, "abcdefghijklmnopqrst", 20, 0);
+  test("abcde", 0, 0, "", 0, 0);
+  test("abcde", 0, 0, "abcde", 0, 0);
+  test("abcde", 0, 0, "abcde", 1, -1);
+  test("abcde", 0, 0, "abcde", 2, -2);
+  test("abcde", 0, 0, "abcde", 4, -4);
+  test("abcde", 0, 0, "abcde", 5, -5);
+  test("abcde", 0, 0, "abcdefghij", 0, 0);
+  test("abcde", 0, 0, "abcdefghij", 1, -1);
+  test("abcde", 0, 0, "abcdefghij", 5, -5);
+  test("abcde", 0, 0, "abcdefghij", 9, -9);
+  test("abcde", 0, 0, "abcdefghij", 10, -10);
+  test("abcde", 0, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcde", 0, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcde", 0, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcde", 0, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcde", 0, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcde", 0, 1, "", 0, 1);
+  test("abcde", 0, 1, "abcde", 0, 1);
+  test("abcde", 0, 1, "abcde", 1, 0);
+  test("abcde", 0, 1, "abcde", 2, -1);
+  test("abcde", 0, 1, "abcde", 4, -3);
+  test("abcde", 0, 1, "abcde", 5, -4);
+  test("abcde", 0, 1, "abcdefghij", 0, 1);
+  test("abcde", 0, 1, "abcdefghij", 1, 0);
+  test("abcde", 0, 1, "abcdefghij", 5, -4);
+  test("abcde", 0, 1, "abcdefghij", 9, -8);
+  test("abcde", 0, 1, "abcdefghij", 10, -9);
+  test("abcde", 0, 1, "abcdefghijklmnopqrst", 0, 1);
+  test("abcde", 0, 1, "abcdefghijklmnopqrst", 1, 0);
+  test("abcde", 0, 1, "abcdefghijklmnopqrst", 10, -9);
+  test("abcde", 0, 1, "abcdefghijklmnopqrst", 19, -18);
+  test("abcde", 0, 1, "abcdefghijklmnopqrst", 20, -19);
+  test("abcde", 0, 2, "", 0, 2);
+  test("abcde", 0, 2, "abcde", 0, 2);
+  test("abcde", 0, 2, "abcde", 1, 1);
+  test("abcde", 0, 2, "abcde", 2, 0);
+  test("abcde", 0, 2, "abcde", 4, -2);
+  test("abcde", 0, 2, "abcde", 5, -3);
+  test("abcde", 0, 2, "abcdefghij", 0, 2);
+  test("abcde", 0, 2, "abcdefghij", 1, 1);
+  test("abcde", 0, 2, "abcdefghij", 5, -3);
+  test("abcde", 0, 2, "abcdefghij", 9, -7);
+  test("abcde", 0, 2, "abcdefghij", 10, -8);
+  test("abcde", 0, 2, "abcdefghijklmnopqrst", 0, 2);
+  test("abcde", 0, 2, "abcdefghijklmnopqrst", 1, 1);
+  test("abcde", 0, 2, "abcdefghijklmnopqrst", 10, -8);
+  test("abcde", 0, 2, "abcdefghijklmnopqrst", 19, -17);
+  test("abcde", 0, 2, "abcdefghijklmnopqrst", 20, -18);
+  test("abcde", 0, 4, "", 0, 4);
+  test("abcde", 0, 4, "abcde", 0, 4);
+  test("abcde", 0, 4, "abcde", 1, 3);
+  test("abcde", 0, 4, "abcde", 2, 2);
 }
 
-
-void test1()
-{
-    test("abcde", 0, 4, "abcde", 4, 0);
-    test("abcde", 0, 4, "abcde", 5, -1);
-    test("abcde", 0, 4, "abcdefghij", 0, 4);
-    test("abcde", 0, 4, "abcdefghij", 1, 3);
-    test("abcde", 0, 4, "abcdefghij", 5, -1);
-    test("abcde", 0, 4, "abcdefghij", 9, -5);
-    test("abcde", 0, 4, "abcdefghij", 10, -6);
-    test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 4);
-    test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 3);
-    test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, -6);
-    test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, -15);
-    test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, -16);
-    test("abcde", 0, 5, "", 0, 5);
-    test("abcde", 0, 5, "abcde", 0, 5);
-    test("abcde", 0, 5, "abcde", 1, 4);
-    test("abcde", 0, 5, "abcde", 2, 3);
-    test("abcde", 0, 5, "abcde", 4, 1);
-    test("abcde", 0, 5, "abcde", 5, 0);
-    test("abcde", 0, 5, "abcdefghij", 0, 5);
-    test("abcde", 0, 5, "abcdefghij", 1, 4);
-    test("abcde", 0, 5, "abcdefghij", 5, 0);
-    test("abcde", 0, 5, "abcdefghij", 9, -4);
-    test("abcde", 0, 5, "abcdefghij", 10, -5);
-    test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 5);
-    test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 4);
-    test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, -5);
-    test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, -14);
-    test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, -15);
-    test("abcde", 0, 6, "", 0, 5);
-    test("abcde", 0, 6, "abcde", 0, 5);
-    test("abcde", 0, 6, "abcde", 1, 4);
-    test("abcde", 0, 6, "abcde", 2, 3);
-    test("abcde", 0, 6, "abcde", 4, 1);
-    test("abcde", 0, 6, "abcde", 5, 0);
-    test("abcde", 0, 6, "abcdefghij", 0, 5);
-    test("abcde", 0, 6, "abcdefghij", 1, 4);
-    test("abcde", 0, 6, "abcdefghij", 5, 0);
-    test("abcde", 0, 6, "abcdefghij", 9, -4);
-    test("abcde", 0, 6, "abcdefghij", 10, -5);
-    test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 5);
-    test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 4);
-    test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, -5);
-    test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, -14);
-    test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, -15);
-    test("abcde", 1, 0, "", 0, 0);
-    test("abcde", 1, 0, "abcde", 0, 0);
-    test("abcde", 1, 0, "abcde", 1, -1);
-    test("abcde", 1, 0, "abcde", 2, -2);
-    test("abcde", 1, 0, "abcde", 4, -4);
-    test("abcde", 1, 0, "abcde", 5, -5);
-    test("abcde", 1, 0, "abcdefghij", 0, 0);
-    test("abcde", 1, 0, "abcdefghij", 1, -1);
-    test("abcde", 1, 0, "abcdefghij", 5, -5);
-    test("abcde", 1, 0, "abcdefghij", 9, -9);
-    test("abcde", 1, 0, "abcdefghij", 10, -10);
-    test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcde", 1, 1, "", 0, 1);
-    test("abcde", 1, 1, "abcde", 0, 1);
-    test("abcde", 1, 1, "abcde", 1, 1);
-    test("abcde", 1, 1, "abcde", 2, 1);
-    test("abcde", 1, 1, "abcde", 4, 1);
-    test("abcde", 1, 1, "abcde", 5, 1);
-    test("abcde", 1, 1, "abcdefghij", 0, 1);
-    test("abcde", 1, 1, "abcdefghij", 1, 1);
-    test("abcde", 1, 1, "abcdefghij", 5, 1);
-    test("abcde", 1, 1, "abcdefghij", 9, 1);
-    test("abcde", 1, 1, "abcdefghij", 10, 1);
-    test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 1);
-    test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 1);
-    test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 1);
-    test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 1);
-    test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 1);
-    test("abcde", 1, 2, "", 0, 2);
-    test("abcde", 1, 2, "abcde", 0, 2);
-    test("abcde", 1, 2, "abcde", 1, 1);
-    test("abcde", 1, 2, "abcde", 2, 1);
-    test("abcde", 1, 2, "abcde", 4, 1);
-    test("abcde", 1, 2, "abcde", 5, 1);
-    test("abcde", 1, 2, "abcdefghij", 0, 2);
-    test("abcde", 1, 2, "abcdefghij", 1, 1);
-    test("abcde", 1, 2, "abcdefghij", 5, 1);
-    test("abcde", 1, 2, "abcdefghij", 9, 1);
-    test("abcde", 1, 2, "abcdefghij", 10, 1);
-    test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 2);
-    test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 1);
-    test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 1);
-    test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 1);
-    test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 1);
-    test("abcde", 1, 3, "", 0, 3);
-    test("abcde", 1, 3, "abcde", 0, 3);
-    test("abcde", 1, 3, "abcde", 1, 1);
-    test("abcde", 1, 3, "abcde", 2, 1);
-    test("abcde", 1, 3, "abcde", 4, 1);
-    test("abcde", 1, 3, "abcde", 5, 1);
-    test("abcde", 1, 3, "abcdefghij", 0, 3);
-    test("abcde", 1, 3, "abcdefghij", 1, 1);
+void test1() {
+  test("abcde", 0, 4, "abcde", 4, 0);
+  test("abcde", 0, 4, "abcde", 5, -1);
+  test("abcde", 0, 4, "abcdefghij", 0, 4);
+  test("abcde", 0, 4, "abcdefghij", 1, 3);
+  test("abcde", 0, 4, "abcdefghij", 5, -1);
+  test("abcde", 0, 4, "abcdefghij", 9, -5);
+  test("abcde", 0, 4, "abcdefghij", 10, -6);
+  test("abcde", 0, 4, "abcdefghijklmnopqrst", 0, 4);
+  test("abcde", 0, 4, "abcdefghijklmnopqrst", 1, 3);
+  test("abcde", 0, 4, "abcdefghijklmnopqrst", 10, -6);
+  test("abcde", 0, 4, "abcdefghijklmnopqrst", 19, -15);
+  test("abcde", 0, 4, "abcdefghijklmnopqrst", 20, -16);
+  test("abcde", 0, 5, "", 0, 5);
+  test("abcde", 0, 5, "abcde", 0, 5);
+  test("abcde", 0, 5, "abcde", 1, 4);
+  test("abcde", 0, 5, "abcde", 2, 3);
+  test("abcde", 0, 5, "abcde", 4, 1);
+  test("abcde", 0, 5, "abcde", 5, 0);
+  test("abcde", 0, 5, "abcdefghij", 0, 5);
+  test("abcde", 0, 5, "abcdefghij", 1, 4);
+  test("abcde", 0, 5, "abcdefghij", 5, 0);
+  test("abcde", 0, 5, "abcdefghij", 9, -4);
+  test("abcde", 0, 5, "abcdefghij", 10, -5);
+  test("abcde", 0, 5, "abcdefghijklmnopqrst", 0, 5);
+  test("abcde", 0, 5, "abcdefghijklmnopqrst", 1, 4);
+  test("abcde", 0, 5, "abcdefghijklmnopqrst", 10, -5);
+  test("abcde", 0, 5, "abcdefghijklmnopqrst", 19, -14);
+  test("abcde", 0, 5, "abcdefghijklmnopqrst", 20, -15);
+  test("abcde", 0, 6, "", 0, 5);
+  test("abcde", 0, 6, "abcde", 0, 5);
+  test("abcde", 0, 6, "abcde", 1, 4);
+  test("abcde", 0, 6, "abcde", 2, 3);
+  test("abcde", 0, 6, "abcde", 4, 1);
+  test("abcde", 0, 6, "abcde", 5, 0);
+  test("abcde", 0, 6, "abcdefghij", 0, 5);
+  test("abcde", 0, 6, "abcdefghij", 1, 4);
+  test("abcde", 0, 6, "abcdefghij", 5, 0);
+  test("abcde", 0, 6, "abcdefghij", 9, -4);
+  test("abcde", 0, 6, "abcdefghij", 10, -5);
+  test("abcde", 0, 6, "abcdefghijklmnopqrst", 0, 5);
+  test("abcde", 0, 6, "abcdefghijklmnopqrst", 1, 4);
+  test("abcde", 0, 6, "abcdefghijklmnopqrst", 10, -5);
+  test("abcde", 0, 6, "abcdefghijklmnopqrst", 19, -14);
+  test("abcde", 0, 6, "abcdefghijklmnopqrst", 20, -15);
+  test("abcde", 1, 0, "", 0, 0);
+  test("abcde", 1, 0, "abcde", 0, 0);
+  test("abcde", 1, 0, "abcde", 1, -1);
+  test("abcde", 1, 0, "abcde", 2, -2);
+  test("abcde", 1, 0, "abcde", 4, -4);
+  test("abcde", 1, 0, "abcde", 5, -5);
+  test("abcde", 1, 0, "abcdefghij", 0, 0);
+  test("abcde", 1, 0, "abcdefghij", 1, -1);
+  test("abcde", 1, 0, "abcdefghij", 5, -5);
+  test("abcde", 1, 0, "abcdefghij", 9, -9);
+  test("abcde", 1, 0, "abcdefghij", 10, -10);
+  test("abcde", 1, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcde", 1, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcde", 1, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcde", 1, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcde", 1, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcde", 1, 1, "", 0, 1);
+  test("abcde", 1, 1, "abcde", 0, 1);
+  test("abcde", 1, 1, "abcde", 1, 1);
+  test("abcde", 1, 1, "abcde", 2, 1);
+  test("abcde", 1, 1, "abcde", 4, 1);
+  test("abcde", 1, 1, "abcde", 5, 1);
+  test("abcde", 1, 1, "abcdefghij", 0, 1);
+  test("abcde", 1, 1, "abcdefghij", 1, 1);
+  test("abcde", 1, 1, "abcdefghij", 5, 1);
+  test("abcde", 1, 1, "abcdefghij", 9, 1);
+  test("abcde", 1, 1, "abcdefghij", 10, 1);
+  test("abcde", 1, 1, "abcdefghijklmnopqrst", 0, 1);
+  test("abcde", 1, 1, "abcdefghijklmnopqrst", 1, 1);
+  test("abcde", 1, 1, "abcdefghijklmnopqrst", 10, 1);
+  test("abcde", 1, 1, "abcdefghijklmnopqrst", 19, 1);
+  test("abcde", 1, 1, "abcdefghijklmnopqrst", 20, 1);
+  test("abcde", 1, 2, "", 0, 2);
+  test("abcde", 1, 2, "abcde", 0, 2);
+  test("abcde", 1, 2, "abcde", 1, 1);
+  test("abcde", 1, 2, "abcde", 2, 1);
+  test("abcde", 1, 2, "abcde", 4, 1);
+  test("abcde", 1, 2, "abcde", 5, 1);
+  test("abcde", 1, 2, "abcdefghij", 0, 2);
+  test("abcde", 1, 2, "abcdefghij", 1, 1);
+  test("abcde", 1, 2, "abcdefghij", 5, 1);
+  test("abcde", 1, 2, "abcdefghij", 9, 1);
+  test("abcde", 1, 2, "abcdefghij", 10, 1);
+  test("abcde", 1, 2, "abcdefghijklmnopqrst", 0, 2);
+  test("abcde", 1, 2, "abcdefghijklmnopqrst", 1, 1);
+  test("abcde", 1, 2, "abcdefghijklmnopqrst", 10, 1);
+  test("abcde", 1, 2, "abcdefghijklmnopqrst", 19, 1);
+  test("abcde", 1, 2, "abcdefghijklmnopqrst", 20, 1);
+  test("abcde", 1, 3, "", 0, 3);
+  test("abcde", 1, 3, "abcde", 0, 3);
+  test("abcde", 1, 3, "abcde", 1, 1);
+  test("abcde", 1, 3, "abcde", 2, 1);
+  test("abcde", 1, 3, "abcde", 4, 1);
+  test("abcde", 1, 3, "abcde", 5, 1);
+  test("abcde", 1, 3, "abcdefghij", 0, 3);
+  test("abcde", 1, 3, "abcdefghij", 1, 1);
 }
 
-
-void test2()
-{
-    test("abcde", 1, 3, "abcdefghij", 5, 1);
-    test("abcde", 1, 3, "abcdefghij", 9, 1);
-    test("abcde", 1, 3, "abcdefghij", 10, 1);
-    test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 3);
-    test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 1);
-    test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 1);
-    test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 1);
-    test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 1);
-    test("abcde", 1, 4, "", 0, 4);
-    test("abcde", 1, 4, "abcde", 0, 4);
-    test("abcde", 1, 4, "abcde", 1, 1);
-    test("abcde", 1, 4, "abcde", 2, 1);
-    test("abcde", 1, 4, "abcde", 4, 1);
-    test("abcde", 1, 4, "abcde", 5, 1);
-    test("abcde", 1, 4, "abcdefghij", 0, 4);
-    test("abcde", 1, 4, "abcdefghij", 1, 1);
-    test("abcde", 1, 4, "abcdefghij", 5, 1);
-    test("abcde", 1, 4, "abcdefghij", 9, 1);
-    test("abcde", 1, 4, "abcdefghij", 10, 1);
-    test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 4);
-    test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 1);
-    test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 1);
-    test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 1);
-    test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 1);
-    test("abcde", 1, 5, "", 0, 4);
-    test("abcde", 1, 5, "abcde", 0, 4);
-    test("abcde", 1, 5, "abcde", 1, 1);
-    test("abcde", 1, 5, "abcde", 2, 1);
-    test("abcde", 1, 5, "abcde", 4, 1);
-    test("abcde", 1, 5, "abcde", 5, 1);
-    test("abcde", 1, 5, "abcdefghij", 0, 4);
-    test("abcde", 1, 5, "abcdefghij", 1, 1);
-    test("abcde", 1, 5, "abcdefghij", 5, 1);
-    test("abcde", 1, 5, "abcdefghij", 9, 1);
-    test("abcde", 1, 5, "abcdefghij", 10, 1);
-    test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 4);
-    test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 1);
-    test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 1);
-    test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 1);
-    test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 1);
-    test("abcde", 2, 0, "", 0, 0);
-    test("abcde", 2, 0, "abcde", 0, 0);
-    test("abcde", 2, 0, "abcde", 1, -1);
-    test("abcde", 2, 0, "abcde", 2, -2);
-    test("abcde", 2, 0, "abcde", 4, -4);
-    test("abcde", 2, 0, "abcde", 5, -5);
-    test("abcde", 2, 0, "abcdefghij", 0, 0);
-    test("abcde", 2, 0, "abcdefghij", 1, -1);
-    test("abcde", 2, 0, "abcdefghij", 5, -5);
-    test("abcde", 2, 0, "abcdefghij", 9, -9);
-    test("abcde", 2, 0, "abcdefghij", 10, -10);
-    test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcde", 2, 1, "", 0, 1);
-    test("abcde", 2, 1, "abcde", 0, 1);
-    test("abcde", 2, 1, "abcde", 1, 2);
-    test("abcde", 2, 1, "abcde", 2, 2);
-    test("abcde", 2, 1, "abcde", 4, 2);
-    test("abcde", 2, 1, "abcde", 5, 2);
-    test("abcde", 2, 1, "abcdefghij", 0, 1);
-    test("abcde", 2, 1, "abcdefghij", 1, 2);
-    test("abcde", 2, 1, "abcdefghij", 5, 2);
-    test("abcde", 2, 1, "abcdefghij", 9, 2);
-    test("abcde", 2, 1, "abcdefghij", 10, 2);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 1);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 2);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 2);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 2);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 2);
-    test("abcde", 2, 2, "", 0, 2);
-    test("abcde", 2, 2, "abcde", 0, 2);
-    test("abcde", 2, 2, "abcde", 1, 2);
-    test("abcde", 2, 2, "abcde", 2, 2);
-    test("abcde", 2, 2, "abcde", 4, 2);
-    test("abcde", 2, 2, "abcde", 5, 2);
-    test("abcde", 2, 2, "abcdefghij", 0, 2);
-    test("abcde", 2, 2, "abcdefghij", 1, 2);
-    test("abcde", 2, 2, "abcdefghij", 5, 2);
-    test("abcde", 2, 2, "abcdefghij", 9, 2);
-    test("abcde", 2, 2, "abcdefghij", 10, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 2);
-    test("abcde", 2, 3, "", 0, 3);
-    test("abcde", 2, 3, "abcde", 0, 3);
-    test("abcde", 2, 3, "abcde", 1, 2);
-    test("abcde", 2, 3, "abcde", 2, 2);
-    test("abcde", 2, 3, "abcde", 4, 2);
-    test("abcde", 2, 3, "abcde", 5, 2);
-    test("abcde", 2, 3, "abcdefghij", 0, 3);
-    test("abcde", 2, 3, "abcdefghij", 1, 2);
-    test("abcde", 2, 3, "abcdefghij", 5, 2);
-    test("abcde", 2, 3, "abcdefghij", 9, 2);
-    test("abcde", 2, 3, "abcdefghij", 10, 2);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 3);
+void test2() {
+  test("abcde", 1, 3, "abcdefghij", 5, 1);
+  test("abcde", 1, 3, "abcdefghij", 9, 1);
+  test("abcde", 1, 3, "abcdefghij", 10, 1);
+  test("abcde", 1, 3, "abcdefghijklmnopqrst", 0, 3);
+  test("abcde", 1, 3, "abcdefghijklmnopqrst", 1, 1);
+  test("abcde", 1, 3, "abcdefghijklmnopqrst", 10, 1);
+  test("abcde", 1, 3, "abcdefghijklmnopqrst", 19, 1);
+  test("abcde", 1, 3, "abcdefghijklmnopqrst", 20, 1);
+  test("abcde", 1, 4, "", 0, 4);
+  test("abcde", 1, 4, "abcde", 0, 4);
+  test("abcde", 1, 4, "abcde", 1, 1);
+  test("abcde", 1, 4, "abcde", 2, 1);
+  test("abcde", 1, 4, "abcde", 4, 1);
+  test("abcde", 1, 4, "abcde", 5, 1);
+  test("abcde", 1, 4, "abcdefghij", 0, 4);
+  test("abcde", 1, 4, "abcdefghij", 1, 1);
+  test("abcde", 1, 4, "abcdefghij", 5, 1);
+  test("abcde", 1, 4, "abcdefghij", 9, 1);
+  test("abcde", 1, 4, "abcdefghij", 10, 1);
+  test("abcde", 1, 4, "abcdefghijklmnopqrst", 0, 4);
+  test("abcde", 1, 4, "abcdefghijklmnopqrst", 1, 1);
+  test("abcde", 1, 4, "abcdefghijklmnopqrst", 10, 1);
+  test("abcde", 1, 4, "abcdefghijklmnopqrst", 19, 1);
+  test("abcde", 1, 4, "abcdefghijklmnopqrst", 20, 1);
+  test("abcde", 1, 5, "", 0, 4);
+  test("abcde", 1, 5, "abcde", 0, 4);
+  test("abcde", 1, 5, "abcde", 1, 1);
+  test("abcde", 1, 5, "abcde", 2, 1);
+  test("abcde", 1, 5, "abcde", 4, 1);
+  test("abcde", 1, 5, "abcde", 5, 1);
+  test("abcde", 1, 5, "abcdefghij", 0, 4);
+  test("abcde", 1, 5, "abcdefghij", 1, 1);
+  test("abcde", 1, 5, "abcdefghij", 5, 1);
+  test("abcde", 1, 5, "abcdefghij", 9, 1);
+  test("abcde", 1, 5, "abcdefghij", 10, 1);
+  test("abcde", 1, 5, "abcdefghijklmnopqrst", 0, 4);
+  test("abcde", 1, 5, "abcdefghijklmnopqrst", 1, 1);
+  test("abcde", 1, 5, "abcdefghijklmnopqrst", 10, 1);
+  test("abcde", 1, 5, "abcdefghijklmnopqrst", 19, 1);
+  test("abcde", 1, 5, "abcdefghijklmnopqrst", 20, 1);
+  test("abcde", 2, 0, "", 0, 0);
+  test("abcde", 2, 0, "abcde", 0, 0);
+  test("abcde", 2, 0, "abcde", 1, -1);
+  test("abcde", 2, 0, "abcde", 2, -2);
+  test("abcde", 2, 0, "abcde", 4, -4);
+  test("abcde", 2, 0, "abcde", 5, -5);
+  test("abcde", 2, 0, "abcdefghij", 0, 0);
+  test("abcde", 2, 0, "abcdefghij", 1, -1);
+  test("abcde", 2, 0, "abcdefghij", 5, -5);
+  test("abcde", 2, 0, "abcdefghij", 9, -9);
+  test("abcde", 2, 0, "abcdefghij", 10, -10);
+  test("abcde", 2, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcde", 2, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcde", 2, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcde", 2, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcde", 2, 1, "", 0, 1);
+  test("abcde", 2, 1, "abcde", 0, 1);
+  test("abcde", 2, 1, "abcde", 1, 2);
+  test("abcde", 2, 1, "abcde", 2, 2);
+  test("abcde", 2, 1, "abcde", 4, 2);
+  test("abcde", 2, 1, "abcde", 5, 2);
+  test("abcde", 2, 1, "abcdefghij", 0, 1);
+  test("abcde", 2, 1, "abcdefghij", 1, 2);
+  test("abcde", 2, 1, "abcdefghij", 5, 2);
+  test("abcde", 2, 1, "abcdefghij", 9, 2);
+  test("abcde", 2, 1, "abcdefghij", 10, 2);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 1);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 2);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 2);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 2);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 2);
+  test("abcde", 2, 2, "", 0, 2);
+  test("abcde", 2, 2, "abcde", 0, 2);
+  test("abcde", 2, 2, "abcde", 1, 2);
+  test("abcde", 2, 2, "abcde", 2, 2);
+  test("abcde", 2, 2, "abcde", 4, 2);
+  test("abcde", 2, 2, "abcde", 5, 2);
+  test("abcde", 2, 2, "abcdefghij", 0, 2);
+  test("abcde", 2, 2, "abcdefghij", 1, 2);
+  test("abcde", 2, 2, "abcdefghij", 5, 2);
+  test("abcde", 2, 2, "abcdefghij", 9, 2);
+  test("abcde", 2, 2, "abcdefghij", 10, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 2);
+  test("abcde", 2, 3, "", 0, 3);
+  test("abcde", 2, 3, "abcde", 0, 3);
+  test("abcde", 2, 3, "abcde", 1, 2);
+  test("abcde", 2, 3, "abcde", 2, 2);
+  test("abcde", 2, 3, "abcde", 4, 2);
+  test("abcde", 2, 3, "abcde", 5, 2);
+  test("abcde", 2, 3, "abcdefghij", 0, 3);
+  test("abcde", 2, 3, "abcdefghij", 1, 2);
+  test("abcde", 2, 3, "abcdefghij", 5, 2);
+  test("abcde", 2, 3, "abcdefghij", 9, 2);
+  test("abcde", 2, 3, "abcdefghij", 10, 2);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 3);
 }
 
-
-void test3()
-{
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 2);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 2);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 2);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 2);
-    test("abcde", 2, 4, "", 0, 3);
-    test("abcde", 2, 4, "abcde", 0, 3);
-    test("abcde", 2, 4, "abcde", 1, 2);
-    test("abcde", 2, 4, "abcde", 2, 2);
-    test("abcde", 2, 4, "abcde", 4, 2);
-    test("abcde", 2, 4, "abcde", 5, 2);
-    test("abcde", 2, 4, "abcdefghij", 0, 3);
-    test("abcde", 2, 4, "abcdefghij", 1, 2);
-    test("abcde", 2, 4, "abcdefghij", 5, 2);
-    test("abcde", 2, 4, "abcdefghij", 9, 2);
-    test("abcde", 2, 4, "abcdefghij", 10, 2);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 3);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 2);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 2);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 2);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 2);
-    test("abcde", 4, 0, "", 0, 0);
-    test("abcde", 4, 0, "abcde", 0, 0);
-    test("abcde", 4, 0, "abcde", 1, -1);
-    test("abcde", 4, 0, "abcde", 2, -2);
-    test("abcde", 4, 0, "abcde", 4, -4);
-    test("abcde", 4, 0, "abcde", 5, -5);
-    test("abcde", 4, 0, "abcdefghij", 0, 0);
-    test("abcde", 4, 0, "abcdefghij", 1, -1);
-    test("abcde", 4, 0, "abcdefghij", 5, -5);
-    test("abcde", 4, 0, "abcdefghij", 9, -9);
-    test("abcde", 4, 0, "abcdefghij", 10, -10);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcde", 4, 1, "", 0, 1);
-    test("abcde", 4, 1, "abcde", 0, 1);
-    test("abcde", 4, 1, "abcde", 1, 4);
-    test("abcde", 4, 1, "abcde", 2, 4);
-    test("abcde", 4, 1, "abcde", 4, 4);
-    test("abcde", 4, 1, "abcde", 5, 4);
-    test("abcde", 4, 1, "abcdefghij", 0, 1);
-    test("abcde", 4, 1, "abcdefghij", 1, 4);
-    test("abcde", 4, 1, "abcdefghij", 5, 4);
-    test("abcde", 4, 1, "abcdefghij", 9, 4);
-    test("abcde", 4, 1, "abcdefghij", 10, 4);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 1);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 4);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 4);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 4);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 4);
-    test("abcde", 4, 2, "", 0, 1);
-    test("abcde", 4, 2, "abcde", 0, 1);
-    test("abcde", 4, 2, "abcde", 1, 4);
-    test("abcde", 4, 2, "abcde", 2, 4);
-    test("abcde", 4, 2, "abcde", 4, 4);
-    test("abcde", 4, 2, "abcde", 5, 4);
-    test("abcde", 4, 2, "abcdefghij", 0, 1);
-    test("abcde", 4, 2, "abcdefghij", 1, 4);
-    test("abcde", 4, 2, "abcdefghij", 5, 4);
-    test("abcde", 4, 2, "abcdefghij", 9, 4);
-    test("abcde", 4, 2, "abcdefghij", 10, 4);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 1);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 4);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 4);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 4);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 4);
-    test("abcde", 5, 0, "", 0, 0);
-    test("abcde", 5, 0, "abcde", 0, 0);
-    test("abcde", 5, 0, "abcde", 1, -1);
-    test("abcde", 5, 0, "abcde", 2, -2);
-    test("abcde", 5, 0, "abcde", 4, -4);
-    test("abcde", 5, 0, "abcde", 5, -5);
-    test("abcde", 5, 0, "abcdefghij", 0, 0);
-    test("abcde", 5, 0, "abcdefghij", 1, -1);
-    test("abcde", 5, 0, "abcdefghij", 5, -5);
-    test("abcde", 5, 0, "abcdefghij", 9, -9);
-    test("abcde", 5, 0, "abcdefghij", 10, -10);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcde", 5, 1, "", 0, 0);
-    test("abcde", 5, 1, "abcde", 0, 0);
-    test("abcde", 5, 1, "abcde", 1, -1);
-    test("abcde", 5, 1, "abcde", 2, -2);
-    test("abcde", 5, 1, "abcde", 4, -4);
-    test("abcde", 5, 1, "abcde", 5, -5);
-    test("abcde", 5, 1, "abcdefghij", 0, 0);
-    test("abcde", 5, 1, "abcdefghij", 1, -1);
-    test("abcde", 5, 1, "abcdefghij", 5, -5);
-    test("abcde", 5, 1, "abcdefghij", 9, -9);
-    test("abcde", 5, 1, "abcdefghij", 10, -10);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 0);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, -1);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, -10);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, -19);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, -20);
+void test3() {
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 2);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 2);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 2);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 2);
+  test("abcde", 2, 4, "", 0, 3);
+  test("abcde", 2, 4, "abcde", 0, 3);
+  test("abcde", 2, 4, "abcde", 1, 2);
+  test("abcde", 2, 4, "abcde", 2, 2);
+  test("abcde", 2, 4, "abcde", 4, 2);
+  test("abcde", 2, 4, "abcde", 5, 2);
+  test("abcde", 2, 4, "abcdefghij", 0, 3);
+  test("abcde", 2, 4, "abcdefghij", 1, 2);
+  test("abcde", 2, 4, "abcdefghij", 5, 2);
+  test("abcde", 2, 4, "abcdefghij", 9, 2);
+  test("abcde", 2, 4, "abcdefghij", 10, 2);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 3);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 2);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 2);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 2);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 2);
+  test("abcde", 4, 0, "", 0, 0);
+  test("abcde", 4, 0, "abcde", 0, 0);
+  test("abcde", 4, 0, "abcde", 1, -1);
+  test("abcde", 4, 0, "abcde", 2, -2);
+  test("abcde", 4, 0, "abcde", 4, -4);
+  test("abcde", 4, 0, "abcde", 5, -5);
+  test("abcde", 4, 0, "abcdefghij", 0, 0);
+  test("abcde", 4, 0, "abcdefghij", 1, -1);
+  test("abcde", 4, 0, "abcdefghij", 5, -5);
+  test("abcde", 4, 0, "abcdefghij", 9, -9);
+  test("abcde", 4, 0, "abcdefghij", 10, -10);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcde", 4, 1, "", 0, 1);
+  test("abcde", 4, 1, "abcde", 0, 1);
+  test("abcde", 4, 1, "abcde", 1, 4);
+  test("abcde", 4, 1, "abcde", 2, 4);
+  test("abcde", 4, 1, "abcde", 4, 4);
+  test("abcde", 4, 1, "abcde", 5, 4);
+  test("abcde", 4, 1, "abcdefghij", 0, 1);
+  test("abcde", 4, 1, "abcdefghij", 1, 4);
+  test("abcde", 4, 1, "abcdefghij", 5, 4);
+  test("abcde", 4, 1, "abcdefghij", 9, 4);
+  test("abcde", 4, 1, "abcdefghij", 10, 4);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 1);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 4);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 4);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 4);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 4);
+  test("abcde", 4, 2, "", 0, 1);
+  test("abcde", 4, 2, "abcde", 0, 1);
+  test("abcde", 4, 2, "abcde", 1, 4);
+  test("abcde", 4, 2, "abcde", 2, 4);
+  test("abcde", 4, 2, "abcde", 4, 4);
+  test("abcde", 4, 2, "abcde", 5, 4);
+  test("abcde", 4, 2, "abcdefghij", 0, 1);
+  test("abcde", 4, 2, "abcdefghij", 1, 4);
+  test("abcde", 4, 2, "abcdefghij", 5, 4);
+  test("abcde", 4, 2, "abcdefghij", 9, 4);
+  test("abcde", 4, 2, "abcdefghij", 10, 4);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 1);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 4);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 4);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 4);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 4);
+  test("abcde", 5, 0, "", 0, 0);
+  test("abcde", 5, 0, "abcde", 0, 0);
+  test("abcde", 5, 0, "abcde", 1, -1);
+  test("abcde", 5, 0, "abcde", 2, -2);
+  test("abcde", 5, 0, "abcde", 4, -4);
+  test("abcde", 5, 0, "abcde", 5, -5);
+  test("abcde", 5, 0, "abcdefghij", 0, 0);
+  test("abcde", 5, 0, "abcdefghij", 1, -1);
+  test("abcde", 5, 0, "abcdefghij", 5, -5);
+  test("abcde", 5, 0, "abcdefghij", 9, -9);
+  test("abcde", 5, 0, "abcdefghij", 10, -10);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcde", 5, 1, "", 0, 0);
+  test("abcde", 5, 1, "abcde", 0, 0);
+  test("abcde", 5, 1, "abcde", 1, -1);
+  test("abcde", 5, 1, "abcde", 2, -2);
+  test("abcde", 5, 1, "abcde", 4, -4);
+  test("abcde", 5, 1, "abcde", 5, -5);
+  test("abcde", 5, 1, "abcdefghij", 0, 0);
+  test("abcde", 5, 1, "abcdefghij", 1, -1);
+  test("abcde", 5, 1, "abcdefghij", 5, -5);
+  test("abcde", 5, 1, "abcdefghij", 9, -9);
+  test("abcde", 5, 1, "abcdefghij", 10, -10);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 0);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, -1);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, -10);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, -19);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, -20);
 }
 
-
-void test4()
-{
-    test("abcde", 6, 0, "", 0, 0);
-    test("abcde", 6, 0, "abcde", 0, 0);
-    test("abcde", 6, 0, "abcde", 1, 0);
-    test("abcde", 6, 0, "abcde", 2, 0);
-    test("abcde", 6, 0, "abcde", 4, 0);
-    test("abcde", 6, 0, "abcde", 5, 0);
-    test("abcde", 6, 0, "abcdefghij", 0, 0);
-    test("abcde", 6, 0, "abcdefghij", 1, 0);
-    test("abcde", 6, 0, "abcdefghij", 5, 0);
-    test("abcde", 6, 0, "abcdefghij", 9, 0);
-    test("abcde", 6, 0, "abcdefghij", 10, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 0);
-    test("abcdefghij", 0, 0, "", 0, 0);
-    test("abcdefghij", 0, 0, "abcde", 0, 0);
-    test("abcdefghij", 0, 0, "abcde", 1, -1);
-    test("abcdefghij", 0, 0, "abcde", 2, -2);
-    test("abcdefghij", 0, 0, "abcde", 4, -4);
-    test("abcdefghij", 0, 0, "abcde", 5, -5);
-    test("abcdefghij", 0, 0, "abcdefghij", 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghij", 1, -1);
-    test("abcdefghij", 0, 0, "abcdefghij", 5, -5);
-    test("abcdefghij", 0, 0, "abcdefghij", 9, -9);
-    test("abcdefghij", 0, 0, "abcdefghij", 10, -10);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcdefghij", 0, 1, "", 0, 1);
-    test("abcdefghij", 0, 1, "abcde", 0, 1);
-    test("abcdefghij", 0, 1, "abcde", 1, 0);
-    test("abcdefghij", 0, 1, "abcde", 2, -1);
-    test("abcdefghij", 0, 1, "abcde", 4, -3);
-    test("abcdefghij", 0, 1, "abcde", 5, -4);
-    test("abcdefghij", 0, 1, "abcdefghij", 0, 1);
-    test("abcdefghij", 0, 1, "abcdefghij", 1, 0);
-    test("abcdefghij", 0, 1, "abcdefghij", 5, -4);
-    test("abcdefghij", 0, 1, "abcdefghij", 9, -8);
-    test("abcdefghij", 0, 1, "abcdefghij", 10, -9);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 1);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 0);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, -9);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, -18);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, -19);
-    test("abcdefghij", 0, 5, "", 0, 5);
-    test("abcdefghij", 0, 5, "abcde", 0, 5);
-    test("abcdefghij", 0, 5, "abcde", 1, 4);
-    test("abcdefghij", 0, 5, "abcde", 2, 3);
-    test("abcdefghij", 0, 5, "abcde", 4, 1);
-    test("abcdefghij", 0, 5, "abcde", 5, 0);
-    test("abcdefghij", 0, 5, "abcdefghij", 0, 5);
-    test("abcdefghij", 0, 5, "abcdefghij", 1, 4);
-    test("abcdefghij", 0, 5, "abcdefghij", 5, 0);
-    test("abcdefghij", 0, 5, "abcdefghij", 9, -4);
-    test("abcdefghij", 0, 5, "abcdefghij", 10, -5);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 5);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 4);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, -5);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, -14);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, -15);
-    test("abcdefghij", 0, 9, "", 0, 9);
-    test("abcdefghij", 0, 9, "abcde", 0, 9);
-    test("abcdefghij", 0, 9, "abcde", 1, 8);
-    test("abcdefghij", 0, 9, "abcde", 2, 7);
-    test("abcdefghij", 0, 9, "abcde", 4, 5);
-    test("abcdefghij", 0, 9, "abcde", 5, 4);
-    test("abcdefghij", 0, 9, "abcdefghij", 0, 9);
-    test("abcdefghij", 0, 9, "abcdefghij", 1, 8);
-    test("abcdefghij", 0, 9, "abcdefghij", 5, 4);
-    test("abcdefghij", 0, 9, "abcdefghij", 9, 0);
-    test("abcdefghij", 0, 9, "abcdefghij", 10, -1);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 9);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 8);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, -1);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, -10);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, -11);
-    test("abcdefghij", 0, 10, "", 0, 10);
-    test("abcdefghij", 0, 10, "abcde", 0, 10);
-    test("abcdefghij", 0, 10, "abcde", 1, 9);
-    test("abcdefghij", 0, 10, "abcde", 2, 8);
-    test("abcdefghij", 0, 10, "abcde", 4, 6);
-    test("abcdefghij", 0, 10, "abcde", 5, 5);
-    test("abcdefghij", 0, 10, "abcdefghij", 0, 10);
-    test("abcdefghij", 0, 10, "abcdefghij", 1, 9);
-    test("abcdefghij", 0, 10, "abcdefghij", 5, 5);
-    test("abcdefghij", 0, 10, "abcdefghij", 9, 1);
-    test("abcdefghij", 0, 10, "abcdefghij", 10, 0);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 9);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 0);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, -9);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, -10);
-    test("abcdefghij", 0, 11, "", 0, 10);
-    test("abcdefghij", 0, 11, "abcde", 0, 10);
-    test("abcdefghij", 0, 11, "abcde", 1, 9);
-    test("abcdefghij", 0, 11, "abcde", 2, 8);
+void test4() {
+  test("abcde", 6, 0, "", 0, 0);
+  test("abcde", 6, 0, "abcde", 0, 0);
+  test("abcde", 6, 0, "abcde", 1, 0);
+  test("abcde", 6, 0, "abcde", 2, 0);
+  test("abcde", 6, 0, "abcde", 4, 0);
+  test("abcde", 6, 0, "abcde", 5, 0);
+  test("abcde", 6, 0, "abcdefghij", 0, 0);
+  test("abcde", 6, 0, "abcdefghij", 1, 0);
+  test("abcde", 6, 0, "abcdefghij", 5, 0);
+  test("abcde", 6, 0, "abcdefghij", 9, 0);
+  test("abcde", 6, 0, "abcdefghij", 10, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 0);
+  test("abcdefghij", 0, 0, "", 0, 0);
+  test("abcdefghij", 0, 0, "abcde", 0, 0);
+  test("abcdefghij", 0, 0, "abcde", 1, -1);
+  test("abcdefghij", 0, 0, "abcde", 2, -2);
+  test("abcdefghij", 0, 0, "abcde", 4, -4);
+  test("abcdefghij", 0, 0, "abcde", 5, -5);
+  test("abcdefghij", 0, 0, "abcdefghij", 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghij", 1, -1);
+  test("abcdefghij", 0, 0, "abcdefghij", 5, -5);
+  test("abcdefghij", 0, 0, "abcdefghij", 9, -9);
+  test("abcdefghij", 0, 0, "abcdefghij", 10, -10);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcdefghij", 0, 1, "", 0, 1);
+  test("abcdefghij", 0, 1, "abcde", 0, 1);
+  test("abcdefghij", 0, 1, "abcde", 1, 0);
+  test("abcdefghij", 0, 1, "abcde", 2, -1);
+  test("abcdefghij", 0, 1, "abcde", 4, -3);
+  test("abcdefghij", 0, 1, "abcde", 5, -4);
+  test("abcdefghij", 0, 1, "abcdefghij", 0, 1);
+  test("abcdefghij", 0, 1, "abcdefghij", 1, 0);
+  test("abcdefghij", 0, 1, "abcdefghij", 5, -4);
+  test("abcdefghij", 0, 1, "abcdefghij", 9, -8);
+  test("abcdefghij", 0, 1, "abcdefghij", 10, -9);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 1);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 0);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, -9);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, -18);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, -19);
+  test("abcdefghij", 0, 5, "", 0, 5);
+  test("abcdefghij", 0, 5, "abcde", 0, 5);
+  test("abcdefghij", 0, 5, "abcde", 1, 4);
+  test("abcdefghij", 0, 5, "abcde", 2, 3);
+  test("abcdefghij", 0, 5, "abcde", 4, 1);
+  test("abcdefghij", 0, 5, "abcde", 5, 0);
+  test("abcdefghij", 0, 5, "abcdefghij", 0, 5);
+  test("abcdefghij", 0, 5, "abcdefghij", 1, 4);
+  test("abcdefghij", 0, 5, "abcdefghij", 5, 0);
+  test("abcdefghij", 0, 5, "abcdefghij", 9, -4);
+  test("abcdefghij", 0, 5, "abcdefghij", 10, -5);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 5);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 4);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, -5);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, -14);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, -15);
+  test("abcdefghij", 0, 9, "", 0, 9);
+  test("abcdefghij", 0, 9, "abcde", 0, 9);
+  test("abcdefghij", 0, 9, "abcde", 1, 8);
+  test("abcdefghij", 0, 9, "abcde", 2, 7);
+  test("abcdefghij", 0, 9, "abcde", 4, 5);
+  test("abcdefghij", 0, 9, "abcde", 5, 4);
+  test("abcdefghij", 0, 9, "abcdefghij", 0, 9);
+  test("abcdefghij", 0, 9, "abcdefghij", 1, 8);
+  test("abcdefghij", 0, 9, "abcdefghij", 5, 4);
+  test("abcdefghij", 0, 9, "abcdefghij", 9, 0);
+  test("abcdefghij", 0, 9, "abcdefghij", 10, -1);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 9);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 8);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, -1);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, -10);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, -11);
+  test("abcdefghij", 0, 10, "", 0, 10);
+  test("abcdefghij", 0, 10, "abcde", 0, 10);
+  test("abcdefghij", 0, 10, "abcde", 1, 9);
+  test("abcdefghij", 0, 10, "abcde", 2, 8);
+  test("abcdefghij", 0, 10, "abcde", 4, 6);
+  test("abcdefghij", 0, 10, "abcde", 5, 5);
+  test("abcdefghij", 0, 10, "abcdefghij", 0, 10);
+  test("abcdefghij", 0, 10, "abcdefghij", 1, 9);
+  test("abcdefghij", 0, 10, "abcdefghij", 5, 5);
+  test("abcdefghij", 0, 10, "abcdefghij", 9, 1);
+  test("abcdefghij", 0, 10, "abcdefghij", 10, 0);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 9);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 0);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, -9);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, -10);
+  test("abcdefghij", 0, 11, "", 0, 10);
+  test("abcdefghij", 0, 11, "abcde", 0, 10);
+  test("abcdefghij", 0, 11, "abcde", 1, 9);
+  test("abcdefghij", 0, 11, "abcde", 2, 8);
 }
 
-
-void test5()
-{
-    test("abcdefghij", 0, 11, "abcde", 4, 6);
-    test("abcdefghij", 0, 11, "abcde", 5, 5);
-    test("abcdefghij", 0, 11, "abcdefghij", 0, 10);
-    test("abcdefghij", 0, 11, "abcdefghij", 1, 9);
-    test("abcdefghij", 0, 11, "abcdefghij", 5, 5);
-    test("abcdefghij", 0, 11, "abcdefghij", 9, 1);
-    test("abcdefghij", 0, 11, "abcdefghij", 10, 0);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 9);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 0);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, -9);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, -10);
-    test("abcdefghij", 1, 0, "", 0, 0);
-    test("abcdefghij", 1, 0, "abcde", 0, 0);
-    test("abcdefghij", 1, 0, "abcde", 1, -1);
-    test("abcdefghij", 1, 0, "abcde", 2, -2);
-    test("abcdefghij", 1, 0, "abcde", 4, -4);
-    test("abcdefghij", 1, 0, "abcde", 5, -5);
-    test("abcdefghij", 1, 0, "abcdefghij", 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghij", 1, -1);
-    test("abcdefghij", 1, 0, "abcdefghij", 5, -5);
-    test("abcdefghij", 1, 0, "abcdefghij", 9, -9);
-    test("abcdefghij", 1, 0, "abcdefghij", 10, -10);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcdefghij", 1, 1, "", 0, 1);
-    test("abcdefghij", 1, 1, "abcde", 0, 1);
-    test("abcdefghij", 1, 1, "abcde", 1, 1);
-    test("abcdefghij", 1, 1, "abcde", 2, 1);
-    test("abcdefghij", 1, 1, "abcde", 4, 1);
-    test("abcdefghij", 1, 1, "abcde", 5, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 0, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 1, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 5, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 9, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 10, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 1);
-    test("abcdefghij", 1, 4, "", 0, 4);
-    test("abcdefghij", 1, 4, "abcde", 0, 4);
-    test("abcdefghij", 1, 4, "abcde", 1, 1);
-    test("abcdefghij", 1, 4, "abcde", 2, 1);
-    test("abcdefghij", 1, 4, "abcde", 4, 1);
-    test("abcdefghij", 1, 4, "abcde", 5, 1);
-    test("abcdefghij", 1, 4, "abcdefghij", 0, 4);
-    test("abcdefghij", 1, 4, "abcdefghij", 1, 1);
-    test("abcdefghij", 1, 4, "abcdefghij", 5, 1);
-    test("abcdefghij", 1, 4, "abcdefghij", 9, 1);
-    test("abcdefghij", 1, 4, "abcdefghij", 10, 1);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 4);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 1);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 1);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 1);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 1);
-    test("abcdefghij", 1, 8, "", 0, 8);
-    test("abcdefghij", 1, 8, "abcde", 0, 8);
-    test("abcdefghij", 1, 8, "abcde", 1, 1);
-    test("abcdefghij", 1, 8, "abcde", 2, 1);
-    test("abcdefghij", 1, 8, "abcde", 4, 1);
-    test("abcdefghij", 1, 8, "abcde", 5, 1);
-    test("abcdefghij", 1, 8, "abcdefghij", 0, 8);
-    test("abcdefghij", 1, 8, "abcdefghij", 1, 1);
-    test("abcdefghij", 1, 8, "abcdefghij", 5, 1);
-    test("abcdefghij", 1, 8, "abcdefghij", 9, 1);
-    test("abcdefghij", 1, 8, "abcdefghij", 10, 1);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 8);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 1);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 1);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 1);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 1);
-    test("abcdefghij", 1, 9, "", 0, 9);
-    test("abcdefghij", 1, 9, "abcde", 0, 9);
-    test("abcdefghij", 1, 9, "abcde", 1, 1);
-    test("abcdefghij", 1, 9, "abcde", 2, 1);
-    test("abcdefghij", 1, 9, "abcde", 4, 1);
-    test("abcdefghij", 1, 9, "abcde", 5, 1);
-    test("abcdefghij", 1, 9, "abcdefghij", 0, 9);
-    test("abcdefghij", 1, 9, "abcdefghij", 1, 1);
-    test("abcdefghij", 1, 9, "abcdefghij", 5, 1);
-    test("abcdefghij", 1, 9, "abcdefghij", 9, 1);
-    test("abcdefghij", 1, 9, "abcdefghij", 10, 1);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 1);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 1);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 1);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 1);
-    test("abcdefghij", 1, 10, "", 0, 9);
-    test("abcdefghij", 1, 10, "abcde", 0, 9);
-    test("abcdefghij", 1, 10, "abcde", 1, 1);
-    test("abcdefghij", 1, 10, "abcde", 2, 1);
-    test("abcdefghij", 1, 10, "abcde", 4, 1);
-    test("abcdefghij", 1, 10, "abcde", 5, 1);
-    test("abcdefghij", 1, 10, "abcdefghij", 0, 9);
-    test("abcdefghij", 1, 10, "abcdefghij", 1, 1);
+void test5() {
+  test("abcdefghij", 0, 11, "abcde", 4, 6);
+  test("abcdefghij", 0, 11, "abcde", 5, 5);
+  test("abcdefghij", 0, 11, "abcdefghij", 0, 10);
+  test("abcdefghij", 0, 11, "abcdefghij", 1, 9);
+  test("abcdefghij", 0, 11, "abcdefghij", 5, 5);
+  test("abcdefghij", 0, 11, "abcdefghij", 9, 1);
+  test("abcdefghij", 0, 11, "abcdefghij", 10, 0);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 9);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 0);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, -9);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, -10);
+  test("abcdefghij", 1, 0, "", 0, 0);
+  test("abcdefghij", 1, 0, "abcde", 0, 0);
+  test("abcdefghij", 1, 0, "abcde", 1, -1);
+  test("abcdefghij", 1, 0, "abcde", 2, -2);
+  test("abcdefghij", 1, 0, "abcde", 4, -4);
+  test("abcdefghij", 1, 0, "abcde", 5, -5);
+  test("abcdefghij", 1, 0, "abcdefghij", 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghij", 1, -1);
+  test("abcdefghij", 1, 0, "abcdefghij", 5, -5);
+  test("abcdefghij", 1, 0, "abcdefghij", 9, -9);
+  test("abcdefghij", 1, 0, "abcdefghij", 10, -10);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcdefghij", 1, 1, "", 0, 1);
+  test("abcdefghij", 1, 1, "abcde", 0, 1);
+  test("abcdefghij", 1, 1, "abcde", 1, 1);
+  test("abcdefghij", 1, 1, "abcde", 2, 1);
+  test("abcdefghij", 1, 1, "abcde", 4, 1);
+  test("abcdefghij", 1, 1, "abcde", 5, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 0, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 1, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 5, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 9, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 10, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 1);
+  test("abcdefghij", 1, 4, "", 0, 4);
+  test("abcdefghij", 1, 4, "abcde", 0, 4);
+  test("abcdefghij", 1, 4, "abcde", 1, 1);
+  test("abcdefghij", 1, 4, "abcde", 2, 1);
+  test("abcdefghij", 1, 4, "abcde", 4, 1);
+  test("abcdefghij", 1, 4, "abcde", 5, 1);
+  test("abcdefghij", 1, 4, "abcdefghij", 0, 4);
+  test("abcdefghij", 1, 4, "abcdefghij", 1, 1);
+  test("abcdefghij", 1, 4, "abcdefghij", 5, 1);
+  test("abcdefghij", 1, 4, "abcdefghij", 9, 1);
+  test("abcdefghij", 1, 4, "abcdefghij", 10, 1);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 4);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 1);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 1);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 1);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 1);
+  test("abcdefghij", 1, 8, "", 0, 8);
+  test("abcdefghij", 1, 8, "abcde", 0, 8);
+  test("abcdefghij", 1, 8, "abcde", 1, 1);
+  test("abcdefghij", 1, 8, "abcde", 2, 1);
+  test("abcdefghij", 1, 8, "abcde", 4, 1);
+  test("abcdefghij", 1, 8, "abcde", 5, 1);
+  test("abcdefghij", 1, 8, "abcdefghij", 0, 8);
+  test("abcdefghij", 1, 8, "abcdefghij", 1, 1);
+  test("abcdefghij", 1, 8, "abcdefghij", 5, 1);
+  test("abcdefghij", 1, 8, "abcdefghij", 9, 1);
+  test("abcdefghij", 1, 8, "abcdefghij", 10, 1);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 8);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 1);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 1);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 1);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 1);
+  test("abcdefghij", 1, 9, "", 0, 9);
+  test("abcdefghij", 1, 9, "abcde", 0, 9);
+  test("abcdefghij", 1, 9, "abcde", 1, 1);
+  test("abcdefghij", 1, 9, "abcde", 2, 1);
+  test("abcdefghij", 1, 9, "abcde", 4, 1);
+  test("abcdefghij", 1, 9, "abcde", 5, 1);
+  test("abcdefghij", 1, 9, "abcdefghij", 0, 9);
+  test("abcdefghij", 1, 9, "abcdefghij", 1, 1);
+  test("abcdefghij", 1, 9, "abcdefghij", 5, 1);
+  test("abcdefghij", 1, 9, "abcdefghij", 9, 1);
+  test("abcdefghij", 1, 9, "abcdefghij", 10, 1);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 1);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 1);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 1);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 1);
+  test("abcdefghij", 1, 10, "", 0, 9);
+  test("abcdefghij", 1, 10, "abcde", 0, 9);
+  test("abcdefghij", 1, 10, "abcde", 1, 1);
+  test("abcdefghij", 1, 10, "abcde", 2, 1);
+  test("abcdefghij", 1, 10, "abcde", 4, 1);
+  test("abcdefghij", 1, 10, "abcde", 5, 1);
+  test("abcdefghij", 1, 10, "abcdefghij", 0, 9);
+  test("abcdefghij", 1, 10, "abcdefghij", 1, 1);
 }
 
-
-void test6()
-{
-    test("abcdefghij", 1, 10, "abcdefghij", 5, 1);
-    test("abcdefghij", 1, 10, "abcdefghij", 9, 1);
-    test("abcdefghij", 1, 10, "abcdefghij", 10, 1);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 1);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 1);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 1);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 1);
-    test("abcdefghij", 5, 0, "", 0, 0);
-    test("abcdefghij", 5, 0, "abcde", 0, 0);
-    test("abcdefghij", 5, 0, "abcde", 1, -1);
-    test("abcdefghij", 5, 0, "abcde", 2, -2);
-    test("abcdefghij", 5, 0, "abcde", 4, -4);
-    test("abcdefghij", 5, 0, "abcde", 5, -5);
-    test("abcdefghij", 5, 0, "abcdefghij", 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghij", 1, -1);
-    test("abcdefghij", 5, 0, "abcdefghij", 5, -5);
-    test("abcdefghij", 5, 0, "abcdefghij", 9, -9);
-    test("abcdefghij", 5, 0, "abcdefghij", 10, -10);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcdefghij", 5, 1, "", 0, 1);
-    test("abcdefghij", 5, 1, "abcde", 0, 1);
-    test("abcdefghij", 5, 1, "abcde", 1, 5);
-    test("abcdefghij", 5, 1, "abcde", 2, 5);
-    test("abcdefghij", 5, 1, "abcde", 4, 5);
-    test("abcdefghij", 5, 1, "abcde", 5, 5);
-    test("abcdefghij", 5, 1, "abcdefghij", 0, 1);
-    test("abcdefghij", 5, 1, "abcdefghij", 1, 5);
-    test("abcdefghij", 5, 1, "abcdefghij", 5, 5);
-    test("abcdefghij", 5, 1, "abcdefghij", 9, 5);
-    test("abcdefghij", 5, 1, "abcdefghij", 10, 5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 1);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 5);
-    test("abcdefghij", 5, 2, "", 0, 2);
-    test("abcdefghij", 5, 2, "abcde", 0, 2);
-    test("abcdefghij", 5, 2, "abcde", 1, 5);
-    test("abcdefghij", 5, 2, "abcde", 2, 5);
-    test("abcdefghij", 5, 2, "abcde", 4, 5);
-    test("abcdefghij", 5, 2, "abcde", 5, 5);
-    test("abcdefghij", 5, 2, "abcdefghij", 0, 2);
-    test("abcdefghij", 5, 2, "abcdefghij", 1, 5);
-    test("abcdefghij", 5, 2, "abcdefghij", 5, 5);
-    test("abcdefghij", 5, 2, "abcdefghij", 9, 5);
-    test("abcdefghij", 5, 2, "abcdefghij", 10, 5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 2);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 5);
-    test("abcdefghij", 5, 4, "", 0, 4);
-    test("abcdefghij", 5, 4, "abcde", 0, 4);
-    test("abcdefghij", 5, 4, "abcde", 1, 5);
-    test("abcdefghij", 5, 4, "abcde", 2, 5);
-    test("abcdefghij", 5, 4, "abcde", 4, 5);
-    test("abcdefghij", 5, 4, "abcde", 5, 5);
-    test("abcdefghij", 5, 4, "abcdefghij", 0, 4);
-    test("abcdefghij", 5, 4, "abcdefghij", 1, 5);
-    test("abcdefghij", 5, 4, "abcdefghij", 5, 5);
-    test("abcdefghij", 5, 4, "abcdefghij", 9, 5);
-    test("abcdefghij", 5, 4, "abcdefghij", 10, 5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 4);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 5);
-    test("abcdefghij", 5, 5, "", 0, 5);
-    test("abcdefghij", 5, 5, "abcde", 0, 5);
-    test("abcdefghij", 5, 5, "abcde", 1, 5);
-    test("abcdefghij", 5, 5, "abcde", 2, 5);
-    test("abcdefghij", 5, 5, "abcde", 4, 5);
-    test("abcdefghij", 5, 5, "abcde", 5, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 0, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 1, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 5, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 9, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 10, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 5);
-    test("abcdefghij", 5, 6, "", 0, 5);
-    test("abcdefghij", 5, 6, "abcde", 0, 5);
-    test("abcdefghij", 5, 6, "abcde", 1, 5);
-    test("abcdefghij", 5, 6, "abcde", 2, 5);
-    test("abcdefghij", 5, 6, "abcde", 4, 5);
-    test("abcdefghij", 5, 6, "abcde", 5, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 0, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 1, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 5, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 9, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 10, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 5);
+void test6() {
+  test("abcdefghij", 1, 10, "abcdefghij", 5, 1);
+  test("abcdefghij", 1, 10, "abcdefghij", 9, 1);
+  test("abcdefghij", 1, 10, "abcdefghij", 10, 1);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 1);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 1);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 1);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 1);
+  test("abcdefghij", 5, 0, "", 0, 0);
+  test("abcdefghij", 5, 0, "abcde", 0, 0);
+  test("abcdefghij", 5, 0, "abcde", 1, -1);
+  test("abcdefghij", 5, 0, "abcde", 2, -2);
+  test("abcdefghij", 5, 0, "abcde", 4, -4);
+  test("abcdefghij", 5, 0, "abcde", 5, -5);
+  test("abcdefghij", 5, 0, "abcdefghij", 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghij", 1, -1);
+  test("abcdefghij", 5, 0, "abcdefghij", 5, -5);
+  test("abcdefghij", 5, 0, "abcdefghij", 9, -9);
+  test("abcdefghij", 5, 0, "abcdefghij", 10, -10);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcdefghij", 5, 1, "", 0, 1);
+  test("abcdefghij", 5, 1, "abcde", 0, 1);
+  test("abcdefghij", 5, 1, "abcde", 1, 5);
+  test("abcdefghij", 5, 1, "abcde", 2, 5);
+  test("abcdefghij", 5, 1, "abcde", 4, 5);
+  test("abcdefghij", 5, 1, "abcde", 5, 5);
+  test("abcdefghij", 5, 1, "abcdefghij", 0, 1);
+  test("abcdefghij", 5, 1, "abcdefghij", 1, 5);
+  test("abcdefghij", 5, 1, "abcdefghij", 5, 5);
+  test("abcdefghij", 5, 1, "abcdefghij", 9, 5);
+  test("abcdefghij", 5, 1, "abcdefghij", 10, 5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 1);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 5);
+  test("abcdefghij", 5, 2, "", 0, 2);
+  test("abcdefghij", 5, 2, "abcde", 0, 2);
+  test("abcdefghij", 5, 2, "abcde", 1, 5);
+  test("abcdefghij", 5, 2, "abcde", 2, 5);
+  test("abcdefghij", 5, 2, "abcde", 4, 5);
+  test("abcdefghij", 5, 2, "abcde", 5, 5);
+  test("abcdefghij", 5, 2, "abcdefghij", 0, 2);
+  test("abcdefghij", 5, 2, "abcdefghij", 1, 5);
+  test("abcdefghij", 5, 2, "abcdefghij", 5, 5);
+  test("abcdefghij", 5, 2, "abcdefghij", 9, 5);
+  test("abcdefghij", 5, 2, "abcdefghij", 10, 5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 2);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 5);
+  test("abcdefghij", 5, 4, "", 0, 4);
+  test("abcdefghij", 5, 4, "abcde", 0, 4);
+  test("abcdefghij", 5, 4, "abcde", 1, 5);
+  test("abcdefghij", 5, 4, "abcde", 2, 5);
+  test("abcdefghij", 5, 4, "abcde", 4, 5);
+  test("abcdefghij", 5, 4, "abcde", 5, 5);
+  test("abcdefghij", 5, 4, "abcdefghij", 0, 4);
+  test("abcdefghij", 5, 4, "abcdefghij", 1, 5);
+  test("abcdefghij", 5, 4, "abcdefghij", 5, 5);
+  test("abcdefghij", 5, 4, "abcdefghij", 9, 5);
+  test("abcdefghij", 5, 4, "abcdefghij", 10, 5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 4);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 5);
+  test("abcdefghij", 5, 5, "", 0, 5);
+  test("abcdefghij", 5, 5, "abcde", 0, 5);
+  test("abcdefghij", 5, 5, "abcde", 1, 5);
+  test("abcdefghij", 5, 5, "abcde", 2, 5);
+  test("abcdefghij", 5, 5, "abcde", 4, 5);
+  test("abcdefghij", 5, 5, "abcde", 5, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 0, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 1, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 5, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 9, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 10, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 5);
+  test("abcdefghij", 5, 6, "", 0, 5);
+  test("abcdefghij", 5, 6, "abcde", 0, 5);
+  test("abcdefghij", 5, 6, "abcde", 1, 5);
+  test("abcdefghij", 5, 6, "abcde", 2, 5);
+  test("abcdefghij", 5, 6, "abcde", 4, 5);
+  test("abcdefghij", 5, 6, "abcde", 5, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 0, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 1, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 5, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 9, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 10, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 5);
 }
 
-
-void test7()
-{
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 5);
-    test("abcdefghij", 9, 0, "", 0, 0);
-    test("abcdefghij", 9, 0, "abcde", 0, 0);
-    test("abcdefghij", 9, 0, "abcde", 1, -1);
-    test("abcdefghij", 9, 0, "abcde", 2, -2);
-    test("abcdefghij", 9, 0, "abcde", 4, -4);
-    test("abcdefghij", 9, 0, "abcde", 5, -5);
-    test("abcdefghij", 9, 0, "abcdefghij", 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghij", 1, -1);
-    test("abcdefghij", 9, 0, "abcdefghij", 5, -5);
-    test("abcdefghij", 9, 0, "abcdefghij", 9, -9);
-    test("abcdefghij", 9, 0, "abcdefghij", 10, -10);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcdefghij", 9, 1, "", 0, 1);
-    test("abcdefghij", 9, 1, "abcde", 0, 1);
-    test("abcdefghij", 9, 1, "abcde", 1, 9);
-    test("abcdefghij", 9, 1, "abcde", 2, 9);
-    test("abcdefghij", 9, 1, "abcde", 4, 9);
-    test("abcdefghij", 9, 1, "abcde", 5, 9);
-    test("abcdefghij", 9, 1, "abcdefghij", 0, 1);
-    test("abcdefghij", 9, 1, "abcdefghij", 1, 9);
-    test("abcdefghij", 9, 1, "abcdefghij", 5, 9);
-    test("abcdefghij", 9, 1, "abcdefghij", 9, 9);
-    test("abcdefghij", 9, 1, "abcdefghij", 10, 9);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 1);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 9);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 9);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 9);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 9);
-    test("abcdefghij", 9, 2, "", 0, 1);
-    test("abcdefghij", 9, 2, "abcde", 0, 1);
-    test("abcdefghij", 9, 2, "abcde", 1, 9);
-    test("abcdefghij", 9, 2, "abcde", 2, 9);
-    test("abcdefghij", 9, 2, "abcde", 4, 9);
-    test("abcdefghij", 9, 2, "abcde", 5, 9);
-    test("abcdefghij", 9, 2, "abcdefghij", 0, 1);
-    test("abcdefghij", 9, 2, "abcdefghij", 1, 9);
-    test("abcdefghij", 9, 2, "abcdefghij", 5, 9);
-    test("abcdefghij", 9, 2, "abcdefghij", 9, 9);
-    test("abcdefghij", 9, 2, "abcdefghij", 10, 9);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 1);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 9);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 9);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 9);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 9);
-    test("abcdefghij", 10, 0, "", 0, 0);
-    test("abcdefghij", 10, 0, "abcde", 0, 0);
-    test("abcdefghij", 10, 0, "abcde", 1, -1);
-    test("abcdefghij", 10, 0, "abcde", 2, -2);
-    test("abcdefghij", 10, 0, "abcde", 4, -4);
-    test("abcdefghij", 10, 0, "abcde", 5, -5);
-    test("abcdefghij", 10, 0, "abcdefghij", 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghij", 1, -1);
-    test("abcdefghij", 10, 0, "abcdefghij", 5, -5);
-    test("abcdefghij", 10, 0, "abcdefghij", 9, -9);
-    test("abcdefghij", 10, 0, "abcdefghij", 10, -10);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcdefghij", 10, 1, "", 0, 0);
-    test("abcdefghij", 10, 1, "abcde", 0, 0);
-    test("abcdefghij", 10, 1, "abcde", 1, -1);
-    test("abcdefghij", 10, 1, "abcde", 2, -2);
-    test("abcdefghij", 10, 1, "abcde", 4, -4);
-    test("abcdefghij", 10, 1, "abcde", 5, -5);
-    test("abcdefghij", 10, 1, "abcdefghij", 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghij", 1, -1);
-    test("abcdefghij", 10, 1, "abcdefghij", 5, -5);
-    test("abcdefghij", 10, 1, "abcdefghij", 9, -9);
-    test("abcdefghij", 10, 1, "abcdefghij", 10, -10);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, -1);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, -10);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, -19);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, -20);
-    test("abcdefghij", 11, 0, "", 0, 0);
-    test("abcdefghij", 11, 0, "abcde", 0, 0);
-    test("abcdefghij", 11, 0, "abcde", 1, 0);
-    test("abcdefghij", 11, 0, "abcde", 2, 0);
-    test("abcdefghij", 11, 0, "abcde", 4, 0);
-    test("abcdefghij", 11, 0, "abcde", 5, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 1, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 5, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 9, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 10, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 0);
+void test7() {
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 5);
+  test("abcdefghij", 9, 0, "", 0, 0);
+  test("abcdefghij", 9, 0, "abcde", 0, 0);
+  test("abcdefghij", 9, 0, "abcde", 1, -1);
+  test("abcdefghij", 9, 0, "abcde", 2, -2);
+  test("abcdefghij", 9, 0, "abcde", 4, -4);
+  test("abcdefghij", 9, 0, "abcde", 5, -5);
+  test("abcdefghij", 9, 0, "abcdefghij", 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghij", 1, -1);
+  test("abcdefghij", 9, 0, "abcdefghij", 5, -5);
+  test("abcdefghij", 9, 0, "abcdefghij", 9, -9);
+  test("abcdefghij", 9, 0, "abcdefghij", 10, -10);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcdefghij", 9, 1, "", 0, 1);
+  test("abcdefghij", 9, 1, "abcde", 0, 1);
+  test("abcdefghij", 9, 1, "abcde", 1, 9);
+  test("abcdefghij", 9, 1, "abcde", 2, 9);
+  test("abcdefghij", 9, 1, "abcde", 4, 9);
+  test("abcdefghij", 9, 1, "abcde", 5, 9);
+  test("abcdefghij", 9, 1, "abcdefghij", 0, 1);
+  test("abcdefghij", 9, 1, "abcdefghij", 1, 9);
+  test("abcdefghij", 9, 1, "abcdefghij", 5, 9);
+  test("abcdefghij", 9, 1, "abcdefghij", 9, 9);
+  test("abcdefghij", 9, 1, "abcdefghij", 10, 9);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 1);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 9);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 9);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 9);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 9);
+  test("abcdefghij", 9, 2, "", 0, 1);
+  test("abcdefghij", 9, 2, "abcde", 0, 1);
+  test("abcdefghij", 9, 2, "abcde", 1, 9);
+  test("abcdefghij", 9, 2, "abcde", 2, 9);
+  test("abcdefghij", 9, 2, "abcde", 4, 9);
+  test("abcdefghij", 9, 2, "abcde", 5, 9);
+  test("abcdefghij", 9, 2, "abcdefghij", 0, 1);
+  test("abcdefghij", 9, 2, "abcdefghij", 1, 9);
+  test("abcdefghij", 9, 2, "abcdefghij", 5, 9);
+  test("abcdefghij", 9, 2, "abcdefghij", 9, 9);
+  test("abcdefghij", 9, 2, "abcdefghij", 10, 9);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 1);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 9);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 9);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 9);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 9);
+  test("abcdefghij", 10, 0, "", 0, 0);
+  test("abcdefghij", 10, 0, "abcde", 0, 0);
+  test("abcdefghij", 10, 0, "abcde", 1, -1);
+  test("abcdefghij", 10, 0, "abcde", 2, -2);
+  test("abcdefghij", 10, 0, "abcde", 4, -4);
+  test("abcdefghij", 10, 0, "abcde", 5, -5);
+  test("abcdefghij", 10, 0, "abcdefghij", 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghij", 1, -1);
+  test("abcdefghij", 10, 0, "abcdefghij", 5, -5);
+  test("abcdefghij", 10, 0, "abcdefghij", 9, -9);
+  test("abcdefghij", 10, 0, "abcdefghij", 10, -10);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcdefghij", 10, 1, "", 0, 0);
+  test("abcdefghij", 10, 1, "abcde", 0, 0);
+  test("abcdefghij", 10, 1, "abcde", 1, -1);
+  test("abcdefghij", 10, 1, "abcde", 2, -2);
+  test("abcdefghij", 10, 1, "abcde", 4, -4);
+  test("abcdefghij", 10, 1, "abcde", 5, -5);
+  test("abcdefghij", 10, 1, "abcdefghij", 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghij", 1, -1);
+  test("abcdefghij", 10, 1, "abcdefghij", 5, -5);
+  test("abcdefghij", 10, 1, "abcdefghij", 9, -9);
+  test("abcdefghij", 10, 1, "abcdefghij", 10, -10);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, -1);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, -10);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, -19);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, -20);
+  test("abcdefghij", 11, 0, "", 0, 0);
+  test("abcdefghij", 11, 0, "abcde", 0, 0);
+  test("abcdefghij", 11, 0, "abcde", 1, 0);
+  test("abcdefghij", 11, 0, "abcde", 2, 0);
+  test("abcdefghij", 11, 0, "abcde", 4, 0);
+  test("abcdefghij", 11, 0, "abcde", 5, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 1, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 5, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 9, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 10, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 0);
 }
 
-void test8()
-{
-    test("abcdefghijklmnopqrst", 0, 0, "", 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, -2);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, -4);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, -5);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, -5);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, -9);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, -10);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcdefghijklmnopqrst", 0, 1, "", 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 0);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, -3);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, -4);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 0);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, -4);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, -8);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, -9);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 0);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, -9);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, -18);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, -19);
-    test("abcdefghijklmnopqrst", 0, 10, "", 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 9);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 8);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 6);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 5);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 9);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 5);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 0);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 9);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 0);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, -9);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, -10);
-    test("abcdefghijklmnopqrst", 0, 19, "", 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 18);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 17);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 15);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 14);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 18);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 14);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 10);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 9);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 18);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 9);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 0);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "", 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 19);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 18);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 16);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 15);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 19);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 15);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 11);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 10);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 19);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 10);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 0);
-    test("abcdefghijklmnopqrst", 0, 21, "", 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 19);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 18);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 16);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 15);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 19);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 15);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 11);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 10);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 19);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 10);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "", 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, -2);
+void test8() {
+  test("abcdefghijklmnopqrst", 0, 0, "", 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, -2);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, -4);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, -5);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, -5);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, -9);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, -10);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcdefghijklmnopqrst", 0, 1, "", 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 0);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, -3);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, -4);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 0);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, -4);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, -8);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, -9);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 0);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, -9);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, -18);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, -19);
+  test("abcdefghijklmnopqrst", 0, 10, "", 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 9);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 8);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 6);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 5);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 9);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 5);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 0);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 9);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 0);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, -9);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, -10);
+  test("abcdefghijklmnopqrst", 0, 19, "", 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 18);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 17);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 15);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 14);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 18);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 14);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 10);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 9);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 18);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 9);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 0);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "", 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 19);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 18);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 16);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 15);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 19);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 15);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 11);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 10);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 19);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 10);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 0);
+  test("abcdefghijklmnopqrst", 0, 21, "", 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 19);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 18);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 16);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 15);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 19);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 15);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 11);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 10);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 19);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 10);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "", 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, -2);
 }
 
-
-void test9()
-{
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, -4);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, -5);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, -5);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, -9);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, -10);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcdefghijklmnopqrst", 1, 1, "", 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "", 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "", 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "", 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "", 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 1);
-    test("abcdefghijklmnopqrst", 10, 0, "", 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, -2);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, -4);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, -5);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, -1);
+void test9() {
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, -4);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, -5);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, -5);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, -9);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, -10);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcdefghijklmnopqrst", 1, 1, "", 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "", 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "", 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "", 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "", 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 1);
+  test("abcdefghijklmnopqrst", 10, 0, "", 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, -2);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, -4);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, -5);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, -1);
 }
 
-
-void test10()
-{
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, -5);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, -9);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, -10);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcdefghijklmnopqrst", 10, 1, "", 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "", 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "", 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "", 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "", 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 10);
-    test("abcdefghijklmnopqrst", 19, 0, "", 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, -2);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, -4);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, -5);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, -5);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, -9);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, -10);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 0);
+void test10() {
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, -5);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, -9);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, -10);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcdefghijklmnopqrst", 10, 1, "", 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "", 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "", 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "", 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "", 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 10);
+  test("abcdefghijklmnopqrst", 19, 0, "", 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, -2);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, -4);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, -5);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, -5);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, -9);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, -10);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 0);
 }
 
-
-void test11()
-{
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcdefghijklmnopqrst", 19, 1, "", 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "", 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 19);
-    test("abcdefghijklmnopqrst", 20, 0, "", 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, -2);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, -4);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, -5);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, -5);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, -9);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, -10);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, -10);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, -19);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, -20);
-    test("abcdefghijklmnopqrst", 20, 1, "", 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, -2);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, -4);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, -5);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, -5);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, -9);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, -10);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, -10);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, -19);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, -20);
-    test("abcdefghijklmnopqrst", 21, 0, "", 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 0);
-    }
-
+void test11() {
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcdefghijklmnopqrst", 19, 1, "", 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "", 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 19);
+  test("abcdefghijklmnopqrst", 20, 0, "", 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, -2);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, -4);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, -5);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, -5);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, -9);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, -10);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, -10);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, -19);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, -20);
+  test("abcdefghijklmnopqrst", 20, 1, "", 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, -2);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, -4);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, -5);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, -5);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, -9);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, -10);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, -10);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, -19);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, -20);
+  test("abcdefghijklmnopqrst", 21, 0, "", 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 0);
+}
 
 int main(int, char**) {
-    test0();
-    test1();
-    test2();
-    test3();
-    test4();
-    test5();
-    test6();
-    test7();
-    test8();
-    test9();
-    test10();
-    test11();
+  test0();
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+  test7();
+  test8();
+  test9();
+  test10();
+  test11();
 
-    {
+  {
     test("", 0, 0, "abcde", 0, 0);
     test("", 0, 0, "abcde", 1, -1);
     test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 0);
     test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 0);
     test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, -10);
-    }
+  }
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
+  {
     test(L"", 0, 0, L"abcde", 0, 0);
     test(L"", 0, 0, L"abcde", 1, -1);
     test(L"abcdefghijklmnopqrst", 21, 0, L"abcde", 0, 0);
     test(L"abcdefghijklmnopqrst", 21, 0, L"abcde", 1, 0);
     test(L"abcdefghijklmnopqrst", 10, 0, L"abcdefghij", 10, -10);
-    }
+  }
 #endif
 
 #if TEST_STD_VER >= 11
-    {
+  {
     test(U"", 0, 0, U"abcde", 0, 0);
     test(U"", 0, 0, U"abcde", 1, -1);
     test(U"abcdefghijklmnopqrst", 21, 0, U"abcde", 0, 0);
     test(U"abcdefghijklmnopqrst", 21, 0, U"abcde", 1, 0);
     test(U"abcdefghijklmnopqrst", 10, 0, U"abcdefghij", 10, -10);
-    }
+  }
 
-    {
+  {
     test(U"", 0, 0, U"abcde", 0, 0);
     test(U"", 0, 0, U"abcde", 1, -1);
     test(U"abcdefghijklmnopqrst", 21, 0, U"abcde", 0, 0);
     test(U"abcdefghijklmnopqrst", 21, 0, U"abcde", 1, 0);
     test(U"abcdefghijklmnopqrst", 10, 0, U"abcdefghij", 10, -10);
-    }
+  }
 #endif
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1;
-    constexpr SV  sv2 { "abcdefghijklmnopqrst", 21 };
-    static_assert ( sv1.compare(0, 0, "abcde", 0) == 0, "" );
-    static_assert ( sv1.compare(0, 0, "abcde", 1) < 0, "" );
-    static_assert ( sv2.compare(0, 0, "abcde", 1, 0) == 0, "" );
-    }
+    constexpr SV sv1;
+    constexpr SV sv2{"abcdefghijklmnopqrst", 21};
+    static_assert(sv1.compare(0, 0, "abcde", 0) == 0, "");
+    static_assert(sv1.compare(0, 0, "abcde", 1) < 0, "");
+    static_assert(sv2.compare(0, 0, "abcde", 1, 0) == 0, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv_size_size.pass.cpp b/libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv_size_size.pass.cpp
index a8823725375032c..5b1464883db7a11 100644
--- a/libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv_size_size.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.ops/compare.size_size_sv_size_size.pass.cpp
@@ -20,5833 +20,5776 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-int sign ( int x ) { return x > 0 ? 1 : ( x < 0 ? -1 : 0 ); }
+int sign(int x) { return x > 0 ? 1 : (x < 0 ? -1 : 0); }
 
-template<typename CharT>
-void test1 ( std::basic_string_view<CharT> sv1, std::size_t pos1, size_t n1,
-             std::basic_string_view<CharT> sv2, std::size_t pos2, size_t n2,
-             int expected ) {
+template <typename CharT>
+void test1(std::basic_string_view<CharT> sv1,
+           std::size_t pos1,
+           size_t n1,
+           std::basic_string_view<CharT> sv2,
+           std::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));
+  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());
-        }
+  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, std::size_t pos1, size_t n1, const CharT* s2, std::size_t pos2, size_t n2, int expected) {
+  typedef std::basic_string_view<CharT> string_view_t;
 
-template<typename CharT>
-void test ( const CharT *s1, std::size_t pos1, size_t n1,
-            const CharT *s2, std::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);
+  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 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 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 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 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 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 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 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 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 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 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 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, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcde", 2, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcde", 2, 1, "", 0, 0, 1);
-    test("abcde", 2, 1, "", 0, 1, 1);
-    test("abcde", 2, 1, "", 1, 0, 0);
-    test("abcde", 2, 1, "abcde", 0, 0, 1);
-    test("abcde", 2, 1, "abcde", 0, 1, 2);
-    test("abcde", 2, 1, "abcde", 0, 2, 2);
-    test("abcde", 2, 1, "abcde", 0, 4, 2);
-    test("abcde", 2, 1, "abcde", 0, 5, 2);
-    test("abcde", 2, 1, "abcde", 0, 6, 2);
-    test("abcde", 2, 1, "abcde", 1, 0, 1);
-    test("abcde", 2, 1, "abcde", 1, 1, 1);
-    test("abcde", 2, 1, "abcde", 1, 2, 1);
-    test("abcde", 2, 1, "abcde", 1, 3, 1);
-    test("abcde", 2, 1, "abcde", 1, 4, 1);
-    test("abcde", 2, 1, "abcde", 1, 5, 1);
-    test("abcde", 2, 1, "abcde", 2, 0, 1);
+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, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcde", 2, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcde", 2, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcde", 2, 1, "", 0, 0, 1);
+  test("abcde", 2, 1, "", 0, 1, 1);
+  test("abcde", 2, 1, "", 1, 0, 0);
+  test("abcde", 2, 1, "abcde", 0, 0, 1);
+  test("abcde", 2, 1, "abcde", 0, 1, 2);
+  test("abcde", 2, 1, "abcde", 0, 2, 2);
+  test("abcde", 2, 1, "abcde", 0, 4, 2);
+  test("abcde", 2, 1, "abcde", 0, 5, 2);
+  test("abcde", 2, 1, "abcde", 0, 6, 2);
+  test("abcde", 2, 1, "abcde", 1, 0, 1);
+  test("abcde", 2, 1, "abcde", 1, 1, 1);
+  test("abcde", 2, 1, "abcde", 1, 2, 1);
+  test("abcde", 2, 1, "abcde", 1, 3, 1);
+  test("abcde", 2, 1, "abcde", 1, 4, 1);
+  test("abcde", 2, 1, "abcde", 1, 5, 1);
+  test("abcde", 2, 1, "abcde", 2, 0, 1);
 }
 
-void test12()
-{
-    test("abcde", 2, 1, "abcde", 2, 1, 0);
-    test("abcde", 2, 1, "abcde", 2, 2, -1);
-    test("abcde", 2, 1, "abcde", 2, 3, -2);
-    test("abcde", 2, 1, "abcde", 2, 4, -2);
-    test("abcde", 2, 1, "abcde", 4, 0, 1);
-    test("abcde", 2, 1, "abcde", 4, 1, -2);
-    test("abcde", 2, 1, "abcde", 4, 2, -2);
-    test("abcde", 2, 1, "abcde", 5, 0, 1);
-    test("abcde", 2, 1, "abcde", 5, 1, 1);
-    test("abcde", 2, 1, "abcde", 6, 0, 0);
-    test("abcde", 2, 1, "abcdefghij", 0, 0, 1);
-    test("abcde", 2, 1, "abcdefghij", 0, 1, 2);
-    test("abcde", 2, 1, "abcdefghij", 0, 5, 2);
-    test("abcde", 2, 1, "abcdefghij", 0, 9, 2);
-    test("abcde", 2, 1, "abcdefghij", 0, 10, 2);
-    test("abcde", 2, 1, "abcdefghij", 0, 11, 2);
-    test("abcde", 2, 1, "abcdefghij", 1, 0, 1);
-    test("abcde", 2, 1, "abcdefghij", 1, 1, 1);
-    test("abcde", 2, 1, "abcdefghij", 1, 4, 1);
-    test("abcde", 2, 1, "abcdefghij", 1, 8, 1);
-    test("abcde", 2, 1, "abcdefghij", 1, 9, 1);
-    test("abcde", 2, 1, "abcdefghij", 1, 10, 1);
-    test("abcde", 2, 1, "abcdefghij", 5, 0, 1);
-    test("abcde", 2, 1, "abcdefghij", 5, 1, -3);
-    test("abcde", 2, 1, "abcdefghij", 5, 2, -3);
-    test("abcde", 2, 1, "abcdefghij", 5, 4, -3);
-    test("abcde", 2, 1, "abcdefghij", 5, 5, -3);
-    test("abcde", 2, 1, "abcdefghij", 5, 6, -3);
-    test("abcde", 2, 1, "abcdefghij", 9, 0, 1);
-    test("abcde", 2, 1, "abcdefghij", 9, 1, -7);
-    test("abcde", 2, 1, "abcdefghij", 9, 2, -7);
-    test("abcde", 2, 1, "abcdefghij", 10, 0, 1);
-    test("abcde", 2, 1, "abcdefghij", 10, 1, 1);
-    test("abcde", 2, 1, "abcdefghij", 11, 0, 0);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 1, 2);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 10, 2);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 19, 2);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 20, 2);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 21, 2);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 1, 1);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 9, 1);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 18, 1);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 19, 1);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 20, 1);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 1, -8);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 5, -8);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 9, -8);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 10, -8);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 11, -8);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 1, -17);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 2, -17);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 0, 1);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcde", 2, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcde", 2, 2, "", 0, 0, 2);
-    test("abcde", 2, 2, "", 0, 1, 2);
-    test("abcde", 2, 2, "", 1, 0, 0);
-    test("abcde", 2, 2, "abcde", 0, 0, 2);
-    test("abcde", 2, 2, "abcde", 0, 1, 2);
-    test("abcde", 2, 2, "abcde", 0, 2, 2);
-    test("abcde", 2, 2, "abcde", 0, 4, 2);
-    test("abcde", 2, 2, "abcde", 0, 5, 2);
-    test("abcde", 2, 2, "abcde", 0, 6, 2);
-    test("abcde", 2, 2, "abcde", 1, 0, 2);
-    test("abcde", 2, 2, "abcde", 1, 1, 1);
-    test("abcde", 2, 2, "abcde", 1, 2, 1);
-    test("abcde", 2, 2, "abcde", 1, 3, 1);
-    test("abcde", 2, 2, "abcde", 1, 4, 1);
-    test("abcde", 2, 2, "abcde", 1, 5, 1);
-    test("abcde", 2, 2, "abcde", 2, 0, 2);
-    test("abcde", 2, 2, "abcde", 2, 1, 1);
-    test("abcde", 2, 2, "abcde", 2, 2, 0);
-    test("abcde", 2, 2, "abcde", 2, 3, -1);
-    test("abcde", 2, 2, "abcde", 2, 4, -1);
-    test("abcde", 2, 2, "abcde", 4, 0, 2);
-    test("abcde", 2, 2, "abcde", 4, 1, -2);
-    test("abcde", 2, 2, "abcde", 4, 2, -2);
-    test("abcde", 2, 2, "abcde", 5, 0, 2);
-    test("abcde", 2, 2, "abcde", 5, 1, 2);
-    test("abcde", 2, 2, "abcde", 6, 0, 0);
-    test("abcde", 2, 2, "abcdefghij", 0, 0, 2);
-    test("abcde", 2, 2, "abcdefghij", 0, 1, 2);
-    test("abcde", 2, 2, "abcdefghij", 0, 5, 2);
-    test("abcde", 2, 2, "abcdefghij", 0, 9, 2);
-    test("abcde", 2, 2, "abcdefghij", 0, 10, 2);
-    test("abcde", 2, 2, "abcdefghij", 0, 11, 2);
-    test("abcde", 2, 2, "abcdefghij", 1, 0, 2);
-    test("abcde", 2, 2, "abcdefghij", 1, 1, 1);
-    test("abcde", 2, 2, "abcdefghij", 1, 4, 1);
-    test("abcde", 2, 2, "abcdefghij", 1, 8, 1);
-    test("abcde", 2, 2, "abcdefghij", 1, 9, 1);
-    test("abcde", 2, 2, "abcdefghij", 1, 10, 1);
-    test("abcde", 2, 2, "abcdefghij", 5, 0, 2);
-    test("abcde", 2, 2, "abcdefghij", 5, 1, -3);
-    test("abcde", 2, 2, "abcdefghij", 5, 2, -3);
-    test("abcde", 2, 2, "abcdefghij", 5, 4, -3);
+void test12() {
+  test("abcde", 2, 1, "abcde", 2, 1, 0);
+  test("abcde", 2, 1, "abcde", 2, 2, -1);
+  test("abcde", 2, 1, "abcde", 2, 3, -2);
+  test("abcde", 2, 1, "abcde", 2, 4, -2);
+  test("abcde", 2, 1, "abcde", 4, 0, 1);
+  test("abcde", 2, 1, "abcde", 4, 1, -2);
+  test("abcde", 2, 1, "abcde", 4, 2, -2);
+  test("abcde", 2, 1, "abcde", 5, 0, 1);
+  test("abcde", 2, 1, "abcde", 5, 1, 1);
+  test("abcde", 2, 1, "abcde", 6, 0, 0);
+  test("abcde", 2, 1, "abcdefghij", 0, 0, 1);
+  test("abcde", 2, 1, "abcdefghij", 0, 1, 2);
+  test("abcde", 2, 1, "abcdefghij", 0, 5, 2);
+  test("abcde", 2, 1, "abcdefghij", 0, 9, 2);
+  test("abcde", 2, 1, "abcdefghij", 0, 10, 2);
+  test("abcde", 2, 1, "abcdefghij", 0, 11, 2);
+  test("abcde", 2, 1, "abcdefghij", 1, 0, 1);
+  test("abcde", 2, 1, "abcdefghij", 1, 1, 1);
+  test("abcde", 2, 1, "abcdefghij", 1, 4, 1);
+  test("abcde", 2, 1, "abcdefghij", 1, 8, 1);
+  test("abcde", 2, 1, "abcdefghij", 1, 9, 1);
+  test("abcde", 2, 1, "abcdefghij", 1, 10, 1);
+  test("abcde", 2, 1, "abcdefghij", 5, 0, 1);
+  test("abcde", 2, 1, "abcdefghij", 5, 1, -3);
+  test("abcde", 2, 1, "abcdefghij", 5, 2, -3);
+  test("abcde", 2, 1, "abcdefghij", 5, 4, -3);
+  test("abcde", 2, 1, "abcdefghij", 5, 5, -3);
+  test("abcde", 2, 1, "abcdefghij", 5, 6, -3);
+  test("abcde", 2, 1, "abcdefghij", 9, 0, 1);
+  test("abcde", 2, 1, "abcdefghij", 9, 1, -7);
+  test("abcde", 2, 1, "abcdefghij", 9, 2, -7);
+  test("abcde", 2, 1, "abcdefghij", 10, 0, 1);
+  test("abcde", 2, 1, "abcdefghij", 10, 1, 1);
+  test("abcde", 2, 1, "abcdefghij", 11, 0, 0);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 1, 2);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 10, 2);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 19, 2);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 20, 2);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 0, 21, 2);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 1, 1);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 9, 1);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 18, 1);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 19, 1);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 1, 20, 1);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 1, -8);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 5, -8);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 9, -8);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 10, -8);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 10, 11, -8);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 1, -17);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 19, 2, -17);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 0, 1);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcde", 2, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcde", 2, 2, "", 0, 0, 2);
+  test("abcde", 2, 2, "", 0, 1, 2);
+  test("abcde", 2, 2, "", 1, 0, 0);
+  test("abcde", 2, 2, "abcde", 0, 0, 2);
+  test("abcde", 2, 2, "abcde", 0, 1, 2);
+  test("abcde", 2, 2, "abcde", 0, 2, 2);
+  test("abcde", 2, 2, "abcde", 0, 4, 2);
+  test("abcde", 2, 2, "abcde", 0, 5, 2);
+  test("abcde", 2, 2, "abcde", 0, 6, 2);
+  test("abcde", 2, 2, "abcde", 1, 0, 2);
+  test("abcde", 2, 2, "abcde", 1, 1, 1);
+  test("abcde", 2, 2, "abcde", 1, 2, 1);
+  test("abcde", 2, 2, "abcde", 1, 3, 1);
+  test("abcde", 2, 2, "abcde", 1, 4, 1);
+  test("abcde", 2, 2, "abcde", 1, 5, 1);
+  test("abcde", 2, 2, "abcde", 2, 0, 2);
+  test("abcde", 2, 2, "abcde", 2, 1, 1);
+  test("abcde", 2, 2, "abcde", 2, 2, 0);
+  test("abcde", 2, 2, "abcde", 2, 3, -1);
+  test("abcde", 2, 2, "abcde", 2, 4, -1);
+  test("abcde", 2, 2, "abcde", 4, 0, 2);
+  test("abcde", 2, 2, "abcde", 4, 1, -2);
+  test("abcde", 2, 2, "abcde", 4, 2, -2);
+  test("abcde", 2, 2, "abcde", 5, 0, 2);
+  test("abcde", 2, 2, "abcde", 5, 1, 2);
+  test("abcde", 2, 2, "abcde", 6, 0, 0);
+  test("abcde", 2, 2, "abcdefghij", 0, 0, 2);
+  test("abcde", 2, 2, "abcdefghij", 0, 1, 2);
+  test("abcde", 2, 2, "abcdefghij", 0, 5, 2);
+  test("abcde", 2, 2, "abcdefghij", 0, 9, 2);
+  test("abcde", 2, 2, "abcdefghij", 0, 10, 2);
+  test("abcde", 2, 2, "abcdefghij", 0, 11, 2);
+  test("abcde", 2, 2, "abcdefghij", 1, 0, 2);
+  test("abcde", 2, 2, "abcdefghij", 1, 1, 1);
+  test("abcde", 2, 2, "abcdefghij", 1, 4, 1);
+  test("abcde", 2, 2, "abcdefghij", 1, 8, 1);
+  test("abcde", 2, 2, "abcdefghij", 1, 9, 1);
+  test("abcde", 2, 2, "abcdefghij", 1, 10, 1);
+  test("abcde", 2, 2, "abcdefghij", 5, 0, 2);
+  test("abcde", 2, 2, "abcdefghij", 5, 1, -3);
+  test("abcde", 2, 2, "abcdefghij", 5, 2, -3);
+  test("abcde", 2, 2, "abcdefghij", 5, 4, -3);
 }
 
-void test13()
-{
-    test("abcde", 2, 2, "abcdefghij", 5, 5, -3);
-    test("abcde", 2, 2, "abcdefghij", 5, 6, -3);
-    test("abcde", 2, 2, "abcdefghij", 9, 0, 2);
-    test("abcde", 2, 2, "abcdefghij", 9, 1, -7);
-    test("abcde", 2, 2, "abcdefghij", 9, 2, -7);
-    test("abcde", 2, 2, "abcdefghij", 10, 0, 2);
-    test("abcde", 2, 2, "abcdefghij", 10, 1, 2);
-    test("abcde", 2, 2, "abcdefghij", 11, 0, 0);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 0, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 1, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 10, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 19, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 20, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 21, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 0, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 1, 1);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 9, 1);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 18, 1);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 19, 1);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 20, 1);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 0, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 1, -8);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 5, -8);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 9, -8);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 10, -8);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 11, -8);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 0, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 1, -17);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 2, -17);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 0, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 1, 2);
-    test("abcde", 2, 2, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcde", 2, 3, "", 0, 0, 3);
-    test("abcde", 2, 3, "", 0, 1, 3);
-    test("abcde", 2, 3, "", 1, 0, 0);
-    test("abcde", 2, 3, "abcde", 0, 0, 3);
-    test("abcde", 2, 3, "abcde", 0, 1, 2);
-    test("abcde", 2, 3, "abcde", 0, 2, 2);
-    test("abcde", 2, 3, "abcde", 0, 4, 2);
-    test("abcde", 2, 3, "abcde", 0, 5, 2);
-    test("abcde", 2, 3, "abcde", 0, 6, 2);
-    test("abcde", 2, 3, "abcde", 1, 0, 3);
-    test("abcde", 2, 3, "abcde", 1, 1, 1);
-    test("abcde", 2, 3, "abcde", 1, 2, 1);
-    test("abcde", 2, 3, "abcde", 1, 3, 1);
-    test("abcde", 2, 3, "abcde", 1, 4, 1);
-    test("abcde", 2, 3, "abcde", 1, 5, 1);
-    test("abcde", 2, 3, "abcde", 2, 0, 3);
-    test("abcde", 2, 3, "abcde", 2, 1, 2);
-    test("abcde", 2, 3, "abcde", 2, 2, 1);
-    test("abcde", 2, 3, "abcde", 2, 3, 0);
-    test("abcde", 2, 3, "abcde", 2, 4, 0);
-    test("abcde", 2, 3, "abcde", 4, 0, 3);
-    test("abcde", 2, 3, "abcde", 4, 1, -2);
-    test("abcde", 2, 3, "abcde", 4, 2, -2);
-    test("abcde", 2, 3, "abcde", 5, 0, 3);
-    test("abcde", 2, 3, "abcde", 5, 1, 3);
-    test("abcde", 2, 3, "abcde", 6, 0, 0);
-    test("abcde", 2, 3, "abcdefghij", 0, 0, 3);
-    test("abcde", 2, 3, "abcdefghij", 0, 1, 2);
-    test("abcde", 2, 3, "abcdefghij", 0, 5, 2);
-    test("abcde", 2, 3, "abcdefghij", 0, 9, 2);
-    test("abcde", 2, 3, "abcdefghij", 0, 10, 2);
-    test("abcde", 2, 3, "abcdefghij", 0, 11, 2);
-    test("abcde", 2, 3, "abcdefghij", 1, 0, 3);
-    test("abcde", 2, 3, "abcdefghij", 1, 1, 1);
-    test("abcde", 2, 3, "abcdefghij", 1, 4, 1);
-    test("abcde", 2, 3, "abcdefghij", 1, 8, 1);
-    test("abcde", 2, 3, "abcdefghij", 1, 9, 1);
-    test("abcde", 2, 3, "abcdefghij", 1, 10, 1);
-    test("abcde", 2, 3, "abcdefghij", 5, 0, 3);
-    test("abcde", 2, 3, "abcdefghij", 5, 1, -3);
-    test("abcde", 2, 3, "abcdefghij", 5, 2, -3);
-    test("abcde", 2, 3, "abcdefghij", 5, 4, -3);
-    test("abcde", 2, 3, "abcdefghij", 5, 5, -3);
-    test("abcde", 2, 3, "abcdefghij", 5, 6, -3);
-    test("abcde", 2, 3, "abcdefghij", 9, 0, 3);
-    test("abcde", 2, 3, "abcdefghij", 9, 1, -7);
-    test("abcde", 2, 3, "abcdefghij", 9, 2, -7);
-    test("abcde", 2, 3, "abcdefghij", 10, 0, 3);
-    test("abcde", 2, 3, "abcdefghij", 10, 1, 3);
-    test("abcde", 2, 3, "abcdefghij", 11, 0, 0);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 0, 3);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 1, 2);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 10, 2);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 19, 2);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 20, 2);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 21, 2);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 0, 3);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 1, 1);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 9, 1);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 18, 1);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 19, 1);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 20, 1);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 0, 3);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 1, -8);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 5, -8);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 9, -8);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 10, -8);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 11, -8);
+void test13() {
+  test("abcde", 2, 2, "abcdefghij", 5, 5, -3);
+  test("abcde", 2, 2, "abcdefghij", 5, 6, -3);
+  test("abcde", 2, 2, "abcdefghij", 9, 0, 2);
+  test("abcde", 2, 2, "abcdefghij", 9, 1, -7);
+  test("abcde", 2, 2, "abcdefghij", 9, 2, -7);
+  test("abcde", 2, 2, "abcdefghij", 10, 0, 2);
+  test("abcde", 2, 2, "abcdefghij", 10, 1, 2);
+  test("abcde", 2, 2, "abcdefghij", 11, 0, 0);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 0, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 1, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 10, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 19, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 20, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 0, 21, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 0, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 1, 1);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 9, 1);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 18, 1);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 19, 1);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 1, 20, 1);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 0, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 1, -8);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 5, -8);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 9, -8);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 10, -8);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 10, 11, -8);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 0, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 1, -17);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 19, 2, -17);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 0, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 20, 1, 2);
+  test("abcde", 2, 2, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcde", 2, 3, "", 0, 0, 3);
+  test("abcde", 2, 3, "", 0, 1, 3);
+  test("abcde", 2, 3, "", 1, 0, 0);
+  test("abcde", 2, 3, "abcde", 0, 0, 3);
+  test("abcde", 2, 3, "abcde", 0, 1, 2);
+  test("abcde", 2, 3, "abcde", 0, 2, 2);
+  test("abcde", 2, 3, "abcde", 0, 4, 2);
+  test("abcde", 2, 3, "abcde", 0, 5, 2);
+  test("abcde", 2, 3, "abcde", 0, 6, 2);
+  test("abcde", 2, 3, "abcde", 1, 0, 3);
+  test("abcde", 2, 3, "abcde", 1, 1, 1);
+  test("abcde", 2, 3, "abcde", 1, 2, 1);
+  test("abcde", 2, 3, "abcde", 1, 3, 1);
+  test("abcde", 2, 3, "abcde", 1, 4, 1);
+  test("abcde", 2, 3, "abcde", 1, 5, 1);
+  test("abcde", 2, 3, "abcde", 2, 0, 3);
+  test("abcde", 2, 3, "abcde", 2, 1, 2);
+  test("abcde", 2, 3, "abcde", 2, 2, 1);
+  test("abcde", 2, 3, "abcde", 2, 3, 0);
+  test("abcde", 2, 3, "abcde", 2, 4, 0);
+  test("abcde", 2, 3, "abcde", 4, 0, 3);
+  test("abcde", 2, 3, "abcde", 4, 1, -2);
+  test("abcde", 2, 3, "abcde", 4, 2, -2);
+  test("abcde", 2, 3, "abcde", 5, 0, 3);
+  test("abcde", 2, 3, "abcde", 5, 1, 3);
+  test("abcde", 2, 3, "abcde", 6, 0, 0);
+  test("abcde", 2, 3, "abcdefghij", 0, 0, 3);
+  test("abcde", 2, 3, "abcdefghij", 0, 1, 2);
+  test("abcde", 2, 3, "abcdefghij", 0, 5, 2);
+  test("abcde", 2, 3, "abcdefghij", 0, 9, 2);
+  test("abcde", 2, 3, "abcdefghij", 0, 10, 2);
+  test("abcde", 2, 3, "abcdefghij", 0, 11, 2);
+  test("abcde", 2, 3, "abcdefghij", 1, 0, 3);
+  test("abcde", 2, 3, "abcdefghij", 1, 1, 1);
+  test("abcde", 2, 3, "abcdefghij", 1, 4, 1);
+  test("abcde", 2, 3, "abcdefghij", 1, 8, 1);
+  test("abcde", 2, 3, "abcdefghij", 1, 9, 1);
+  test("abcde", 2, 3, "abcdefghij", 1, 10, 1);
+  test("abcde", 2, 3, "abcdefghij", 5, 0, 3);
+  test("abcde", 2, 3, "abcdefghij", 5, 1, -3);
+  test("abcde", 2, 3, "abcdefghij", 5, 2, -3);
+  test("abcde", 2, 3, "abcdefghij", 5, 4, -3);
+  test("abcde", 2, 3, "abcdefghij", 5, 5, -3);
+  test("abcde", 2, 3, "abcdefghij", 5, 6, -3);
+  test("abcde", 2, 3, "abcdefghij", 9, 0, 3);
+  test("abcde", 2, 3, "abcdefghij", 9, 1, -7);
+  test("abcde", 2, 3, "abcdefghij", 9, 2, -7);
+  test("abcde", 2, 3, "abcdefghij", 10, 0, 3);
+  test("abcde", 2, 3, "abcdefghij", 10, 1, 3);
+  test("abcde", 2, 3, "abcdefghij", 11, 0, 0);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 0, 3);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 1, 2);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 10, 2);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 19, 2);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 20, 2);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 0, 21, 2);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 0, 3);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 1, 1);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 9, 1);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 18, 1);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 19, 1);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 1, 20, 1);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 0, 3);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 1, -8);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 5, -8);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 9, -8);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 10, -8);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 10, 11, -8);
 }
 
-void test14()
-{
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 0, 3);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 1, -17);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 2, -17);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 0, 3);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 1, 3);
-    test("abcde", 2, 3, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcde", 2, 4, "", 0, 0, 3);
-    test("abcde", 2, 4, "", 0, 1, 3);
-    test("abcde", 2, 4, "", 1, 0, 0);
-    test("abcde", 2, 4, "abcde", 0, 0, 3);
-    test("abcde", 2, 4, "abcde", 0, 1, 2);
-    test("abcde", 2, 4, "abcde", 0, 2, 2);
-    test("abcde", 2, 4, "abcde", 0, 4, 2);
-    test("abcde", 2, 4, "abcde", 0, 5, 2);
-    test("abcde", 2, 4, "abcde", 0, 6, 2);
-    test("abcde", 2, 4, "abcde", 1, 0, 3);
-    test("abcde", 2, 4, "abcde", 1, 1, 1);
-    test("abcde", 2, 4, "abcde", 1, 2, 1);
-    test("abcde", 2, 4, "abcde", 1, 3, 1);
-    test("abcde", 2, 4, "abcde", 1, 4, 1);
-    test("abcde", 2, 4, "abcde", 1, 5, 1);
-    test("abcde", 2, 4, "abcde", 2, 0, 3);
-    test("abcde", 2, 4, "abcde", 2, 1, 2);
-    test("abcde", 2, 4, "abcde", 2, 2, 1);
-    test("abcde", 2, 4, "abcde", 2, 3, 0);
-    test("abcde", 2, 4, "abcde", 2, 4, 0);
-    test("abcde", 2, 4, "abcde", 4, 0, 3);
-    test("abcde", 2, 4, "abcde", 4, 1, -2);
-    test("abcde", 2, 4, "abcde", 4, 2, -2);
-    test("abcde", 2, 4, "abcde", 5, 0, 3);
-    test("abcde", 2, 4, "abcde", 5, 1, 3);
-    test("abcde", 2, 4, "abcde", 6, 0, 0);
-    test("abcde", 2, 4, "abcdefghij", 0, 0, 3);
-    test("abcde", 2, 4, "abcdefghij", 0, 1, 2);
-    test("abcde", 2, 4, "abcdefghij", 0, 5, 2);
-    test("abcde", 2, 4, "abcdefghij", 0, 9, 2);
-    test("abcde", 2, 4, "abcdefghij", 0, 10, 2);
-    test("abcde", 2, 4, "abcdefghij", 0, 11, 2);
-    test("abcde", 2, 4, "abcdefghij", 1, 0, 3);
-    test("abcde", 2, 4, "abcdefghij", 1, 1, 1);
-    test("abcde", 2, 4, "abcdefghij", 1, 4, 1);
-    test("abcde", 2, 4, "abcdefghij", 1, 8, 1);
-    test("abcde", 2, 4, "abcdefghij", 1, 9, 1);
-    test("abcde", 2, 4, "abcdefghij", 1, 10, 1);
-    test("abcde", 2, 4, "abcdefghij", 5, 0, 3);
-    test("abcde", 2, 4, "abcdefghij", 5, 1, -3);
-    test("abcde", 2, 4, "abcdefghij", 5, 2, -3);
-    test("abcde", 2, 4, "abcdefghij", 5, 4, -3);
-    test("abcde", 2, 4, "abcdefghij", 5, 5, -3);
-    test("abcde", 2, 4, "abcdefghij", 5, 6, -3);
-    test("abcde", 2, 4, "abcdefghij", 9, 0, 3);
-    test("abcde", 2, 4, "abcdefghij", 9, 1, -7);
-    test("abcde", 2, 4, "abcdefghij", 9, 2, -7);
-    test("abcde", 2, 4, "abcdefghij", 10, 0, 3);
-    test("abcde", 2, 4, "abcdefghij", 10, 1, 3);
-    test("abcde", 2, 4, "abcdefghij", 11, 0, 0);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 0, 3);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 1, 2);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 10, 2);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 19, 2);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 20, 2);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 21, 2);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 0, 3);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 1, 1);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 9, 1);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 18, 1);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 19, 1);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 20, 1);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 0, 3);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 1, -8);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 5, -8);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 9, -8);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 10, -8);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 11, -8);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 0, 3);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 1, -17);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 2, -17);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 0, 3);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 1, 3);
-    test("abcde", 2, 4, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcde", 4, 0, "", 0, 0, 0);
-    test("abcde", 4, 0, "", 0, 1, 0);
-    test("abcde", 4, 0, "", 1, 0, 0);
-    test("abcde", 4, 0, "abcde", 0, 0, 0);
-    test("abcde", 4, 0, "abcde", 0, 1, -1);
-    test("abcde", 4, 0, "abcde", 0, 2, -2);
-    test("abcde", 4, 0, "abcde", 0, 4, -4);
-    test("abcde", 4, 0, "abcde", 0, 5, -5);
-    test("abcde", 4, 0, "abcde", 0, 6, -5);
-    test("abcde", 4, 0, "abcde", 1, 0, 0);
-    test("abcde", 4, 0, "abcde", 1, 1, -1);
-    test("abcde", 4, 0, "abcde", 1, 2, -2);
-    test("abcde", 4, 0, "abcde", 1, 3, -3);
-    test("abcde", 4, 0, "abcde", 1, 4, -4);
-    test("abcde", 4, 0, "abcde", 1, 5, -4);
-    test("abcde", 4, 0, "abcde", 2, 0, 0);
-    test("abcde", 4, 0, "abcde", 2, 1, -1);
-    test("abcde", 4, 0, "abcde", 2, 2, -2);
-    test("abcde", 4, 0, "abcde", 2, 3, -3);
-    test("abcde", 4, 0, "abcde", 2, 4, -3);
+void test14() {
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 0, 3);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 1, -17);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 19, 2, -17);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 0, 3);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 20, 1, 3);
+  test("abcde", 2, 3, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcde", 2, 4, "", 0, 0, 3);
+  test("abcde", 2, 4, "", 0, 1, 3);
+  test("abcde", 2, 4, "", 1, 0, 0);
+  test("abcde", 2, 4, "abcde", 0, 0, 3);
+  test("abcde", 2, 4, "abcde", 0, 1, 2);
+  test("abcde", 2, 4, "abcde", 0, 2, 2);
+  test("abcde", 2, 4, "abcde", 0, 4, 2);
+  test("abcde", 2, 4, "abcde", 0, 5, 2);
+  test("abcde", 2, 4, "abcde", 0, 6, 2);
+  test("abcde", 2, 4, "abcde", 1, 0, 3);
+  test("abcde", 2, 4, "abcde", 1, 1, 1);
+  test("abcde", 2, 4, "abcde", 1, 2, 1);
+  test("abcde", 2, 4, "abcde", 1, 3, 1);
+  test("abcde", 2, 4, "abcde", 1, 4, 1);
+  test("abcde", 2, 4, "abcde", 1, 5, 1);
+  test("abcde", 2, 4, "abcde", 2, 0, 3);
+  test("abcde", 2, 4, "abcde", 2, 1, 2);
+  test("abcde", 2, 4, "abcde", 2, 2, 1);
+  test("abcde", 2, 4, "abcde", 2, 3, 0);
+  test("abcde", 2, 4, "abcde", 2, 4, 0);
+  test("abcde", 2, 4, "abcde", 4, 0, 3);
+  test("abcde", 2, 4, "abcde", 4, 1, -2);
+  test("abcde", 2, 4, "abcde", 4, 2, -2);
+  test("abcde", 2, 4, "abcde", 5, 0, 3);
+  test("abcde", 2, 4, "abcde", 5, 1, 3);
+  test("abcde", 2, 4, "abcde", 6, 0, 0);
+  test("abcde", 2, 4, "abcdefghij", 0, 0, 3);
+  test("abcde", 2, 4, "abcdefghij", 0, 1, 2);
+  test("abcde", 2, 4, "abcdefghij", 0, 5, 2);
+  test("abcde", 2, 4, "abcdefghij", 0, 9, 2);
+  test("abcde", 2, 4, "abcdefghij", 0, 10, 2);
+  test("abcde", 2, 4, "abcdefghij", 0, 11, 2);
+  test("abcde", 2, 4, "abcdefghij", 1, 0, 3);
+  test("abcde", 2, 4, "abcdefghij", 1, 1, 1);
+  test("abcde", 2, 4, "abcdefghij", 1, 4, 1);
+  test("abcde", 2, 4, "abcdefghij", 1, 8, 1);
+  test("abcde", 2, 4, "abcdefghij", 1, 9, 1);
+  test("abcde", 2, 4, "abcdefghij", 1, 10, 1);
+  test("abcde", 2, 4, "abcdefghij", 5, 0, 3);
+  test("abcde", 2, 4, "abcdefghij", 5, 1, -3);
+  test("abcde", 2, 4, "abcdefghij", 5, 2, -3);
+  test("abcde", 2, 4, "abcdefghij", 5, 4, -3);
+  test("abcde", 2, 4, "abcdefghij", 5, 5, -3);
+  test("abcde", 2, 4, "abcdefghij", 5, 6, -3);
+  test("abcde", 2, 4, "abcdefghij", 9, 0, 3);
+  test("abcde", 2, 4, "abcdefghij", 9, 1, -7);
+  test("abcde", 2, 4, "abcdefghij", 9, 2, -7);
+  test("abcde", 2, 4, "abcdefghij", 10, 0, 3);
+  test("abcde", 2, 4, "abcdefghij", 10, 1, 3);
+  test("abcde", 2, 4, "abcdefghij", 11, 0, 0);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 0, 3);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 1, 2);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 10, 2);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 19, 2);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 20, 2);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 0, 21, 2);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 0, 3);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 1, 1);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 9, 1);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 18, 1);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 19, 1);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 1, 20, 1);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 0, 3);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 1, -8);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 5, -8);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 9, -8);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 10, -8);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 10, 11, -8);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 0, 3);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 1, -17);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 19, 2, -17);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 0, 3);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 20, 1, 3);
+  test("abcde", 2, 4, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcde", 4, 0, "", 0, 0, 0);
+  test("abcde", 4, 0, "", 0, 1, 0);
+  test("abcde", 4, 0, "", 1, 0, 0);
+  test("abcde", 4, 0, "abcde", 0, 0, 0);
+  test("abcde", 4, 0, "abcde", 0, 1, -1);
+  test("abcde", 4, 0, "abcde", 0, 2, -2);
+  test("abcde", 4, 0, "abcde", 0, 4, -4);
+  test("abcde", 4, 0, "abcde", 0, 5, -5);
+  test("abcde", 4, 0, "abcde", 0, 6, -5);
+  test("abcde", 4, 0, "abcde", 1, 0, 0);
+  test("abcde", 4, 0, "abcde", 1, 1, -1);
+  test("abcde", 4, 0, "abcde", 1, 2, -2);
+  test("abcde", 4, 0, "abcde", 1, 3, -3);
+  test("abcde", 4, 0, "abcde", 1, 4, -4);
+  test("abcde", 4, 0, "abcde", 1, 5, -4);
+  test("abcde", 4, 0, "abcde", 2, 0, 0);
+  test("abcde", 4, 0, "abcde", 2, 1, -1);
+  test("abcde", 4, 0, "abcde", 2, 2, -2);
+  test("abcde", 4, 0, "abcde", 2, 3, -3);
+  test("abcde", 4, 0, "abcde", 2, 4, -3);
 }
 
-void test15()
-{
-    test("abcde", 4, 0, "abcde", 4, 0, 0);
-    test("abcde", 4, 0, "abcde", 4, 1, -1);
-    test("abcde", 4, 0, "abcde", 4, 2, -1);
-    test("abcde", 4, 0, "abcde", 5, 0, 0);
-    test("abcde", 4, 0, "abcde", 5, 1, 0);
-    test("abcde", 4, 0, "abcde", 6, 0, 0);
-    test("abcde", 4, 0, "abcdefghij", 0, 0, 0);
-    test("abcde", 4, 0, "abcdefghij", 0, 1, -1);
-    test("abcde", 4, 0, "abcdefghij", 0, 5, -5);
-    test("abcde", 4, 0, "abcdefghij", 0, 9, -9);
-    test("abcde", 4, 0, "abcdefghij", 0, 10, -10);
-    test("abcde", 4, 0, "abcdefghij", 0, 11, -10);
-    test("abcde", 4, 0, "abcdefghij", 1, 0, 0);
-    test("abcde", 4, 0, "abcdefghij", 1, 1, -1);
-    test("abcde", 4, 0, "abcdefghij", 1, 4, -4);
-    test("abcde", 4, 0, "abcdefghij", 1, 8, -8);
-    test("abcde", 4, 0, "abcdefghij", 1, 9, -9);
-    test("abcde", 4, 0, "abcdefghij", 1, 10, -9);
-    test("abcde", 4, 0, "abcdefghij", 5, 0, 0);
-    test("abcde", 4, 0, "abcdefghij", 5, 1, -1);
-    test("abcde", 4, 0, "abcdefghij", 5, 2, -2);
-    test("abcde", 4, 0, "abcdefghij", 5, 4, -4);
-    test("abcde", 4, 0, "abcdefghij", 5, 5, -5);
-    test("abcde", 4, 0, "abcdefghij", 5, 6, -5);
-    test("abcde", 4, 0, "abcdefghij", 9, 0, 0);
-    test("abcde", 4, 0, "abcdefghij", 9, 1, -1);
-    test("abcde", 4, 0, "abcdefghij", 9, 2, -1);
-    test("abcde", 4, 0, "abcdefghij", 10, 0, 0);
-    test("abcde", 4, 0, "abcdefghij", 10, 1, 0);
-    test("abcde", 4, 0, "abcdefghij", 11, 0, 0);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcde", 4, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcde", 4, 1, "", 0, 0, 1);
-    test("abcde", 4, 1, "", 0, 1, 1);
-    test("abcde", 4, 1, "", 1, 0, 0);
-    test("abcde", 4, 1, "abcde", 0, 0, 1);
-    test("abcde", 4, 1, "abcde", 0, 1, 4);
-    test("abcde", 4, 1, "abcde", 0, 2, 4);
-    test("abcde", 4, 1, "abcde", 0, 4, 4);
-    test("abcde", 4, 1, "abcde", 0, 5, 4);
-    test("abcde", 4, 1, "abcde", 0, 6, 4);
-    test("abcde", 4, 1, "abcde", 1, 0, 1);
-    test("abcde", 4, 1, "abcde", 1, 1, 3);
-    test("abcde", 4, 1, "abcde", 1, 2, 3);
-    test("abcde", 4, 1, "abcde", 1, 3, 3);
-    test("abcde", 4, 1, "abcde", 1, 4, 3);
-    test("abcde", 4, 1, "abcde", 1, 5, 3);
-    test("abcde", 4, 1, "abcde", 2, 0, 1);
-    test("abcde", 4, 1, "abcde", 2, 1, 2);
-    test("abcde", 4, 1, "abcde", 2, 2, 2);
-    test("abcde", 4, 1, "abcde", 2, 3, 2);
-    test("abcde", 4, 1, "abcde", 2, 4, 2);
-    test("abcde", 4, 1, "abcde", 4, 0, 1);
-    test("abcde", 4, 1, "abcde", 4, 1, 0);
-    test("abcde", 4, 1, "abcde", 4, 2, 0);
-    test("abcde", 4, 1, "abcde", 5, 0, 1);
-    test("abcde", 4, 1, "abcde", 5, 1, 1);
-    test("abcde", 4, 1, "abcde", 6, 0, 0);
-    test("abcde", 4, 1, "abcdefghij", 0, 0, 1);
-    test("abcde", 4, 1, "abcdefghij", 0, 1, 4);
-    test("abcde", 4, 1, "abcdefghij", 0, 5, 4);
-    test("abcde", 4, 1, "abcdefghij", 0, 9, 4);
-    test("abcde", 4, 1, "abcdefghij", 0, 10, 4);
-    test("abcde", 4, 1, "abcdefghij", 0, 11, 4);
-    test("abcde", 4, 1, "abcdefghij", 1, 0, 1);
-    test("abcde", 4, 1, "abcdefghij", 1, 1, 3);
-    test("abcde", 4, 1, "abcdefghij", 1, 4, 3);
-    test("abcde", 4, 1, "abcdefghij", 1, 8, 3);
-    test("abcde", 4, 1, "abcdefghij", 1, 9, 3);
-    test("abcde", 4, 1, "abcdefghij", 1, 10, 3);
-    test("abcde", 4, 1, "abcdefghij", 5, 0, 1);
-    test("abcde", 4, 1, "abcdefghij", 5, 1, -1);
-    test("abcde", 4, 1, "abcdefghij", 5, 2, -1);
-    test("abcde", 4, 1, "abcdefghij", 5, 4, -1);
-    test("abcde", 4, 1, "abcdefghij", 5, 5, -1);
-    test("abcde", 4, 1, "abcdefghij", 5, 6, -1);
-    test("abcde", 4, 1, "abcdefghij", 9, 0, 1);
-    test("abcde", 4, 1, "abcdefghij", 9, 1, -5);
+void test15() {
+  test("abcde", 4, 0, "abcde", 4, 0, 0);
+  test("abcde", 4, 0, "abcde", 4, 1, -1);
+  test("abcde", 4, 0, "abcde", 4, 2, -1);
+  test("abcde", 4, 0, "abcde", 5, 0, 0);
+  test("abcde", 4, 0, "abcde", 5, 1, 0);
+  test("abcde", 4, 0, "abcde", 6, 0, 0);
+  test("abcde", 4, 0, "abcdefghij", 0, 0, 0);
+  test("abcde", 4, 0, "abcdefghij", 0, 1, -1);
+  test("abcde", 4, 0, "abcdefghij", 0, 5, -5);
+  test("abcde", 4, 0, "abcdefghij", 0, 9, -9);
+  test("abcde", 4, 0, "abcdefghij", 0, 10, -10);
+  test("abcde", 4, 0, "abcdefghij", 0, 11, -10);
+  test("abcde", 4, 0, "abcdefghij", 1, 0, 0);
+  test("abcde", 4, 0, "abcdefghij", 1, 1, -1);
+  test("abcde", 4, 0, "abcdefghij", 1, 4, -4);
+  test("abcde", 4, 0, "abcdefghij", 1, 8, -8);
+  test("abcde", 4, 0, "abcdefghij", 1, 9, -9);
+  test("abcde", 4, 0, "abcdefghij", 1, 10, -9);
+  test("abcde", 4, 0, "abcdefghij", 5, 0, 0);
+  test("abcde", 4, 0, "abcdefghij", 5, 1, -1);
+  test("abcde", 4, 0, "abcdefghij", 5, 2, -2);
+  test("abcde", 4, 0, "abcdefghij", 5, 4, -4);
+  test("abcde", 4, 0, "abcdefghij", 5, 5, -5);
+  test("abcde", 4, 0, "abcdefghij", 5, 6, -5);
+  test("abcde", 4, 0, "abcdefghij", 9, 0, 0);
+  test("abcde", 4, 0, "abcdefghij", 9, 1, -1);
+  test("abcde", 4, 0, "abcdefghij", 9, 2, -1);
+  test("abcde", 4, 0, "abcdefghij", 10, 0, 0);
+  test("abcde", 4, 0, "abcdefghij", 10, 1, 0);
+  test("abcde", 4, 0, "abcdefghij", 11, 0, 0);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcde", 4, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcde", 4, 1, "", 0, 0, 1);
+  test("abcde", 4, 1, "", 0, 1, 1);
+  test("abcde", 4, 1, "", 1, 0, 0);
+  test("abcde", 4, 1, "abcde", 0, 0, 1);
+  test("abcde", 4, 1, "abcde", 0, 1, 4);
+  test("abcde", 4, 1, "abcde", 0, 2, 4);
+  test("abcde", 4, 1, "abcde", 0, 4, 4);
+  test("abcde", 4, 1, "abcde", 0, 5, 4);
+  test("abcde", 4, 1, "abcde", 0, 6, 4);
+  test("abcde", 4, 1, "abcde", 1, 0, 1);
+  test("abcde", 4, 1, "abcde", 1, 1, 3);
+  test("abcde", 4, 1, "abcde", 1, 2, 3);
+  test("abcde", 4, 1, "abcde", 1, 3, 3);
+  test("abcde", 4, 1, "abcde", 1, 4, 3);
+  test("abcde", 4, 1, "abcde", 1, 5, 3);
+  test("abcde", 4, 1, "abcde", 2, 0, 1);
+  test("abcde", 4, 1, "abcde", 2, 1, 2);
+  test("abcde", 4, 1, "abcde", 2, 2, 2);
+  test("abcde", 4, 1, "abcde", 2, 3, 2);
+  test("abcde", 4, 1, "abcde", 2, 4, 2);
+  test("abcde", 4, 1, "abcde", 4, 0, 1);
+  test("abcde", 4, 1, "abcde", 4, 1, 0);
+  test("abcde", 4, 1, "abcde", 4, 2, 0);
+  test("abcde", 4, 1, "abcde", 5, 0, 1);
+  test("abcde", 4, 1, "abcde", 5, 1, 1);
+  test("abcde", 4, 1, "abcde", 6, 0, 0);
+  test("abcde", 4, 1, "abcdefghij", 0, 0, 1);
+  test("abcde", 4, 1, "abcdefghij", 0, 1, 4);
+  test("abcde", 4, 1, "abcdefghij", 0, 5, 4);
+  test("abcde", 4, 1, "abcdefghij", 0, 9, 4);
+  test("abcde", 4, 1, "abcdefghij", 0, 10, 4);
+  test("abcde", 4, 1, "abcdefghij", 0, 11, 4);
+  test("abcde", 4, 1, "abcdefghij", 1, 0, 1);
+  test("abcde", 4, 1, "abcdefghij", 1, 1, 3);
+  test("abcde", 4, 1, "abcdefghij", 1, 4, 3);
+  test("abcde", 4, 1, "abcdefghij", 1, 8, 3);
+  test("abcde", 4, 1, "abcdefghij", 1, 9, 3);
+  test("abcde", 4, 1, "abcdefghij", 1, 10, 3);
+  test("abcde", 4, 1, "abcdefghij", 5, 0, 1);
+  test("abcde", 4, 1, "abcdefghij", 5, 1, -1);
+  test("abcde", 4, 1, "abcdefghij", 5, 2, -1);
+  test("abcde", 4, 1, "abcdefghij", 5, 4, -1);
+  test("abcde", 4, 1, "abcdefghij", 5, 5, -1);
+  test("abcde", 4, 1, "abcdefghij", 5, 6, -1);
+  test("abcde", 4, 1, "abcdefghij", 9, 0, 1);
+  test("abcde", 4, 1, "abcdefghij", 9, 1, -5);
 }
 
-void test16()
-{
-    test("abcde", 4, 1, "abcdefghij", 9, 2, -5);
-    test("abcde", 4, 1, "abcdefghij", 10, 0, 1);
-    test("abcde", 4, 1, "abcdefghij", 10, 1, 1);
-    test("abcde", 4, 1, "abcdefghij", 11, 0, 0);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 1, 4);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 10, 4);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 19, 4);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 20, 4);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 21, 4);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 1, 3);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 9, 3);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 18, 3);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 19, 3);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 20, 3);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 1, -6);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 5, -6);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 9, -6);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 10, -6);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 11, -6);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 1, -15);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 2, -15);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 0, 1);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcde", 4, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcde", 4, 2, "", 0, 0, 1);
-    test("abcde", 4, 2, "", 0, 1, 1);
-    test("abcde", 4, 2, "", 1, 0, 0);
-    test("abcde", 4, 2, "abcde", 0, 0, 1);
-    test("abcde", 4, 2, "abcde", 0, 1, 4);
-    test("abcde", 4, 2, "abcde", 0, 2, 4);
-    test("abcde", 4, 2, "abcde", 0, 4, 4);
-    test("abcde", 4, 2, "abcde", 0, 5, 4);
-    test("abcde", 4, 2, "abcde", 0, 6, 4);
-    test("abcde", 4, 2, "abcde", 1, 0, 1);
-    test("abcde", 4, 2, "abcde", 1, 1, 3);
-    test("abcde", 4, 2, "abcde", 1, 2, 3);
-    test("abcde", 4, 2, "abcde", 1, 3, 3);
-    test("abcde", 4, 2, "abcde", 1, 4, 3);
-    test("abcde", 4, 2, "abcde", 1, 5, 3);
-    test("abcde", 4, 2, "abcde", 2, 0, 1);
-    test("abcde", 4, 2, "abcde", 2, 1, 2);
-    test("abcde", 4, 2, "abcde", 2, 2, 2);
-    test("abcde", 4, 2, "abcde", 2, 3, 2);
-    test("abcde", 4, 2, "abcde", 2, 4, 2);
-    test("abcde", 4, 2, "abcde", 4, 0, 1);
-    test("abcde", 4, 2, "abcde", 4, 1, 0);
-    test("abcde", 4, 2, "abcde", 4, 2, 0);
-    test("abcde", 4, 2, "abcde", 5, 0, 1);
-    test("abcde", 4, 2, "abcde", 5, 1, 1);
-    test("abcde", 4, 2, "abcde", 6, 0, 0);
-    test("abcde", 4, 2, "abcdefghij", 0, 0, 1);
-    test("abcde", 4, 2, "abcdefghij", 0, 1, 4);
-    test("abcde", 4, 2, "abcdefghij", 0, 5, 4);
-    test("abcde", 4, 2, "abcdefghij", 0, 9, 4);
-    test("abcde", 4, 2, "abcdefghij", 0, 10, 4);
-    test("abcde", 4, 2, "abcdefghij", 0, 11, 4);
-    test("abcde", 4, 2, "abcdefghij", 1, 0, 1);
-    test("abcde", 4, 2, "abcdefghij", 1, 1, 3);
-    test("abcde", 4, 2, "abcdefghij", 1, 4, 3);
-    test("abcde", 4, 2, "abcdefghij", 1, 8, 3);
-    test("abcde", 4, 2, "abcdefghij", 1, 9, 3);
-    test("abcde", 4, 2, "abcdefghij", 1, 10, 3);
-    test("abcde", 4, 2, "abcdefghij", 5, 0, 1);
-    test("abcde", 4, 2, "abcdefghij", 5, 1, -1);
-    test("abcde", 4, 2, "abcdefghij", 5, 2, -1);
-    test("abcde", 4, 2, "abcdefghij", 5, 4, -1);
-    test("abcde", 4, 2, "abcdefghij", 5, 5, -1);
-    test("abcde", 4, 2, "abcdefghij", 5, 6, -1);
-    test("abcde", 4, 2, "abcdefghij", 9, 0, 1);
-    test("abcde", 4, 2, "abcdefghij", 9, 1, -5);
-    test("abcde", 4, 2, "abcdefghij", 9, 2, -5);
-    test("abcde", 4, 2, "abcdefghij", 10, 0, 1);
-    test("abcde", 4, 2, "abcdefghij", 10, 1, 1);
-    test("abcde", 4, 2, "abcdefghij", 11, 0, 0);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 1, 4);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 10, 4);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 19, 4);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 20, 4);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 21, 4);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 1, 3);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 9, 3);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 18, 3);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 19, 3);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 20, 3);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 1, -6);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 5, -6);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 9, -6);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 10, -6);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 11, -6);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 1, -15);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 2, -15);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 0, 1);
+void test16() {
+  test("abcde", 4, 1, "abcdefghij", 9, 2, -5);
+  test("abcde", 4, 1, "abcdefghij", 10, 0, 1);
+  test("abcde", 4, 1, "abcdefghij", 10, 1, 1);
+  test("abcde", 4, 1, "abcdefghij", 11, 0, 0);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 1, 4);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 10, 4);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 19, 4);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 20, 4);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 0, 21, 4);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 1, 3);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 9, 3);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 18, 3);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 19, 3);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 1, 20, 3);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 1, -6);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 5, -6);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 9, -6);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 10, -6);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 10, 11, -6);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 1, -15);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 19, 2, -15);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 0, 1);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcde", 4, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcde", 4, 2, "", 0, 0, 1);
+  test("abcde", 4, 2, "", 0, 1, 1);
+  test("abcde", 4, 2, "", 1, 0, 0);
+  test("abcde", 4, 2, "abcde", 0, 0, 1);
+  test("abcde", 4, 2, "abcde", 0, 1, 4);
+  test("abcde", 4, 2, "abcde", 0, 2, 4);
+  test("abcde", 4, 2, "abcde", 0, 4, 4);
+  test("abcde", 4, 2, "abcde", 0, 5, 4);
+  test("abcde", 4, 2, "abcde", 0, 6, 4);
+  test("abcde", 4, 2, "abcde", 1, 0, 1);
+  test("abcde", 4, 2, "abcde", 1, 1, 3);
+  test("abcde", 4, 2, "abcde", 1, 2, 3);
+  test("abcde", 4, 2, "abcde", 1, 3, 3);
+  test("abcde", 4, 2, "abcde", 1, 4, 3);
+  test("abcde", 4, 2, "abcde", 1, 5, 3);
+  test("abcde", 4, 2, "abcde", 2, 0, 1);
+  test("abcde", 4, 2, "abcde", 2, 1, 2);
+  test("abcde", 4, 2, "abcde", 2, 2, 2);
+  test("abcde", 4, 2, "abcde", 2, 3, 2);
+  test("abcde", 4, 2, "abcde", 2, 4, 2);
+  test("abcde", 4, 2, "abcde", 4, 0, 1);
+  test("abcde", 4, 2, "abcde", 4, 1, 0);
+  test("abcde", 4, 2, "abcde", 4, 2, 0);
+  test("abcde", 4, 2, "abcde", 5, 0, 1);
+  test("abcde", 4, 2, "abcde", 5, 1, 1);
+  test("abcde", 4, 2, "abcde", 6, 0, 0);
+  test("abcde", 4, 2, "abcdefghij", 0, 0, 1);
+  test("abcde", 4, 2, "abcdefghij", 0, 1, 4);
+  test("abcde", 4, 2, "abcdefghij", 0, 5, 4);
+  test("abcde", 4, 2, "abcdefghij", 0, 9, 4);
+  test("abcde", 4, 2, "abcdefghij", 0, 10, 4);
+  test("abcde", 4, 2, "abcdefghij", 0, 11, 4);
+  test("abcde", 4, 2, "abcdefghij", 1, 0, 1);
+  test("abcde", 4, 2, "abcdefghij", 1, 1, 3);
+  test("abcde", 4, 2, "abcdefghij", 1, 4, 3);
+  test("abcde", 4, 2, "abcdefghij", 1, 8, 3);
+  test("abcde", 4, 2, "abcdefghij", 1, 9, 3);
+  test("abcde", 4, 2, "abcdefghij", 1, 10, 3);
+  test("abcde", 4, 2, "abcdefghij", 5, 0, 1);
+  test("abcde", 4, 2, "abcdefghij", 5, 1, -1);
+  test("abcde", 4, 2, "abcdefghij", 5, 2, -1);
+  test("abcde", 4, 2, "abcdefghij", 5, 4, -1);
+  test("abcde", 4, 2, "abcdefghij", 5, 5, -1);
+  test("abcde", 4, 2, "abcdefghij", 5, 6, -1);
+  test("abcde", 4, 2, "abcdefghij", 9, 0, 1);
+  test("abcde", 4, 2, "abcdefghij", 9, 1, -5);
+  test("abcde", 4, 2, "abcdefghij", 9, 2, -5);
+  test("abcde", 4, 2, "abcdefghij", 10, 0, 1);
+  test("abcde", 4, 2, "abcdefghij", 10, 1, 1);
+  test("abcde", 4, 2, "abcdefghij", 11, 0, 0);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 1, 4);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 10, 4);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 19, 4);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 20, 4);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 0, 21, 4);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 1, 3);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 9, 3);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 18, 3);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 19, 3);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 1, 20, 3);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 1, -6);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 5, -6);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 9, -6);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 10, -6);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 10, 11, -6);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 1, -15);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 19, 2, -15);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 0, 1);
 }
 
-void test17()
-{
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcde", 4, 2, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcde", 5, 0, "", 0, 0, 0);
-    test("abcde", 5, 0, "", 0, 1, 0);
-    test("abcde", 5, 0, "", 1, 0, 0);
-    test("abcde", 5, 0, "abcde", 0, 0, 0);
-    test("abcde", 5, 0, "abcde", 0, 1, -1);
-    test("abcde", 5, 0, "abcde", 0, 2, -2);
-    test("abcde", 5, 0, "abcde", 0, 4, -4);
-    test("abcde", 5, 0, "abcde", 0, 5, -5);
-    test("abcde", 5, 0, "abcde", 0, 6, -5);
-    test("abcde", 5, 0, "abcde", 1, 0, 0);
-    test("abcde", 5, 0, "abcde", 1, 1, -1);
-    test("abcde", 5, 0, "abcde", 1, 2, -2);
-    test("abcde", 5, 0, "abcde", 1, 3, -3);
-    test("abcde", 5, 0, "abcde", 1, 4, -4);
-    test("abcde", 5, 0, "abcde", 1, 5, -4);
-    test("abcde", 5, 0, "abcde", 2, 0, 0);
-    test("abcde", 5, 0, "abcde", 2, 1, -1);
-    test("abcde", 5, 0, "abcde", 2, 2, -2);
-    test("abcde", 5, 0, "abcde", 2, 3, -3);
-    test("abcde", 5, 0, "abcde", 2, 4, -3);
-    test("abcde", 5, 0, "abcde", 4, 0, 0);
-    test("abcde", 5, 0, "abcde", 4, 1, -1);
-    test("abcde", 5, 0, "abcde", 4, 2, -1);
-    test("abcde", 5, 0, "abcde", 5, 0, 0);
-    test("abcde", 5, 0, "abcde", 5, 1, 0);
-    test("abcde", 5, 0, "abcde", 6, 0, 0);
-    test("abcde", 5, 0, "abcdefghij", 0, 0, 0);
-    test("abcde", 5, 0, "abcdefghij", 0, 1, -1);
-    test("abcde", 5, 0, "abcdefghij", 0, 5, -5);
-    test("abcde", 5, 0, "abcdefghij", 0, 9, -9);
-    test("abcde", 5, 0, "abcdefghij", 0, 10, -10);
-    test("abcde", 5, 0, "abcdefghij", 0, 11, -10);
-    test("abcde", 5, 0, "abcdefghij", 1, 0, 0);
-    test("abcde", 5, 0, "abcdefghij", 1, 1, -1);
-    test("abcde", 5, 0, "abcdefghij", 1, 4, -4);
-    test("abcde", 5, 0, "abcdefghij", 1, 8, -8);
-    test("abcde", 5, 0, "abcdefghij", 1, 9, -9);
-    test("abcde", 5, 0, "abcdefghij", 1, 10, -9);
-    test("abcde", 5, 0, "abcdefghij", 5, 0, 0);
-    test("abcde", 5, 0, "abcdefghij", 5, 1, -1);
-    test("abcde", 5, 0, "abcdefghij", 5, 2, -2);
-    test("abcde", 5, 0, "abcdefghij", 5, 4, -4);
-    test("abcde", 5, 0, "abcdefghij", 5, 5, -5);
-    test("abcde", 5, 0, "abcdefghij", 5, 6, -5);
-    test("abcde", 5, 0, "abcdefghij", 9, 0, 0);
-    test("abcde", 5, 0, "abcdefghij", 9, 1, -1);
-    test("abcde", 5, 0, "abcdefghij", 9, 2, -1);
-    test("abcde", 5, 0, "abcdefghij", 10, 0, 0);
-    test("abcde", 5, 0, "abcdefghij", 10, 1, 0);
-    test("abcde", 5, 0, "abcdefghij", 11, 0, 0);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcde", 5, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcde", 5, 1, "", 0, 0, 0);
-    test("abcde", 5, 1, "", 0, 1, 0);
-    test("abcde", 5, 1, "", 1, 0, 0);
-    test("abcde", 5, 1, "abcde", 0, 0, 0);
-    test("abcde", 5, 1, "abcde", 0, 1, -1);
-    test("abcde", 5, 1, "abcde", 0, 2, -2);
-    test("abcde", 5, 1, "abcde", 0, 4, -4);
-    test("abcde", 5, 1, "abcde", 0, 5, -5);
-    test("abcde", 5, 1, "abcde", 0, 6, -5);
-    test("abcde", 5, 1, "abcde", 1, 0, 0);
-    test("abcde", 5, 1, "abcde", 1, 1, -1);
-    test("abcde", 5, 1, "abcde", 1, 2, -2);
-    test("abcde", 5, 1, "abcde", 1, 3, -3);
-    test("abcde", 5, 1, "abcde", 1, 4, -4);
-    test("abcde", 5, 1, "abcde", 1, 5, -4);
-    test("abcde", 5, 1, "abcde", 2, 0, 0);
-    test("abcde", 5, 1, "abcde", 2, 1, -1);
-    test("abcde", 5, 1, "abcde", 2, 2, -2);
-    test("abcde", 5, 1, "abcde", 2, 3, -3);
-    test("abcde", 5, 1, "abcde", 2, 4, -3);
-    test("abcde", 5, 1, "abcde", 4, 0, 0);
-    test("abcde", 5, 1, "abcde", 4, 1, -1);
-    test("abcde", 5, 1, "abcde", 4, 2, -1);
-    test("abcde", 5, 1, "abcde", 5, 0, 0);
+void test17() {
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcde", 4, 2, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcde", 5, 0, "", 0, 0, 0);
+  test("abcde", 5, 0, "", 0, 1, 0);
+  test("abcde", 5, 0, "", 1, 0, 0);
+  test("abcde", 5, 0, "abcde", 0, 0, 0);
+  test("abcde", 5, 0, "abcde", 0, 1, -1);
+  test("abcde", 5, 0, "abcde", 0, 2, -2);
+  test("abcde", 5, 0, "abcde", 0, 4, -4);
+  test("abcde", 5, 0, "abcde", 0, 5, -5);
+  test("abcde", 5, 0, "abcde", 0, 6, -5);
+  test("abcde", 5, 0, "abcde", 1, 0, 0);
+  test("abcde", 5, 0, "abcde", 1, 1, -1);
+  test("abcde", 5, 0, "abcde", 1, 2, -2);
+  test("abcde", 5, 0, "abcde", 1, 3, -3);
+  test("abcde", 5, 0, "abcde", 1, 4, -4);
+  test("abcde", 5, 0, "abcde", 1, 5, -4);
+  test("abcde", 5, 0, "abcde", 2, 0, 0);
+  test("abcde", 5, 0, "abcde", 2, 1, -1);
+  test("abcde", 5, 0, "abcde", 2, 2, -2);
+  test("abcde", 5, 0, "abcde", 2, 3, -3);
+  test("abcde", 5, 0, "abcde", 2, 4, -3);
+  test("abcde", 5, 0, "abcde", 4, 0, 0);
+  test("abcde", 5, 0, "abcde", 4, 1, -1);
+  test("abcde", 5, 0, "abcde", 4, 2, -1);
+  test("abcde", 5, 0, "abcde", 5, 0, 0);
+  test("abcde", 5, 0, "abcde", 5, 1, 0);
+  test("abcde", 5, 0, "abcde", 6, 0, 0);
+  test("abcde", 5, 0, "abcdefghij", 0, 0, 0);
+  test("abcde", 5, 0, "abcdefghij", 0, 1, -1);
+  test("abcde", 5, 0, "abcdefghij", 0, 5, -5);
+  test("abcde", 5, 0, "abcdefghij", 0, 9, -9);
+  test("abcde", 5, 0, "abcdefghij", 0, 10, -10);
+  test("abcde", 5, 0, "abcdefghij", 0, 11, -10);
+  test("abcde", 5, 0, "abcdefghij", 1, 0, 0);
+  test("abcde", 5, 0, "abcdefghij", 1, 1, -1);
+  test("abcde", 5, 0, "abcdefghij", 1, 4, -4);
+  test("abcde", 5, 0, "abcdefghij", 1, 8, -8);
+  test("abcde", 5, 0, "abcdefghij", 1, 9, -9);
+  test("abcde", 5, 0, "abcdefghij", 1, 10, -9);
+  test("abcde", 5, 0, "abcdefghij", 5, 0, 0);
+  test("abcde", 5, 0, "abcdefghij", 5, 1, -1);
+  test("abcde", 5, 0, "abcdefghij", 5, 2, -2);
+  test("abcde", 5, 0, "abcdefghij", 5, 4, -4);
+  test("abcde", 5, 0, "abcdefghij", 5, 5, -5);
+  test("abcde", 5, 0, "abcdefghij", 5, 6, -5);
+  test("abcde", 5, 0, "abcdefghij", 9, 0, 0);
+  test("abcde", 5, 0, "abcdefghij", 9, 1, -1);
+  test("abcde", 5, 0, "abcdefghij", 9, 2, -1);
+  test("abcde", 5, 0, "abcdefghij", 10, 0, 0);
+  test("abcde", 5, 0, "abcdefghij", 10, 1, 0);
+  test("abcde", 5, 0, "abcdefghij", 11, 0, 0);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcde", 5, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcde", 5, 1, "", 0, 0, 0);
+  test("abcde", 5, 1, "", 0, 1, 0);
+  test("abcde", 5, 1, "", 1, 0, 0);
+  test("abcde", 5, 1, "abcde", 0, 0, 0);
+  test("abcde", 5, 1, "abcde", 0, 1, -1);
+  test("abcde", 5, 1, "abcde", 0, 2, -2);
+  test("abcde", 5, 1, "abcde", 0, 4, -4);
+  test("abcde", 5, 1, "abcde", 0, 5, -5);
+  test("abcde", 5, 1, "abcde", 0, 6, -5);
+  test("abcde", 5, 1, "abcde", 1, 0, 0);
+  test("abcde", 5, 1, "abcde", 1, 1, -1);
+  test("abcde", 5, 1, "abcde", 1, 2, -2);
+  test("abcde", 5, 1, "abcde", 1, 3, -3);
+  test("abcde", 5, 1, "abcde", 1, 4, -4);
+  test("abcde", 5, 1, "abcde", 1, 5, -4);
+  test("abcde", 5, 1, "abcde", 2, 0, 0);
+  test("abcde", 5, 1, "abcde", 2, 1, -1);
+  test("abcde", 5, 1, "abcde", 2, 2, -2);
+  test("abcde", 5, 1, "abcde", 2, 3, -3);
+  test("abcde", 5, 1, "abcde", 2, 4, -3);
+  test("abcde", 5, 1, "abcde", 4, 0, 0);
+  test("abcde", 5, 1, "abcde", 4, 1, -1);
+  test("abcde", 5, 1, "abcde", 4, 2, -1);
+  test("abcde", 5, 1, "abcde", 5, 0, 0);
 }
 
-void test18()
-{
-    test("abcde", 5, 1, "abcde", 5, 1, 0);
-    test("abcde", 5, 1, "abcde", 6, 0, 0);
-    test("abcde", 5, 1, "abcdefghij", 0, 0, 0);
-    test("abcde", 5, 1, "abcdefghij", 0, 1, -1);
-    test("abcde", 5, 1, "abcdefghij", 0, 5, -5);
-    test("abcde", 5, 1, "abcdefghij", 0, 9, -9);
-    test("abcde", 5, 1, "abcdefghij", 0, 10, -10);
-    test("abcde", 5, 1, "abcdefghij", 0, 11, -10);
-    test("abcde", 5, 1, "abcdefghij", 1, 0, 0);
-    test("abcde", 5, 1, "abcdefghij", 1, 1, -1);
-    test("abcde", 5, 1, "abcdefghij", 1, 4, -4);
-    test("abcde", 5, 1, "abcdefghij", 1, 8, -8);
-    test("abcde", 5, 1, "abcdefghij", 1, 9, -9);
-    test("abcde", 5, 1, "abcdefghij", 1, 10, -9);
-    test("abcde", 5, 1, "abcdefghij", 5, 0, 0);
-    test("abcde", 5, 1, "abcdefghij", 5, 1, -1);
-    test("abcde", 5, 1, "abcdefghij", 5, 2, -2);
-    test("abcde", 5, 1, "abcdefghij", 5, 4, -4);
-    test("abcde", 5, 1, "abcdefghij", 5, 5, -5);
-    test("abcde", 5, 1, "abcdefghij", 5, 6, -5);
-    test("abcde", 5, 1, "abcdefghij", 9, 0, 0);
-    test("abcde", 5, 1, "abcdefghij", 9, 1, -1);
-    test("abcde", 5, 1, "abcdefghij", 9, 2, -1);
-    test("abcde", 5, 1, "abcdefghij", 10, 0, 0);
-    test("abcde", 5, 1, "abcdefghij", 10, 1, 0);
-    test("abcde", 5, 1, "abcdefghij", 11, 0, 0);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcde", 5, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcde", 6, 0, "", 0, 0, 0);
-    test("abcde", 6, 0, "", 0, 1, 0);
-    test("abcde", 6, 0, "", 1, 0, 0);
-    test("abcde", 6, 0, "abcde", 0, 0, 0);
-    test("abcde", 6, 0, "abcde", 0, 1, 0);
-    test("abcde", 6, 0, "abcde", 0, 2, 0);
-    test("abcde", 6, 0, "abcde", 0, 4, 0);
-    test("abcde", 6, 0, "abcde", 0, 5, 0);
-    test("abcde", 6, 0, "abcde", 0, 6, 0);
-    test("abcde", 6, 0, "abcde", 1, 0, 0);
-    test("abcde", 6, 0, "abcde", 1, 1, 0);
-    test("abcde", 6, 0, "abcde", 1, 2, 0);
-    test("abcde", 6, 0, "abcde", 1, 3, 0);
-    test("abcde", 6, 0, "abcde", 1, 4, 0);
-    test("abcde", 6, 0, "abcde", 1, 5, 0);
-    test("abcde", 6, 0, "abcde", 2, 0, 0);
-    test("abcde", 6, 0, "abcde", 2, 1, 0);
-    test("abcde", 6, 0, "abcde", 2, 2, 0);
-    test("abcde", 6, 0, "abcde", 2, 3, 0);
-    test("abcde", 6, 0, "abcde", 2, 4, 0);
-    test("abcde", 6, 0, "abcde", 4, 0, 0);
-    test("abcde", 6, 0, "abcde", 4, 1, 0);
-    test("abcde", 6, 0, "abcde", 4, 2, 0);
-    test("abcde", 6, 0, "abcde", 5, 0, 0);
-    test("abcde", 6, 0, "abcde", 5, 1, 0);
-    test("abcde", 6, 0, "abcde", 6, 0, 0);
-    test("abcde", 6, 0, "abcdefghij", 0, 0, 0);
-    test("abcde", 6, 0, "abcdefghij", 0, 1, 0);
-    test("abcde", 6, 0, "abcdefghij", 0, 5, 0);
-    test("abcde", 6, 0, "abcdefghij", 0, 9, 0);
-    test("abcde", 6, 0, "abcdefghij", 0, 10, 0);
-    test("abcde", 6, 0, "abcdefghij", 0, 11, 0);
-    test("abcde", 6, 0, "abcdefghij", 1, 0, 0);
-    test("abcde", 6, 0, "abcdefghij", 1, 1, 0);
-    test("abcde", 6, 0, "abcdefghij", 1, 4, 0);
-    test("abcde", 6, 0, "abcdefghij", 1, 8, 0);
-    test("abcde", 6, 0, "abcdefghij", 1, 9, 0);
-    test("abcde", 6, 0, "abcdefghij", 1, 10, 0);
-    test("abcde", 6, 0, "abcdefghij", 5, 0, 0);
-    test("abcde", 6, 0, "abcdefghij", 5, 1, 0);
-    test("abcde", 6, 0, "abcdefghij", 5, 2, 0);
-    test("abcde", 6, 0, "abcdefghij", 5, 4, 0);
-    test("abcde", 6, 0, "abcdefghij", 5, 5, 0);
-    test("abcde", 6, 0, "abcdefghij", 5, 6, 0);
-    test("abcde", 6, 0, "abcdefghij", 9, 0, 0);
-    test("abcde", 6, 0, "abcdefghij", 9, 1, 0);
-    test("abcde", 6, 0, "abcdefghij", 9, 2, 0);
-    test("abcde", 6, 0, "abcdefghij", 10, 0, 0);
-    test("abcde", 6, 0, "abcdefghij", 10, 1, 0);
-    test("abcde", 6, 0, "abcdefghij", 11, 0, 0);
+void test18() {
+  test("abcde", 5, 1, "abcde", 5, 1, 0);
+  test("abcde", 5, 1, "abcde", 6, 0, 0);
+  test("abcde", 5, 1, "abcdefghij", 0, 0, 0);
+  test("abcde", 5, 1, "abcdefghij", 0, 1, -1);
+  test("abcde", 5, 1, "abcdefghij", 0, 5, -5);
+  test("abcde", 5, 1, "abcdefghij", 0, 9, -9);
+  test("abcde", 5, 1, "abcdefghij", 0, 10, -10);
+  test("abcde", 5, 1, "abcdefghij", 0, 11, -10);
+  test("abcde", 5, 1, "abcdefghij", 1, 0, 0);
+  test("abcde", 5, 1, "abcdefghij", 1, 1, -1);
+  test("abcde", 5, 1, "abcdefghij", 1, 4, -4);
+  test("abcde", 5, 1, "abcdefghij", 1, 8, -8);
+  test("abcde", 5, 1, "abcdefghij", 1, 9, -9);
+  test("abcde", 5, 1, "abcdefghij", 1, 10, -9);
+  test("abcde", 5, 1, "abcdefghij", 5, 0, 0);
+  test("abcde", 5, 1, "abcdefghij", 5, 1, -1);
+  test("abcde", 5, 1, "abcdefghij", 5, 2, -2);
+  test("abcde", 5, 1, "abcdefghij", 5, 4, -4);
+  test("abcde", 5, 1, "abcdefghij", 5, 5, -5);
+  test("abcde", 5, 1, "abcdefghij", 5, 6, -5);
+  test("abcde", 5, 1, "abcdefghij", 9, 0, 0);
+  test("abcde", 5, 1, "abcdefghij", 9, 1, -1);
+  test("abcde", 5, 1, "abcdefghij", 9, 2, -1);
+  test("abcde", 5, 1, "abcdefghij", 10, 0, 0);
+  test("abcde", 5, 1, "abcdefghij", 10, 1, 0);
+  test("abcde", 5, 1, "abcdefghij", 11, 0, 0);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcde", 5, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcde", 6, 0, "", 0, 0, 0);
+  test("abcde", 6, 0, "", 0, 1, 0);
+  test("abcde", 6, 0, "", 1, 0, 0);
+  test("abcde", 6, 0, "abcde", 0, 0, 0);
+  test("abcde", 6, 0, "abcde", 0, 1, 0);
+  test("abcde", 6, 0, "abcde", 0, 2, 0);
+  test("abcde", 6, 0, "abcde", 0, 4, 0);
+  test("abcde", 6, 0, "abcde", 0, 5, 0);
+  test("abcde", 6, 0, "abcde", 0, 6, 0);
+  test("abcde", 6, 0, "abcde", 1, 0, 0);
+  test("abcde", 6, 0, "abcde", 1, 1, 0);
+  test("abcde", 6, 0, "abcde", 1, 2, 0);
+  test("abcde", 6, 0, "abcde", 1, 3, 0);
+  test("abcde", 6, 0, "abcde", 1, 4, 0);
+  test("abcde", 6, 0, "abcde", 1, 5, 0);
+  test("abcde", 6, 0, "abcde", 2, 0, 0);
+  test("abcde", 6, 0, "abcde", 2, 1, 0);
+  test("abcde", 6, 0, "abcde", 2, 2, 0);
+  test("abcde", 6, 0, "abcde", 2, 3, 0);
+  test("abcde", 6, 0, "abcde", 2, 4, 0);
+  test("abcde", 6, 0, "abcde", 4, 0, 0);
+  test("abcde", 6, 0, "abcde", 4, 1, 0);
+  test("abcde", 6, 0, "abcde", 4, 2, 0);
+  test("abcde", 6, 0, "abcde", 5, 0, 0);
+  test("abcde", 6, 0, "abcde", 5, 1, 0);
+  test("abcde", 6, 0, "abcde", 6, 0, 0);
+  test("abcde", 6, 0, "abcdefghij", 0, 0, 0);
+  test("abcde", 6, 0, "abcdefghij", 0, 1, 0);
+  test("abcde", 6, 0, "abcdefghij", 0, 5, 0);
+  test("abcde", 6, 0, "abcdefghij", 0, 9, 0);
+  test("abcde", 6, 0, "abcdefghij", 0, 10, 0);
+  test("abcde", 6, 0, "abcdefghij", 0, 11, 0);
+  test("abcde", 6, 0, "abcdefghij", 1, 0, 0);
+  test("abcde", 6, 0, "abcdefghij", 1, 1, 0);
+  test("abcde", 6, 0, "abcdefghij", 1, 4, 0);
+  test("abcde", 6, 0, "abcdefghij", 1, 8, 0);
+  test("abcde", 6, 0, "abcdefghij", 1, 9, 0);
+  test("abcde", 6, 0, "abcdefghij", 1, 10, 0);
+  test("abcde", 6, 0, "abcdefghij", 5, 0, 0);
+  test("abcde", 6, 0, "abcdefghij", 5, 1, 0);
+  test("abcde", 6, 0, "abcdefghij", 5, 2, 0);
+  test("abcde", 6, 0, "abcdefghij", 5, 4, 0);
+  test("abcde", 6, 0, "abcdefghij", 5, 5, 0);
+  test("abcde", 6, 0, "abcdefghij", 5, 6, 0);
+  test("abcde", 6, 0, "abcdefghij", 9, 0, 0);
+  test("abcde", 6, 0, "abcdefghij", 9, 1, 0);
+  test("abcde", 6, 0, "abcdefghij", 9, 2, 0);
+  test("abcde", 6, 0, "abcdefghij", 10, 0, 0);
+  test("abcde", 6, 0, "abcdefghij", 10, 1, 0);
+  test("abcde", 6, 0, "abcdefghij", 11, 0, 0);
 }
 
-void test19()
-{
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 1, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 10, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 19, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 20, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 21, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 1, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 9, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 18, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 19, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 20, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 1, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 5, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 9, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 10, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 11, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 1, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 2, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcde", 6, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 0, 0, "", 0, 0, 0);
-    test("abcdefghij", 0, 0, "", 0, 1, 0);
-    test("abcdefghij", 0, 0, "", 1, 0, 0);
-    test("abcdefghij", 0, 0, "abcde", 0, 0, 0);
-    test("abcdefghij", 0, 0, "abcde", 0, 1, -1);
-    test("abcdefghij", 0, 0, "abcde", 0, 2, -2);
-    test("abcdefghij", 0, 0, "abcde", 0, 4, -4);
-    test("abcdefghij", 0, 0, "abcde", 0, 5, -5);
-    test("abcdefghij", 0, 0, "abcde", 0, 6, -5);
-    test("abcdefghij", 0, 0, "abcde", 1, 0, 0);
-    test("abcdefghij", 0, 0, "abcde", 1, 1, -1);
-    test("abcdefghij", 0, 0, "abcde", 1, 2, -2);
-    test("abcdefghij", 0, 0, "abcde", 1, 3, -3);
-    test("abcdefghij", 0, 0, "abcde", 1, 4, -4);
-    test("abcdefghij", 0, 0, "abcde", 1, 5, -4);
-    test("abcdefghij", 0, 0, "abcde", 2, 0, 0);
-    test("abcdefghij", 0, 0, "abcde", 2, 1, -1);
-    test("abcdefghij", 0, 0, "abcde", 2, 2, -2);
-    test("abcdefghij", 0, 0, "abcde", 2, 3, -3);
-    test("abcdefghij", 0, 0, "abcde", 2, 4, -3);
-    test("abcdefghij", 0, 0, "abcde", 4, 0, 0);
-    test("abcdefghij", 0, 0, "abcde", 4, 1, -1);
-    test("abcdefghij", 0, 0, "abcde", 4, 2, -1);
-    test("abcdefghij", 0, 0, "abcde", 5, 0, 0);
-    test("abcdefghij", 0, 0, "abcde", 5, 1, 0);
-    test("abcdefghij", 0, 0, "abcde", 6, 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghij", 0, 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghij", 0, 1, -1);
-    test("abcdefghij", 0, 0, "abcdefghij", 0, 5, -5);
-    test("abcdefghij", 0, 0, "abcdefghij", 0, 9, -9);
-    test("abcdefghij", 0, 0, "abcdefghij", 0, 10, -10);
-    test("abcdefghij", 0, 0, "abcdefghij", 0, 11, -10);
-    test("abcdefghij", 0, 0, "abcdefghij", 1, 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghij", 1, 1, -1);
-    test("abcdefghij", 0, 0, "abcdefghij", 1, 4, -4);
-    test("abcdefghij", 0, 0, "abcdefghij", 1, 8, -8);
-    test("abcdefghij", 0, 0, "abcdefghij", 1, 9, -9);
-    test("abcdefghij", 0, 0, "abcdefghij", 1, 10, -9);
-    test("abcdefghij", 0, 0, "abcdefghij", 5, 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghij", 5, 1, -1);
-    test("abcdefghij", 0, 0, "abcdefghij", 5, 2, -2);
-    test("abcdefghij", 0, 0, "abcdefghij", 5, 4, -4);
-    test("abcdefghij", 0, 0, "abcdefghij", 5, 5, -5);
-    test("abcdefghij", 0, 0, "abcdefghij", 5, 6, -5);
-    test("abcdefghij", 0, 0, "abcdefghij", 9, 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghij", 9, 1, -1);
-    test("abcdefghij", 0, 0, "abcdefghij", 9, 2, -1);
-    test("abcdefghij", 0, 0, "abcdefghij", 10, 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghij", 10, 1, 0);
-    test("abcdefghij", 0, 0, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 0, 1, "", 0, 0, 1);
-    test("abcdefghij", 0, 1, "", 0, 1, 1);
+void test19() {
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 1, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 10, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 19, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 20, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 0, 21, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 1, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 9, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 18, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 19, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 1, 20, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 1, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 5, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 9, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 10, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 10, 11, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 1, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 19, 2, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcde", 6, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 0, 0, "", 0, 0, 0);
+  test("abcdefghij", 0, 0, "", 0, 1, 0);
+  test("abcdefghij", 0, 0, "", 1, 0, 0);
+  test("abcdefghij", 0, 0, "abcde", 0, 0, 0);
+  test("abcdefghij", 0, 0, "abcde", 0, 1, -1);
+  test("abcdefghij", 0, 0, "abcde", 0, 2, -2);
+  test("abcdefghij", 0, 0, "abcde", 0, 4, -4);
+  test("abcdefghij", 0, 0, "abcde", 0, 5, -5);
+  test("abcdefghij", 0, 0, "abcde", 0, 6, -5);
+  test("abcdefghij", 0, 0, "abcde", 1, 0, 0);
+  test("abcdefghij", 0, 0, "abcde", 1, 1, -1);
+  test("abcdefghij", 0, 0, "abcde", 1, 2, -2);
+  test("abcdefghij", 0, 0, "abcde", 1, 3, -3);
+  test("abcdefghij", 0, 0, "abcde", 1, 4, -4);
+  test("abcdefghij", 0, 0, "abcde", 1, 5, -4);
+  test("abcdefghij", 0, 0, "abcde", 2, 0, 0);
+  test("abcdefghij", 0, 0, "abcde", 2, 1, -1);
+  test("abcdefghij", 0, 0, "abcde", 2, 2, -2);
+  test("abcdefghij", 0, 0, "abcde", 2, 3, -3);
+  test("abcdefghij", 0, 0, "abcde", 2, 4, -3);
+  test("abcdefghij", 0, 0, "abcde", 4, 0, 0);
+  test("abcdefghij", 0, 0, "abcde", 4, 1, -1);
+  test("abcdefghij", 0, 0, "abcde", 4, 2, -1);
+  test("abcdefghij", 0, 0, "abcde", 5, 0, 0);
+  test("abcdefghij", 0, 0, "abcde", 5, 1, 0);
+  test("abcdefghij", 0, 0, "abcde", 6, 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghij", 0, 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghij", 0, 1, -1);
+  test("abcdefghij", 0, 0, "abcdefghij", 0, 5, -5);
+  test("abcdefghij", 0, 0, "abcdefghij", 0, 9, -9);
+  test("abcdefghij", 0, 0, "abcdefghij", 0, 10, -10);
+  test("abcdefghij", 0, 0, "abcdefghij", 0, 11, -10);
+  test("abcdefghij", 0, 0, "abcdefghij", 1, 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghij", 1, 1, -1);
+  test("abcdefghij", 0, 0, "abcdefghij", 1, 4, -4);
+  test("abcdefghij", 0, 0, "abcdefghij", 1, 8, -8);
+  test("abcdefghij", 0, 0, "abcdefghij", 1, 9, -9);
+  test("abcdefghij", 0, 0, "abcdefghij", 1, 10, -9);
+  test("abcdefghij", 0, 0, "abcdefghij", 5, 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghij", 5, 1, -1);
+  test("abcdefghij", 0, 0, "abcdefghij", 5, 2, -2);
+  test("abcdefghij", 0, 0, "abcdefghij", 5, 4, -4);
+  test("abcdefghij", 0, 0, "abcdefghij", 5, 5, -5);
+  test("abcdefghij", 0, 0, "abcdefghij", 5, 6, -5);
+  test("abcdefghij", 0, 0, "abcdefghij", 9, 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghij", 9, 1, -1);
+  test("abcdefghij", 0, 0, "abcdefghij", 9, 2, -1);
+  test("abcdefghij", 0, 0, "abcdefghij", 10, 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghij", 10, 1, 0);
+  test("abcdefghij", 0, 0, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 0, 1, "", 0, 0, 1);
+  test("abcdefghij", 0, 1, "", 0, 1, 1);
 }
 
-void test20()
-{
-    test("abcdefghij", 0, 1, "", 1, 0, 0);
-    test("abcdefghij", 0, 1, "abcde", 0, 0, 1);
-    test("abcdefghij", 0, 1, "abcde", 0, 1, 0);
-    test("abcdefghij", 0, 1, "abcde", 0, 2, -1);
-    test("abcdefghij", 0, 1, "abcde", 0, 4, -3);
-    test("abcdefghij", 0, 1, "abcde", 0, 5, -4);
-    test("abcdefghij", 0, 1, "abcde", 0, 6, -4);
-    test("abcdefghij", 0, 1, "abcde", 1, 0, 1);
-    test("abcdefghij", 0, 1, "abcde", 1, 1, -1);
-    test("abcdefghij", 0, 1, "abcde", 1, 2, -1);
-    test("abcdefghij", 0, 1, "abcde", 1, 3, -1);
-    test("abcdefghij", 0, 1, "abcde", 1, 4, -1);
-    test("abcdefghij", 0, 1, "abcde", 1, 5, -1);
-    test("abcdefghij", 0, 1, "abcde", 2, 0, 1);
-    test("abcdefghij", 0, 1, "abcde", 2, 1, -2);
-    test("abcdefghij", 0, 1, "abcde", 2, 2, -2);
-    test("abcdefghij", 0, 1, "abcde", 2, 3, -2);
-    test("abcdefghij", 0, 1, "abcde", 2, 4, -2);
-    test("abcdefghij", 0, 1, "abcde", 4, 0, 1);
-    test("abcdefghij", 0, 1, "abcde", 4, 1, -4);
-    test("abcdefghij", 0, 1, "abcde", 4, 2, -4);
-    test("abcdefghij", 0, 1, "abcde", 5, 0, 1);
-    test("abcdefghij", 0, 1, "abcde", 5, 1, 1);
-    test("abcdefghij", 0, 1, "abcde", 6, 0, 0);
-    test("abcdefghij", 0, 1, "abcdefghij", 0, 0, 1);
-    test("abcdefghij", 0, 1, "abcdefghij", 0, 1, 0);
-    test("abcdefghij", 0, 1, "abcdefghij", 0, 5, -4);
-    test("abcdefghij", 0, 1, "abcdefghij", 0, 9, -8);
-    test("abcdefghij", 0, 1, "abcdefghij", 0, 10, -9);
-    test("abcdefghij", 0, 1, "abcdefghij", 0, 11, -9);
-    test("abcdefghij", 0, 1, "abcdefghij", 1, 0, 1);
-    test("abcdefghij", 0, 1, "abcdefghij", 1, 1, -1);
-    test("abcdefghij", 0, 1, "abcdefghij", 1, 4, -1);
-    test("abcdefghij", 0, 1, "abcdefghij", 1, 8, -1);
-    test("abcdefghij", 0, 1, "abcdefghij", 1, 9, -1);
-    test("abcdefghij", 0, 1, "abcdefghij", 1, 10, -1);
-    test("abcdefghij", 0, 1, "abcdefghij", 5, 0, 1);
-    test("abcdefghij", 0, 1, "abcdefghij", 5, 1, -5);
-    test("abcdefghij", 0, 1, "abcdefghij", 5, 2, -5);
-    test("abcdefghij", 0, 1, "abcdefghij", 5, 4, -5);
-    test("abcdefghij", 0, 1, "abcdefghij", 5, 5, -5);
-    test("abcdefghij", 0, 1, "abcdefghij", 5, 6, -5);
-    test("abcdefghij", 0, 1, "abcdefghij", 9, 0, 1);
-    test("abcdefghij", 0, 1, "abcdefghij", 9, 1, -9);
-    test("abcdefghij", 0, 1, "abcdefghij", 9, 2, -9);
-    test("abcdefghij", 0, 1, "abcdefghij", 10, 0, 1);
-    test("abcdefghij", 0, 1, "abcdefghij", 10, 1, 1);
-    test("abcdefghij", 0, 1, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 0, 5, "", 0, 0, 5);
-    test("abcdefghij", 0, 5, "", 0, 1, 5);
-    test("abcdefghij", 0, 5, "", 1, 0, 0);
-    test("abcdefghij", 0, 5, "abcde", 0, 0, 5);
-    test("abcdefghij", 0, 5, "abcde", 0, 1, 4);
-    test("abcdefghij", 0, 5, "abcde", 0, 2, 3);
-    test("abcdefghij", 0, 5, "abcde", 0, 4, 1);
-    test("abcdefghij", 0, 5, "abcde", 0, 5, 0);
-    test("abcdefghij", 0, 5, "abcde", 0, 6, 0);
-    test("abcdefghij", 0, 5, "abcde", 1, 0, 5);
-    test("abcdefghij", 0, 5, "abcde", 1, 1, -1);
-    test("abcdefghij", 0, 5, "abcde", 1, 2, -1);
-    test("abcdefghij", 0, 5, "abcde", 1, 3, -1);
-    test("abcdefghij", 0, 5, "abcde", 1, 4, -1);
-    test("abcdefghij", 0, 5, "abcde", 1, 5, -1);
-    test("abcdefghij", 0, 5, "abcde", 2, 0, 5);
-    test("abcdefghij", 0, 5, "abcde", 2, 1, -2);
-    test("abcdefghij", 0, 5, "abcde", 2, 2, -2);
-    test("abcdefghij", 0, 5, "abcde", 2, 3, -2);
-    test("abcdefghij", 0, 5, "abcde", 2, 4, -2);
-    test("abcdefghij", 0, 5, "abcde", 4, 0, 5);
-    test("abcdefghij", 0, 5, "abcde", 4, 1, -4);
-    test("abcdefghij", 0, 5, "abcde", 4, 2, -4);
-    test("abcdefghij", 0, 5, "abcde", 5, 0, 5);
-    test("abcdefghij", 0, 5, "abcde", 5, 1, 5);
-    test("abcdefghij", 0, 5, "abcde", 6, 0, 0);
-    test("abcdefghij", 0, 5, "abcdefghij", 0, 0, 5);
-    test("abcdefghij", 0, 5, "abcdefghij", 0, 1, 4);
+void test20() {
+  test("abcdefghij", 0, 1, "", 1, 0, 0);
+  test("abcdefghij", 0, 1, "abcde", 0, 0, 1);
+  test("abcdefghij", 0, 1, "abcde", 0, 1, 0);
+  test("abcdefghij", 0, 1, "abcde", 0, 2, -1);
+  test("abcdefghij", 0, 1, "abcde", 0, 4, -3);
+  test("abcdefghij", 0, 1, "abcde", 0, 5, -4);
+  test("abcdefghij", 0, 1, "abcde", 0, 6, -4);
+  test("abcdefghij", 0, 1, "abcde", 1, 0, 1);
+  test("abcdefghij", 0, 1, "abcde", 1, 1, -1);
+  test("abcdefghij", 0, 1, "abcde", 1, 2, -1);
+  test("abcdefghij", 0, 1, "abcde", 1, 3, -1);
+  test("abcdefghij", 0, 1, "abcde", 1, 4, -1);
+  test("abcdefghij", 0, 1, "abcde", 1, 5, -1);
+  test("abcdefghij", 0, 1, "abcde", 2, 0, 1);
+  test("abcdefghij", 0, 1, "abcde", 2, 1, -2);
+  test("abcdefghij", 0, 1, "abcde", 2, 2, -2);
+  test("abcdefghij", 0, 1, "abcde", 2, 3, -2);
+  test("abcdefghij", 0, 1, "abcde", 2, 4, -2);
+  test("abcdefghij", 0, 1, "abcde", 4, 0, 1);
+  test("abcdefghij", 0, 1, "abcde", 4, 1, -4);
+  test("abcdefghij", 0, 1, "abcde", 4, 2, -4);
+  test("abcdefghij", 0, 1, "abcde", 5, 0, 1);
+  test("abcdefghij", 0, 1, "abcde", 5, 1, 1);
+  test("abcdefghij", 0, 1, "abcde", 6, 0, 0);
+  test("abcdefghij", 0, 1, "abcdefghij", 0, 0, 1);
+  test("abcdefghij", 0, 1, "abcdefghij", 0, 1, 0);
+  test("abcdefghij", 0, 1, "abcdefghij", 0, 5, -4);
+  test("abcdefghij", 0, 1, "abcdefghij", 0, 9, -8);
+  test("abcdefghij", 0, 1, "abcdefghij", 0, 10, -9);
+  test("abcdefghij", 0, 1, "abcdefghij", 0, 11, -9);
+  test("abcdefghij", 0, 1, "abcdefghij", 1, 0, 1);
+  test("abcdefghij", 0, 1, "abcdefghij", 1, 1, -1);
+  test("abcdefghij", 0, 1, "abcdefghij", 1, 4, -1);
+  test("abcdefghij", 0, 1, "abcdefghij", 1, 8, -1);
+  test("abcdefghij", 0, 1, "abcdefghij", 1, 9, -1);
+  test("abcdefghij", 0, 1, "abcdefghij", 1, 10, -1);
+  test("abcdefghij", 0, 1, "abcdefghij", 5, 0, 1);
+  test("abcdefghij", 0, 1, "abcdefghij", 5, 1, -5);
+  test("abcdefghij", 0, 1, "abcdefghij", 5, 2, -5);
+  test("abcdefghij", 0, 1, "abcdefghij", 5, 4, -5);
+  test("abcdefghij", 0, 1, "abcdefghij", 5, 5, -5);
+  test("abcdefghij", 0, 1, "abcdefghij", 5, 6, -5);
+  test("abcdefghij", 0, 1, "abcdefghij", 9, 0, 1);
+  test("abcdefghij", 0, 1, "abcdefghij", 9, 1, -9);
+  test("abcdefghij", 0, 1, "abcdefghij", 9, 2, -9);
+  test("abcdefghij", 0, 1, "abcdefghij", 10, 0, 1);
+  test("abcdefghij", 0, 1, "abcdefghij", 10, 1, 1);
+  test("abcdefghij", 0, 1, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 0, 5, "", 0, 0, 5);
+  test("abcdefghij", 0, 5, "", 0, 1, 5);
+  test("abcdefghij", 0, 5, "", 1, 0, 0);
+  test("abcdefghij", 0, 5, "abcde", 0, 0, 5);
+  test("abcdefghij", 0, 5, "abcde", 0, 1, 4);
+  test("abcdefghij", 0, 5, "abcde", 0, 2, 3);
+  test("abcdefghij", 0, 5, "abcde", 0, 4, 1);
+  test("abcdefghij", 0, 5, "abcde", 0, 5, 0);
+  test("abcdefghij", 0, 5, "abcde", 0, 6, 0);
+  test("abcdefghij", 0, 5, "abcde", 1, 0, 5);
+  test("abcdefghij", 0, 5, "abcde", 1, 1, -1);
+  test("abcdefghij", 0, 5, "abcde", 1, 2, -1);
+  test("abcdefghij", 0, 5, "abcde", 1, 3, -1);
+  test("abcdefghij", 0, 5, "abcde", 1, 4, -1);
+  test("abcdefghij", 0, 5, "abcde", 1, 5, -1);
+  test("abcdefghij", 0, 5, "abcde", 2, 0, 5);
+  test("abcdefghij", 0, 5, "abcde", 2, 1, -2);
+  test("abcdefghij", 0, 5, "abcde", 2, 2, -2);
+  test("abcdefghij", 0, 5, "abcde", 2, 3, -2);
+  test("abcdefghij", 0, 5, "abcde", 2, 4, -2);
+  test("abcdefghij", 0, 5, "abcde", 4, 0, 5);
+  test("abcdefghij", 0, 5, "abcde", 4, 1, -4);
+  test("abcdefghij", 0, 5, "abcde", 4, 2, -4);
+  test("abcdefghij", 0, 5, "abcde", 5, 0, 5);
+  test("abcdefghij", 0, 5, "abcde", 5, 1, 5);
+  test("abcdefghij", 0, 5, "abcde", 6, 0, 0);
+  test("abcdefghij", 0, 5, "abcdefghij", 0, 0, 5);
+  test("abcdefghij", 0, 5, "abcdefghij", 0, 1, 4);
 }
 
-void test21()
-{
-    test("abcdefghij", 0, 5, "abcdefghij", 0, 5, 0);
-    test("abcdefghij", 0, 5, "abcdefghij", 0, 9, -4);
-    test("abcdefghij", 0, 5, "abcdefghij", 0, 10, -5);
-    test("abcdefghij", 0, 5, "abcdefghij", 0, 11, -5);
-    test("abcdefghij", 0, 5, "abcdefghij", 1, 0, 5);
-    test("abcdefghij", 0, 5, "abcdefghij", 1, 1, -1);
-    test("abcdefghij", 0, 5, "abcdefghij", 1, 4, -1);
-    test("abcdefghij", 0, 5, "abcdefghij", 1, 8, -1);
-    test("abcdefghij", 0, 5, "abcdefghij", 1, 9, -1);
-    test("abcdefghij", 0, 5, "abcdefghij", 1, 10, -1);
-    test("abcdefghij", 0, 5, "abcdefghij", 5, 0, 5);
-    test("abcdefghij", 0, 5, "abcdefghij", 5, 1, -5);
-    test("abcdefghij", 0, 5, "abcdefghij", 5, 2, -5);
-    test("abcdefghij", 0, 5, "abcdefghij", 5, 4, -5);
-    test("abcdefghij", 0, 5, "abcdefghij", 5, 5, -5);
-    test("abcdefghij", 0, 5, "abcdefghij", 5, 6, -5);
-    test("abcdefghij", 0, 5, "abcdefghij", 9, 0, 5);
-    test("abcdefghij", 0, 5, "abcdefghij", 9, 1, -9);
-    test("abcdefghij", 0, 5, "abcdefghij", 9, 2, -9);
-    test("abcdefghij", 0, 5, "abcdefghij", 10, 0, 5);
-    test("abcdefghij", 0, 5, "abcdefghij", 10, 1, 5);
-    test("abcdefghij", 0, 5, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 0, 5);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 1, 4);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 10, -5);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 19, -14);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 20, -15);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 21, -15);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 0, 5);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 9, -1);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 18, -1);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 19, -1);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 20, -1);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 0, 5);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 1, -10);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 5, -10);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 9, -10);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 0, 5);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 1, -19);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 2, -19);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, 0, 5);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, 1, 5);
-    test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 0, 9, "", 0, 0, 9);
-    test("abcdefghij", 0, 9, "", 0, 1, 9);
-    test("abcdefghij", 0, 9, "", 1, 0, 0);
-    test("abcdefghij", 0, 9, "abcde", 0, 0, 9);
-    test("abcdefghij", 0, 9, "abcde", 0, 1, 8);
-    test("abcdefghij", 0, 9, "abcde", 0, 2, 7);
-    test("abcdefghij", 0, 9, "abcde", 0, 4, 5);
-    test("abcdefghij", 0, 9, "abcde", 0, 5, 4);
-    test("abcdefghij", 0, 9, "abcde", 0, 6, 4);
-    test("abcdefghij", 0, 9, "abcde", 1, 0, 9);
-    test("abcdefghij", 0, 9, "abcde", 1, 1, -1);
-    test("abcdefghij", 0, 9, "abcde", 1, 2, -1);
-    test("abcdefghij", 0, 9, "abcde", 1, 3, -1);
-    test("abcdefghij", 0, 9, "abcde", 1, 4, -1);
-    test("abcdefghij", 0, 9, "abcde", 1, 5, -1);
-    test("abcdefghij", 0, 9, "abcde", 2, 0, 9);
-    test("abcdefghij", 0, 9, "abcde", 2, 1, -2);
-    test("abcdefghij", 0, 9, "abcde", 2, 2, -2);
-    test("abcdefghij", 0, 9, "abcde", 2, 3, -2);
-    test("abcdefghij", 0, 9, "abcde", 2, 4, -2);
-    test("abcdefghij", 0, 9, "abcde", 4, 0, 9);
-    test("abcdefghij", 0, 9, "abcde", 4, 1, -4);
-    test("abcdefghij", 0, 9, "abcde", 4, 2, -4);
-    test("abcdefghij", 0, 9, "abcde", 5, 0, 9);
-    test("abcdefghij", 0, 9, "abcde", 5, 1, 9);
-    test("abcdefghij", 0, 9, "abcde", 6, 0, 0);
-    test("abcdefghij", 0, 9, "abcdefghij", 0, 0, 9);
-    test("abcdefghij", 0, 9, "abcdefghij", 0, 1, 8);
-    test("abcdefghij", 0, 9, "abcdefghij", 0, 5, 4);
-    test("abcdefghij", 0, 9, "abcdefghij", 0, 9, 0);
-    test("abcdefghij", 0, 9, "abcdefghij", 0, 10, -1);
-    test("abcdefghij", 0, 9, "abcdefghij", 0, 11, -1);
-    test("abcdefghij", 0, 9, "abcdefghij", 1, 0, 9);
-    test("abcdefghij", 0, 9, "abcdefghij", 1, 1, -1);
-    test("abcdefghij", 0, 9, "abcdefghij", 1, 4, -1);
-    test("abcdefghij", 0, 9, "abcdefghij", 1, 8, -1);
-    test("abcdefghij", 0, 9, "abcdefghij", 1, 9, -1);
-    test("abcdefghij", 0, 9, "abcdefghij", 1, 10, -1);
-    test("abcdefghij", 0, 9, "abcdefghij", 5, 0, 9);
-    test("abcdefghij", 0, 9, "abcdefghij", 5, 1, -5);
-    test("abcdefghij", 0, 9, "abcdefghij", 5, 2, -5);
-    test("abcdefghij", 0, 9, "abcdefghij", 5, 4, -5);
-    test("abcdefghij", 0, 9, "abcdefghij", 5, 5, -5);
-    test("abcdefghij", 0, 9, "abcdefghij", 5, 6, -5);
-    test("abcdefghij", 0, 9, "abcdefghij", 9, 0, 9);
-    test("abcdefghij", 0, 9, "abcdefghij", 9, 1, -9);
-    test("abcdefghij", 0, 9, "abcdefghij", 9, 2, -9);
-    test("abcdefghij", 0, 9, "abcdefghij", 10, 0, 9);
-    test("abcdefghij", 0, 9, "abcdefghij", 10, 1, 9);
-    test("abcdefghij", 0, 9, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 0, 9);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 1, 8);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 10, -1);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 19, -10);
+void test21() {
+  test("abcdefghij", 0, 5, "abcdefghij", 0, 5, 0);
+  test("abcdefghij", 0, 5, "abcdefghij", 0, 9, -4);
+  test("abcdefghij", 0, 5, "abcdefghij", 0, 10, -5);
+  test("abcdefghij", 0, 5, "abcdefghij", 0, 11, -5);
+  test("abcdefghij", 0, 5, "abcdefghij", 1, 0, 5);
+  test("abcdefghij", 0, 5, "abcdefghij", 1, 1, -1);
+  test("abcdefghij", 0, 5, "abcdefghij", 1, 4, -1);
+  test("abcdefghij", 0, 5, "abcdefghij", 1, 8, -1);
+  test("abcdefghij", 0, 5, "abcdefghij", 1, 9, -1);
+  test("abcdefghij", 0, 5, "abcdefghij", 1, 10, -1);
+  test("abcdefghij", 0, 5, "abcdefghij", 5, 0, 5);
+  test("abcdefghij", 0, 5, "abcdefghij", 5, 1, -5);
+  test("abcdefghij", 0, 5, "abcdefghij", 5, 2, -5);
+  test("abcdefghij", 0, 5, "abcdefghij", 5, 4, -5);
+  test("abcdefghij", 0, 5, "abcdefghij", 5, 5, -5);
+  test("abcdefghij", 0, 5, "abcdefghij", 5, 6, -5);
+  test("abcdefghij", 0, 5, "abcdefghij", 9, 0, 5);
+  test("abcdefghij", 0, 5, "abcdefghij", 9, 1, -9);
+  test("abcdefghij", 0, 5, "abcdefghij", 9, 2, -9);
+  test("abcdefghij", 0, 5, "abcdefghij", 10, 0, 5);
+  test("abcdefghij", 0, 5, "abcdefghij", 10, 1, 5);
+  test("abcdefghij", 0, 5, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 0, 5);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 1, 4);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 10, -5);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 19, -14);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 20, -15);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 0, 21, -15);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 0, 5);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 9, -1);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 18, -1);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 19, -1);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 1, 20, -1);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 0, 5);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 1, -10);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 5, -10);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 9, -10);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 0, 5);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 1, -19);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 19, 2, -19);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, 0, 5);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 20, 1, 5);
+  test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 0, 9, "", 0, 0, 9);
+  test("abcdefghij", 0, 9, "", 0, 1, 9);
+  test("abcdefghij", 0, 9, "", 1, 0, 0);
+  test("abcdefghij", 0, 9, "abcde", 0, 0, 9);
+  test("abcdefghij", 0, 9, "abcde", 0, 1, 8);
+  test("abcdefghij", 0, 9, "abcde", 0, 2, 7);
+  test("abcdefghij", 0, 9, "abcde", 0, 4, 5);
+  test("abcdefghij", 0, 9, "abcde", 0, 5, 4);
+  test("abcdefghij", 0, 9, "abcde", 0, 6, 4);
+  test("abcdefghij", 0, 9, "abcde", 1, 0, 9);
+  test("abcdefghij", 0, 9, "abcde", 1, 1, -1);
+  test("abcdefghij", 0, 9, "abcde", 1, 2, -1);
+  test("abcdefghij", 0, 9, "abcde", 1, 3, -1);
+  test("abcdefghij", 0, 9, "abcde", 1, 4, -1);
+  test("abcdefghij", 0, 9, "abcde", 1, 5, -1);
+  test("abcdefghij", 0, 9, "abcde", 2, 0, 9);
+  test("abcdefghij", 0, 9, "abcde", 2, 1, -2);
+  test("abcdefghij", 0, 9, "abcde", 2, 2, -2);
+  test("abcdefghij", 0, 9, "abcde", 2, 3, -2);
+  test("abcdefghij", 0, 9, "abcde", 2, 4, -2);
+  test("abcdefghij", 0, 9, "abcde", 4, 0, 9);
+  test("abcdefghij", 0, 9, "abcde", 4, 1, -4);
+  test("abcdefghij", 0, 9, "abcde", 4, 2, -4);
+  test("abcdefghij", 0, 9, "abcde", 5, 0, 9);
+  test("abcdefghij", 0, 9, "abcde", 5, 1, 9);
+  test("abcdefghij", 0, 9, "abcde", 6, 0, 0);
+  test("abcdefghij", 0, 9, "abcdefghij", 0, 0, 9);
+  test("abcdefghij", 0, 9, "abcdefghij", 0, 1, 8);
+  test("abcdefghij", 0, 9, "abcdefghij", 0, 5, 4);
+  test("abcdefghij", 0, 9, "abcdefghij", 0, 9, 0);
+  test("abcdefghij", 0, 9, "abcdefghij", 0, 10, -1);
+  test("abcdefghij", 0, 9, "abcdefghij", 0, 11, -1);
+  test("abcdefghij", 0, 9, "abcdefghij", 1, 0, 9);
+  test("abcdefghij", 0, 9, "abcdefghij", 1, 1, -1);
+  test("abcdefghij", 0, 9, "abcdefghij", 1, 4, -1);
+  test("abcdefghij", 0, 9, "abcdefghij", 1, 8, -1);
+  test("abcdefghij", 0, 9, "abcdefghij", 1, 9, -1);
+  test("abcdefghij", 0, 9, "abcdefghij", 1, 10, -1);
+  test("abcdefghij", 0, 9, "abcdefghij", 5, 0, 9);
+  test("abcdefghij", 0, 9, "abcdefghij", 5, 1, -5);
+  test("abcdefghij", 0, 9, "abcdefghij", 5, 2, -5);
+  test("abcdefghij", 0, 9, "abcdefghij", 5, 4, -5);
+  test("abcdefghij", 0, 9, "abcdefghij", 5, 5, -5);
+  test("abcdefghij", 0, 9, "abcdefghij", 5, 6, -5);
+  test("abcdefghij", 0, 9, "abcdefghij", 9, 0, 9);
+  test("abcdefghij", 0, 9, "abcdefghij", 9, 1, -9);
+  test("abcdefghij", 0, 9, "abcdefghij", 9, 2, -9);
+  test("abcdefghij", 0, 9, "abcdefghij", 10, 0, 9);
+  test("abcdefghij", 0, 9, "abcdefghij", 10, 1, 9);
+  test("abcdefghij", 0, 9, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 0, 9);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 1, 8);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 10, -1);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 19, -10);
 }
 
-void test22()
-{
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 20, -11);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 21, -11);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 0, 9);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 9, -1);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 18, -1);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 19, -1);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 20, -1);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 0, 9);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 1, -10);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 5, -10);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 9, -10);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 0, 9);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 1, -19);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 2, -19);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, 0, 9);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, 1, 9);
-    test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 0, 10, "", 0, 0, 10);
-    test("abcdefghij", 0, 10, "", 0, 1, 10);
-    test("abcdefghij", 0, 10, "", 1, 0, 0);
-    test("abcdefghij", 0, 10, "abcde", 0, 0, 10);
-    test("abcdefghij", 0, 10, "abcde", 0, 1, 9);
-    test("abcdefghij", 0, 10, "abcde", 0, 2, 8);
-    test("abcdefghij", 0, 10, "abcde", 0, 4, 6);
-    test("abcdefghij", 0, 10, "abcde", 0, 5, 5);
-    test("abcdefghij", 0, 10, "abcde", 0, 6, 5);
-    test("abcdefghij", 0, 10, "abcde", 1, 0, 10);
-    test("abcdefghij", 0, 10, "abcde", 1, 1, -1);
-    test("abcdefghij", 0, 10, "abcde", 1, 2, -1);
-    test("abcdefghij", 0, 10, "abcde", 1, 3, -1);
-    test("abcdefghij", 0, 10, "abcde", 1, 4, -1);
-    test("abcdefghij", 0, 10, "abcde", 1, 5, -1);
-    test("abcdefghij", 0, 10, "abcde", 2, 0, 10);
-    test("abcdefghij", 0, 10, "abcde", 2, 1, -2);
-    test("abcdefghij", 0, 10, "abcde", 2, 2, -2);
-    test("abcdefghij", 0, 10, "abcde", 2, 3, -2);
-    test("abcdefghij", 0, 10, "abcde", 2, 4, -2);
-    test("abcdefghij", 0, 10, "abcde", 4, 0, 10);
-    test("abcdefghij", 0, 10, "abcde", 4, 1, -4);
-    test("abcdefghij", 0, 10, "abcde", 4, 2, -4);
-    test("abcdefghij", 0, 10, "abcde", 5, 0, 10);
-    test("abcdefghij", 0, 10, "abcde", 5, 1, 10);
-    test("abcdefghij", 0, 10, "abcde", 6, 0, 0);
-    test("abcdefghij", 0, 10, "abcdefghij", 0, 0, 10);
-    test("abcdefghij", 0, 10, "abcdefghij", 0, 1, 9);
-    test("abcdefghij", 0, 10, "abcdefghij", 0, 5, 5);
-    test("abcdefghij", 0, 10, "abcdefghij", 0, 9, 1);
-    test("abcdefghij", 0, 10, "abcdefghij", 0, 10, 0);
-    test("abcdefghij", 0, 10, "abcdefghij", 0, 11, 0);
-    test("abcdefghij", 0, 10, "abcdefghij", 1, 0, 10);
-    test("abcdefghij", 0, 10, "abcdefghij", 1, 1, -1);
-    test("abcdefghij", 0, 10, "abcdefghij", 1, 4, -1);
-    test("abcdefghij", 0, 10, "abcdefghij", 1, 8, -1);
-    test("abcdefghij", 0, 10, "abcdefghij", 1, 9, -1);
-    test("abcdefghij", 0, 10, "abcdefghij", 1, 10, -1);
-    test("abcdefghij", 0, 10, "abcdefghij", 5, 0, 10);
-    test("abcdefghij", 0, 10, "abcdefghij", 5, 1, -5);
-    test("abcdefghij", 0, 10, "abcdefghij", 5, 2, -5);
-    test("abcdefghij", 0, 10, "abcdefghij", 5, 4, -5);
-    test("abcdefghij", 0, 10, "abcdefghij", 5, 5, -5);
-    test("abcdefghij", 0, 10, "abcdefghij", 5, 6, -5);
-    test("abcdefghij", 0, 10, "abcdefghij", 9, 0, 10);
-    test("abcdefghij", 0, 10, "abcdefghij", 9, 1, -9);
-    test("abcdefghij", 0, 10, "abcdefghij", 9, 2, -9);
-    test("abcdefghij", 0, 10, "abcdefghij", 10, 0, 10);
-    test("abcdefghij", 0, 10, "abcdefghij", 10, 1, 10);
-    test("abcdefghij", 0, 10, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 0, 10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 1, 9);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 10, 0);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 19, -9);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 20, -10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 21, -10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 0, 10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 9, -1);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 18, -1);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 19, -1);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 20, -1);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 0, 10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 1, -10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 5, -10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 9, -10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 0, 10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 1, -19);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 2, -19);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, 0, 10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, 1, 10);
-    test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 0, 11, "", 0, 0, 10);
-    test("abcdefghij", 0, 11, "", 0, 1, 10);
-    test("abcdefghij", 0, 11, "", 1, 0, 0);
-    test("abcdefghij", 0, 11, "abcde", 0, 0, 10);
-    test("abcdefghij", 0, 11, "abcde", 0, 1, 9);
-    test("abcdefghij", 0, 11, "abcde", 0, 2, 8);
+void test22() {
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 20, -11);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 0, 21, -11);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 0, 9);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 9, -1);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 18, -1);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 19, -1);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 1, 20, -1);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 0, 9);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 1, -10);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 5, -10);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 9, -10);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 0, 9);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 1, -19);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 19, 2, -19);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, 0, 9);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 20, 1, 9);
+  test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 0, 10, "", 0, 0, 10);
+  test("abcdefghij", 0, 10, "", 0, 1, 10);
+  test("abcdefghij", 0, 10, "", 1, 0, 0);
+  test("abcdefghij", 0, 10, "abcde", 0, 0, 10);
+  test("abcdefghij", 0, 10, "abcde", 0, 1, 9);
+  test("abcdefghij", 0, 10, "abcde", 0, 2, 8);
+  test("abcdefghij", 0, 10, "abcde", 0, 4, 6);
+  test("abcdefghij", 0, 10, "abcde", 0, 5, 5);
+  test("abcdefghij", 0, 10, "abcde", 0, 6, 5);
+  test("abcdefghij", 0, 10, "abcde", 1, 0, 10);
+  test("abcdefghij", 0, 10, "abcde", 1, 1, -1);
+  test("abcdefghij", 0, 10, "abcde", 1, 2, -1);
+  test("abcdefghij", 0, 10, "abcde", 1, 3, -1);
+  test("abcdefghij", 0, 10, "abcde", 1, 4, -1);
+  test("abcdefghij", 0, 10, "abcde", 1, 5, -1);
+  test("abcdefghij", 0, 10, "abcde", 2, 0, 10);
+  test("abcdefghij", 0, 10, "abcde", 2, 1, -2);
+  test("abcdefghij", 0, 10, "abcde", 2, 2, -2);
+  test("abcdefghij", 0, 10, "abcde", 2, 3, -2);
+  test("abcdefghij", 0, 10, "abcde", 2, 4, -2);
+  test("abcdefghij", 0, 10, "abcde", 4, 0, 10);
+  test("abcdefghij", 0, 10, "abcde", 4, 1, -4);
+  test("abcdefghij", 0, 10, "abcde", 4, 2, -4);
+  test("abcdefghij", 0, 10, "abcde", 5, 0, 10);
+  test("abcdefghij", 0, 10, "abcde", 5, 1, 10);
+  test("abcdefghij", 0, 10, "abcde", 6, 0, 0);
+  test("abcdefghij", 0, 10, "abcdefghij", 0, 0, 10);
+  test("abcdefghij", 0, 10, "abcdefghij", 0, 1, 9);
+  test("abcdefghij", 0, 10, "abcdefghij", 0, 5, 5);
+  test("abcdefghij", 0, 10, "abcdefghij", 0, 9, 1);
+  test("abcdefghij", 0, 10, "abcdefghij", 0, 10, 0);
+  test("abcdefghij", 0, 10, "abcdefghij", 0, 11, 0);
+  test("abcdefghij", 0, 10, "abcdefghij", 1, 0, 10);
+  test("abcdefghij", 0, 10, "abcdefghij", 1, 1, -1);
+  test("abcdefghij", 0, 10, "abcdefghij", 1, 4, -1);
+  test("abcdefghij", 0, 10, "abcdefghij", 1, 8, -1);
+  test("abcdefghij", 0, 10, "abcdefghij", 1, 9, -1);
+  test("abcdefghij", 0, 10, "abcdefghij", 1, 10, -1);
+  test("abcdefghij", 0, 10, "abcdefghij", 5, 0, 10);
+  test("abcdefghij", 0, 10, "abcdefghij", 5, 1, -5);
+  test("abcdefghij", 0, 10, "abcdefghij", 5, 2, -5);
+  test("abcdefghij", 0, 10, "abcdefghij", 5, 4, -5);
+  test("abcdefghij", 0, 10, "abcdefghij", 5, 5, -5);
+  test("abcdefghij", 0, 10, "abcdefghij", 5, 6, -5);
+  test("abcdefghij", 0, 10, "abcdefghij", 9, 0, 10);
+  test("abcdefghij", 0, 10, "abcdefghij", 9, 1, -9);
+  test("abcdefghij", 0, 10, "abcdefghij", 9, 2, -9);
+  test("abcdefghij", 0, 10, "abcdefghij", 10, 0, 10);
+  test("abcdefghij", 0, 10, "abcdefghij", 10, 1, 10);
+  test("abcdefghij", 0, 10, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 0, 10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 1, 9);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 10, 0);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 19, -9);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 20, -10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 0, 21, -10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 0, 10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 9, -1);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 18, -1);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 19, -1);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 1, 20, -1);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 0, 10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 1, -10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 5, -10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 9, -10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 0, 10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 1, -19);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 19, 2, -19);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, 0, 10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 20, 1, 10);
+  test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 0, 11, "", 0, 0, 10);
+  test("abcdefghij", 0, 11, "", 0, 1, 10);
+  test("abcdefghij", 0, 11, "", 1, 0, 0);
+  test("abcdefghij", 0, 11, "abcde", 0, 0, 10);
+  test("abcdefghij", 0, 11, "abcde", 0, 1, 9);
+  test("abcdefghij", 0, 11, "abcde", 0, 2, 8);
 }
 
-void test23()
-{
-    test("abcdefghij", 0, 11, "abcde", 0, 4, 6);
-    test("abcdefghij", 0, 11, "abcde", 0, 5, 5);
-    test("abcdefghij", 0, 11, "abcde", 0, 6, 5);
-    test("abcdefghij", 0, 11, "abcde", 1, 0, 10);
-    test("abcdefghij", 0, 11, "abcde", 1, 1, -1);
-    test("abcdefghij", 0, 11, "abcde", 1, 2, -1);
-    test("abcdefghij", 0, 11, "abcde", 1, 3, -1);
-    test("abcdefghij", 0, 11, "abcde", 1, 4, -1);
-    test("abcdefghij", 0, 11, "abcde", 1, 5, -1);
-    test("abcdefghij", 0, 11, "abcde", 2, 0, 10);
-    test("abcdefghij", 0, 11, "abcde", 2, 1, -2);
-    test("abcdefghij", 0, 11, "abcde", 2, 2, -2);
-    test("abcdefghij", 0, 11, "abcde", 2, 3, -2);
-    test("abcdefghij", 0, 11, "abcde", 2, 4, -2);
-    test("abcdefghij", 0, 11, "abcde", 4, 0, 10);
-    test("abcdefghij", 0, 11, "abcde", 4, 1, -4);
-    test("abcdefghij", 0, 11, "abcde", 4, 2, -4);
-    test("abcdefghij", 0, 11, "abcde", 5, 0, 10);
-    test("abcdefghij", 0, 11, "abcde", 5, 1, 10);
-    test("abcdefghij", 0, 11, "abcde", 6, 0, 0);
-    test("abcdefghij", 0, 11, "abcdefghij", 0, 0, 10);
-    test("abcdefghij", 0, 11, "abcdefghij", 0, 1, 9);
-    test("abcdefghij", 0, 11, "abcdefghij", 0, 5, 5);
-    test("abcdefghij", 0, 11, "abcdefghij", 0, 9, 1);
-    test("abcdefghij", 0, 11, "abcdefghij", 0, 10, 0);
-    test("abcdefghij", 0, 11, "abcdefghij", 0, 11, 0);
-    test("abcdefghij", 0, 11, "abcdefghij", 1, 0, 10);
-    test("abcdefghij", 0, 11, "abcdefghij", 1, 1, -1);
-    test("abcdefghij", 0, 11, "abcdefghij", 1, 4, -1);
-    test("abcdefghij", 0, 11, "abcdefghij", 1, 8, -1);
-    test("abcdefghij", 0, 11, "abcdefghij", 1, 9, -1);
-    test("abcdefghij", 0, 11, "abcdefghij", 1, 10, -1);
-    test("abcdefghij", 0, 11, "abcdefghij", 5, 0, 10);
-    test("abcdefghij", 0, 11, "abcdefghij", 5, 1, -5);
-    test("abcdefghij", 0, 11, "abcdefghij", 5, 2, -5);
-    test("abcdefghij", 0, 11, "abcdefghij", 5, 4, -5);
-    test("abcdefghij", 0, 11, "abcdefghij", 5, 5, -5);
-    test("abcdefghij", 0, 11, "abcdefghij", 5, 6, -5);
-    test("abcdefghij", 0, 11, "abcdefghij", 9, 0, 10);
-    test("abcdefghij", 0, 11, "abcdefghij", 9, 1, -9);
-    test("abcdefghij", 0, 11, "abcdefghij", 9, 2, -9);
-    test("abcdefghij", 0, 11, "abcdefghij", 10, 0, 10);
-    test("abcdefghij", 0, 11, "abcdefghij", 10, 1, 10);
-    test("abcdefghij", 0, 11, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 0, 10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 1, 9);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 10, 0);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 19, -9);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 20, -10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 21, -10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 0, 10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 9, -1);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 18, -1);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 19, -1);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 20, -1);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 0, 10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 1, -10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 5, -10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 9, -10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 0, 10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 1, -19);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 2, -19);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, 0, 10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, 1, 10);
-    test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 1, 0, "", 0, 0, 0);
-    test("abcdefghij", 1, 0, "", 0, 1, 0);
-    test("abcdefghij", 1, 0, "", 1, 0, 0);
-    test("abcdefghij", 1, 0, "abcde", 0, 0, 0);
-    test("abcdefghij", 1, 0, "abcde", 0, 1, -1);
-    test("abcdefghij", 1, 0, "abcde", 0, 2, -2);
-    test("abcdefghij", 1, 0, "abcde", 0, 4, -4);
-    test("abcdefghij", 1, 0, "abcde", 0, 5, -5);
-    test("abcdefghij", 1, 0, "abcde", 0, 6, -5);
-    test("abcdefghij", 1, 0, "abcde", 1, 0, 0);
-    test("abcdefghij", 1, 0, "abcde", 1, 1, -1);
-    test("abcdefghij", 1, 0, "abcde", 1, 2, -2);
-    test("abcdefghij", 1, 0, "abcde", 1, 3, -3);
-    test("abcdefghij", 1, 0, "abcde", 1, 4, -4);
-    test("abcdefghij", 1, 0, "abcde", 1, 5, -4);
-    test("abcdefghij", 1, 0, "abcde", 2, 0, 0);
-    test("abcdefghij", 1, 0, "abcde", 2, 1, -1);
-    test("abcdefghij", 1, 0, "abcde", 2, 2, -2);
-    test("abcdefghij", 1, 0, "abcde", 2, 3, -3);
-    test("abcdefghij", 1, 0, "abcde", 2, 4, -3);
-    test("abcdefghij", 1, 0, "abcde", 4, 0, 0);
-    test("abcdefghij", 1, 0, "abcde", 4, 1, -1);
-    test("abcdefghij", 1, 0, "abcde", 4, 2, -1);
-    test("abcdefghij", 1, 0, "abcde", 5, 0, 0);
-    test("abcdefghij", 1, 0, "abcde", 5, 1, 0);
-    test("abcdefghij", 1, 0, "abcde", 6, 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghij", 0, 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghij", 0, 1, -1);
-    test("abcdefghij", 1, 0, "abcdefghij", 0, 5, -5);
-    test("abcdefghij", 1, 0, "abcdefghij", 0, 9, -9);
-    test("abcdefghij", 1, 0, "abcdefghij", 0, 10, -10);
-    test("abcdefghij", 1, 0, "abcdefghij", 0, 11, -10);
+void test23() {
+  test("abcdefghij", 0, 11, "abcde", 0, 4, 6);
+  test("abcdefghij", 0, 11, "abcde", 0, 5, 5);
+  test("abcdefghij", 0, 11, "abcde", 0, 6, 5);
+  test("abcdefghij", 0, 11, "abcde", 1, 0, 10);
+  test("abcdefghij", 0, 11, "abcde", 1, 1, -1);
+  test("abcdefghij", 0, 11, "abcde", 1, 2, -1);
+  test("abcdefghij", 0, 11, "abcde", 1, 3, -1);
+  test("abcdefghij", 0, 11, "abcde", 1, 4, -1);
+  test("abcdefghij", 0, 11, "abcde", 1, 5, -1);
+  test("abcdefghij", 0, 11, "abcde", 2, 0, 10);
+  test("abcdefghij", 0, 11, "abcde", 2, 1, -2);
+  test("abcdefghij", 0, 11, "abcde", 2, 2, -2);
+  test("abcdefghij", 0, 11, "abcde", 2, 3, -2);
+  test("abcdefghij", 0, 11, "abcde", 2, 4, -2);
+  test("abcdefghij", 0, 11, "abcde", 4, 0, 10);
+  test("abcdefghij", 0, 11, "abcde", 4, 1, -4);
+  test("abcdefghij", 0, 11, "abcde", 4, 2, -4);
+  test("abcdefghij", 0, 11, "abcde", 5, 0, 10);
+  test("abcdefghij", 0, 11, "abcde", 5, 1, 10);
+  test("abcdefghij", 0, 11, "abcde", 6, 0, 0);
+  test("abcdefghij", 0, 11, "abcdefghij", 0, 0, 10);
+  test("abcdefghij", 0, 11, "abcdefghij", 0, 1, 9);
+  test("abcdefghij", 0, 11, "abcdefghij", 0, 5, 5);
+  test("abcdefghij", 0, 11, "abcdefghij", 0, 9, 1);
+  test("abcdefghij", 0, 11, "abcdefghij", 0, 10, 0);
+  test("abcdefghij", 0, 11, "abcdefghij", 0, 11, 0);
+  test("abcdefghij", 0, 11, "abcdefghij", 1, 0, 10);
+  test("abcdefghij", 0, 11, "abcdefghij", 1, 1, -1);
+  test("abcdefghij", 0, 11, "abcdefghij", 1, 4, -1);
+  test("abcdefghij", 0, 11, "abcdefghij", 1, 8, -1);
+  test("abcdefghij", 0, 11, "abcdefghij", 1, 9, -1);
+  test("abcdefghij", 0, 11, "abcdefghij", 1, 10, -1);
+  test("abcdefghij", 0, 11, "abcdefghij", 5, 0, 10);
+  test("abcdefghij", 0, 11, "abcdefghij", 5, 1, -5);
+  test("abcdefghij", 0, 11, "abcdefghij", 5, 2, -5);
+  test("abcdefghij", 0, 11, "abcdefghij", 5, 4, -5);
+  test("abcdefghij", 0, 11, "abcdefghij", 5, 5, -5);
+  test("abcdefghij", 0, 11, "abcdefghij", 5, 6, -5);
+  test("abcdefghij", 0, 11, "abcdefghij", 9, 0, 10);
+  test("abcdefghij", 0, 11, "abcdefghij", 9, 1, -9);
+  test("abcdefghij", 0, 11, "abcdefghij", 9, 2, -9);
+  test("abcdefghij", 0, 11, "abcdefghij", 10, 0, 10);
+  test("abcdefghij", 0, 11, "abcdefghij", 10, 1, 10);
+  test("abcdefghij", 0, 11, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 0, 10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 1, 9);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 10, 0);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 19, -9);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 20, -10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 0, 21, -10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 0, 10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 9, -1);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 18, -1);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 19, -1);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 1, 20, -1);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 0, 10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 1, -10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 5, -10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 9, -10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 0, 10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 1, -19);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 19, 2, -19);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, 0, 10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 20, 1, 10);
+  test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 1, 0, "", 0, 0, 0);
+  test("abcdefghij", 1, 0, "", 0, 1, 0);
+  test("abcdefghij", 1, 0, "", 1, 0, 0);
+  test("abcdefghij", 1, 0, "abcde", 0, 0, 0);
+  test("abcdefghij", 1, 0, "abcde", 0, 1, -1);
+  test("abcdefghij", 1, 0, "abcde", 0, 2, -2);
+  test("abcdefghij", 1, 0, "abcde", 0, 4, -4);
+  test("abcdefghij", 1, 0, "abcde", 0, 5, -5);
+  test("abcdefghij", 1, 0, "abcde", 0, 6, -5);
+  test("abcdefghij", 1, 0, "abcde", 1, 0, 0);
+  test("abcdefghij", 1, 0, "abcde", 1, 1, -1);
+  test("abcdefghij", 1, 0, "abcde", 1, 2, -2);
+  test("abcdefghij", 1, 0, "abcde", 1, 3, -3);
+  test("abcdefghij", 1, 0, "abcde", 1, 4, -4);
+  test("abcdefghij", 1, 0, "abcde", 1, 5, -4);
+  test("abcdefghij", 1, 0, "abcde", 2, 0, 0);
+  test("abcdefghij", 1, 0, "abcde", 2, 1, -1);
+  test("abcdefghij", 1, 0, "abcde", 2, 2, -2);
+  test("abcdefghij", 1, 0, "abcde", 2, 3, -3);
+  test("abcdefghij", 1, 0, "abcde", 2, 4, -3);
+  test("abcdefghij", 1, 0, "abcde", 4, 0, 0);
+  test("abcdefghij", 1, 0, "abcde", 4, 1, -1);
+  test("abcdefghij", 1, 0, "abcde", 4, 2, -1);
+  test("abcdefghij", 1, 0, "abcde", 5, 0, 0);
+  test("abcdefghij", 1, 0, "abcde", 5, 1, 0);
+  test("abcdefghij", 1, 0, "abcde", 6, 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghij", 0, 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghij", 0, 1, -1);
+  test("abcdefghij", 1, 0, "abcdefghij", 0, 5, -5);
+  test("abcdefghij", 1, 0, "abcdefghij", 0, 9, -9);
+  test("abcdefghij", 1, 0, "abcdefghij", 0, 10, -10);
+  test("abcdefghij", 1, 0, "abcdefghij", 0, 11, -10);
 }
 
-void test24()
-{
-    test("abcdefghij", 1, 0, "abcdefghij", 1, 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghij", 1, 1, -1);
-    test("abcdefghij", 1, 0, "abcdefghij", 1, 4, -4);
-    test("abcdefghij", 1, 0, "abcdefghij", 1, 8, -8);
-    test("abcdefghij", 1, 0, "abcdefghij", 1, 9, -9);
-    test("abcdefghij", 1, 0, "abcdefghij", 1, 10, -9);
-    test("abcdefghij", 1, 0, "abcdefghij", 5, 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghij", 5, 1, -1);
-    test("abcdefghij", 1, 0, "abcdefghij", 5, 2, -2);
-    test("abcdefghij", 1, 0, "abcdefghij", 5, 4, -4);
-    test("abcdefghij", 1, 0, "abcdefghij", 5, 5, -5);
-    test("abcdefghij", 1, 0, "abcdefghij", 5, 6, -5);
-    test("abcdefghij", 1, 0, "abcdefghij", 9, 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghij", 9, 1, -1);
-    test("abcdefghij", 1, 0, "abcdefghij", 9, 2, -1);
-    test("abcdefghij", 1, 0, "abcdefghij", 10, 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghij", 10, 1, 0);
-    test("abcdefghij", 1, 0, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 1, 1, "", 0, 0, 1);
-    test("abcdefghij", 1, 1, "", 0, 1, 1);
-    test("abcdefghij", 1, 1, "", 1, 0, 0);
-    test("abcdefghij", 1, 1, "abcde", 0, 0, 1);
-    test("abcdefghij", 1, 1, "abcde", 0, 1, 1);
-    test("abcdefghij", 1, 1, "abcde", 0, 2, 1);
-    test("abcdefghij", 1, 1, "abcde", 0, 4, 1);
-    test("abcdefghij", 1, 1, "abcde", 0, 5, 1);
-    test("abcdefghij", 1, 1, "abcde", 0, 6, 1);
-    test("abcdefghij", 1, 1, "abcde", 1, 0, 1);
-    test("abcdefghij", 1, 1, "abcde", 1, 1, 0);
-    test("abcdefghij", 1, 1, "abcde", 1, 2, -1);
-    test("abcdefghij", 1, 1, "abcde", 1, 3, -2);
-    test("abcdefghij", 1, 1, "abcde", 1, 4, -3);
-    test("abcdefghij", 1, 1, "abcde", 1, 5, -3);
-    test("abcdefghij", 1, 1, "abcde", 2, 0, 1);
-    test("abcdefghij", 1, 1, "abcde", 2, 1, -1);
-    test("abcdefghij", 1, 1, "abcde", 2, 2, -1);
-    test("abcdefghij", 1, 1, "abcde", 2, 3, -1);
-    test("abcdefghij", 1, 1, "abcde", 2, 4, -1);
-    test("abcdefghij", 1, 1, "abcde", 4, 0, 1);
-    test("abcdefghij", 1, 1, "abcde", 4, 1, -3);
-    test("abcdefghij", 1, 1, "abcde", 4, 2, -3);
-    test("abcdefghij", 1, 1, "abcde", 5, 0, 1);
-    test("abcdefghij", 1, 1, "abcde", 5, 1, 1);
-    test("abcdefghij", 1, 1, "abcde", 6, 0, 0);
-    test("abcdefghij", 1, 1, "abcdefghij", 0, 0, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 0, 1, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 0, 5, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 0, 9, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 0, 10, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 0, 11, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 1, 0, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 1, 1, 0);
-    test("abcdefghij", 1, 1, "abcdefghij", 1, 4, -3);
-    test("abcdefghij", 1, 1, "abcdefghij", 1, 8, -7);
-    test("abcdefghij", 1, 1, "abcdefghij", 1, 9, -8);
-    test("abcdefghij", 1, 1, "abcdefghij", 1, 10, -8);
-    test("abcdefghij", 1, 1, "abcdefghij", 5, 0, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 5, 1, -4);
-    test("abcdefghij", 1, 1, "abcdefghij", 5, 2, -4);
-    test("abcdefghij", 1, 1, "abcdefghij", 5, 4, -4);
-    test("abcdefghij", 1, 1, "abcdefghij", 5, 5, -4);
-    test("abcdefghij", 1, 1, "abcdefghij", 5, 6, -4);
-    test("abcdefghij", 1, 1, "abcdefghij", 9, 0, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 9, 1, -8);
-    test("abcdefghij", 1, 1, "abcdefghij", 9, 2, -8);
-    test("abcdefghij", 1, 1, "abcdefghij", 10, 0, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 10, 1, 1);
-    test("abcdefghij", 1, 1, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
+void test24() {
+  test("abcdefghij", 1, 0, "abcdefghij", 1, 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghij", 1, 1, -1);
+  test("abcdefghij", 1, 0, "abcdefghij", 1, 4, -4);
+  test("abcdefghij", 1, 0, "abcdefghij", 1, 8, -8);
+  test("abcdefghij", 1, 0, "abcdefghij", 1, 9, -9);
+  test("abcdefghij", 1, 0, "abcdefghij", 1, 10, -9);
+  test("abcdefghij", 1, 0, "abcdefghij", 5, 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghij", 5, 1, -1);
+  test("abcdefghij", 1, 0, "abcdefghij", 5, 2, -2);
+  test("abcdefghij", 1, 0, "abcdefghij", 5, 4, -4);
+  test("abcdefghij", 1, 0, "abcdefghij", 5, 5, -5);
+  test("abcdefghij", 1, 0, "abcdefghij", 5, 6, -5);
+  test("abcdefghij", 1, 0, "abcdefghij", 9, 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghij", 9, 1, -1);
+  test("abcdefghij", 1, 0, "abcdefghij", 9, 2, -1);
+  test("abcdefghij", 1, 0, "abcdefghij", 10, 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghij", 10, 1, 0);
+  test("abcdefghij", 1, 0, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 1, 1, "", 0, 0, 1);
+  test("abcdefghij", 1, 1, "", 0, 1, 1);
+  test("abcdefghij", 1, 1, "", 1, 0, 0);
+  test("abcdefghij", 1, 1, "abcde", 0, 0, 1);
+  test("abcdefghij", 1, 1, "abcde", 0, 1, 1);
+  test("abcdefghij", 1, 1, "abcde", 0, 2, 1);
+  test("abcdefghij", 1, 1, "abcde", 0, 4, 1);
+  test("abcdefghij", 1, 1, "abcde", 0, 5, 1);
+  test("abcdefghij", 1, 1, "abcde", 0, 6, 1);
+  test("abcdefghij", 1, 1, "abcde", 1, 0, 1);
+  test("abcdefghij", 1, 1, "abcde", 1, 1, 0);
+  test("abcdefghij", 1, 1, "abcde", 1, 2, -1);
+  test("abcdefghij", 1, 1, "abcde", 1, 3, -2);
+  test("abcdefghij", 1, 1, "abcde", 1, 4, -3);
+  test("abcdefghij", 1, 1, "abcde", 1, 5, -3);
+  test("abcdefghij", 1, 1, "abcde", 2, 0, 1);
+  test("abcdefghij", 1, 1, "abcde", 2, 1, -1);
+  test("abcdefghij", 1, 1, "abcde", 2, 2, -1);
+  test("abcdefghij", 1, 1, "abcde", 2, 3, -1);
+  test("abcdefghij", 1, 1, "abcde", 2, 4, -1);
+  test("abcdefghij", 1, 1, "abcde", 4, 0, 1);
+  test("abcdefghij", 1, 1, "abcde", 4, 1, -3);
+  test("abcdefghij", 1, 1, "abcde", 4, 2, -3);
+  test("abcdefghij", 1, 1, "abcde", 5, 0, 1);
+  test("abcdefghij", 1, 1, "abcde", 5, 1, 1);
+  test("abcdefghij", 1, 1, "abcde", 6, 0, 0);
+  test("abcdefghij", 1, 1, "abcdefghij", 0, 0, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 0, 1, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 0, 5, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 0, 9, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 0, 10, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 0, 11, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 1, 0, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 1, 1, 0);
+  test("abcdefghij", 1, 1, "abcdefghij", 1, 4, -3);
+  test("abcdefghij", 1, 1, "abcdefghij", 1, 8, -7);
+  test("abcdefghij", 1, 1, "abcdefghij", 1, 9, -8);
+  test("abcdefghij", 1, 1, "abcdefghij", 1, 10, -8);
+  test("abcdefghij", 1, 1, "abcdefghij", 5, 0, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 5, 1, -4);
+  test("abcdefghij", 1, 1, "abcdefghij", 5, 2, -4);
+  test("abcdefghij", 1, 1, "abcdefghij", 5, 4, -4);
+  test("abcdefghij", 1, 1, "abcdefghij", 5, 5, -4);
+  test("abcdefghij", 1, 1, "abcdefghij", 5, 6, -4);
+  test("abcdefghij", 1, 1, "abcdefghij", 9, 0, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 9, 1, -8);
+  test("abcdefghij", 1, 1, "abcdefghij", 9, 2, -8);
+  test("abcdefghij", 1, 1, "abcdefghij", 10, 0, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 10, 1, 1);
+  test("abcdefghij", 1, 1, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
 }
 
-void test25()
-{
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 1, 4, "", 0, 0, 4);
-    test("abcdefghij", 1, 4, "", 0, 1, 4);
-    test("abcdefghij", 1, 4, "", 1, 0, 0);
-    test("abcdefghij", 1, 4, "abcde", 0, 0, 4);
-    test("abcdefghij", 1, 4, "abcde", 0, 1, 1);
-    test("abcdefghij", 1, 4, "abcde", 0, 2, 1);
-    test("abcdefghij", 1, 4, "abcde", 0, 4, 1);
-    test("abcdefghij", 1, 4, "abcde", 0, 5, 1);
-    test("abcdefghij", 1, 4, "abcde", 0, 6, 1);
-    test("abcdefghij", 1, 4, "abcde", 1, 0, 4);
-    test("abcdefghij", 1, 4, "abcde", 1, 1, 3);
-    test("abcdefghij", 1, 4, "abcde", 1, 2, 2);
-    test("abcdefghij", 1, 4, "abcde", 1, 3, 1);
-    test("abcdefghij", 1, 4, "abcde", 1, 4, 0);
-    test("abcdefghij", 1, 4, "abcde", 1, 5, 0);
-    test("abcdefghij", 1, 4, "abcde", 2, 0, 4);
-    test("abcdefghij", 1, 4, "abcde", 2, 1, -1);
-    test("abcdefghij", 1, 4, "abcde", 2, 2, -1);
-    test("abcdefghij", 1, 4, "abcde", 2, 3, -1);
-    test("abcdefghij", 1, 4, "abcde", 2, 4, -1);
-    test("abcdefghij", 1, 4, "abcde", 4, 0, 4);
-    test("abcdefghij", 1, 4, "abcde", 4, 1, -3);
-    test("abcdefghij", 1, 4, "abcde", 4, 2, -3);
-    test("abcdefghij", 1, 4, "abcde", 5, 0, 4);
-    test("abcdefghij", 1, 4, "abcde", 5, 1, 4);
-    test("abcdefghij", 1, 4, "abcde", 6, 0, 0);
-    test("abcdefghij", 1, 4, "abcdefghij", 0, 0, 4);
-    test("abcdefghij", 1, 4, "abcdefghij", 0, 1, 1);
-    test("abcdefghij", 1, 4, "abcdefghij", 0, 5, 1);
-    test("abcdefghij", 1, 4, "abcdefghij", 0, 9, 1);
-    test("abcdefghij", 1, 4, "abcdefghij", 0, 10, 1);
-    test("abcdefghij", 1, 4, "abcdefghij", 0, 11, 1);
-    test("abcdefghij", 1, 4, "abcdefghij", 1, 0, 4);
-    test("abcdefghij", 1, 4, "abcdefghij", 1, 1, 3);
-    test("abcdefghij", 1, 4, "abcdefghij", 1, 4, 0);
-    test("abcdefghij", 1, 4, "abcdefghij", 1, 8, -4);
-    test("abcdefghij", 1, 4, "abcdefghij", 1, 9, -5);
-    test("abcdefghij", 1, 4, "abcdefghij", 1, 10, -5);
-    test("abcdefghij", 1, 4, "abcdefghij", 5, 0, 4);
-    test("abcdefghij", 1, 4, "abcdefghij", 5, 1, -4);
-    test("abcdefghij", 1, 4, "abcdefghij", 5, 2, -4);
-    test("abcdefghij", 1, 4, "abcdefghij", 5, 4, -4);
-    test("abcdefghij", 1, 4, "abcdefghij", 5, 5, -4);
-    test("abcdefghij", 1, 4, "abcdefghij", 5, 6, -4);
-    test("abcdefghij", 1, 4, "abcdefghij", 9, 0, 4);
-    test("abcdefghij", 1, 4, "abcdefghij", 9, 1, -8);
-    test("abcdefghij", 1, 4, "abcdefghij", 9, 2, -8);
-    test("abcdefghij", 1, 4, "abcdefghij", 10, 0, 4);
-    test("abcdefghij", 1, 4, "abcdefghij", 10, 1, 4);
-    test("abcdefghij", 1, 4, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 0, 4);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 1, 1);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 10, 1);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 19, 1);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 20, 1);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 21, 1);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 0, 4);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 1, 3);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 9, -5);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 18, -14);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 19, -15);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 20, -15);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 0, 4);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 1, -9);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 5, -9);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 10, -9);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 11, -9);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 0, 4);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 1, -18);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 2, -18);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 0, 4);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 1, 4);
-    test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 1, 8, "", 0, 0, 8);
-    test("abcdefghij", 1, 8, "", 0, 1, 8);
-    test("abcdefghij", 1, 8, "", 1, 0, 0);
-    test("abcdefghij", 1, 8, "abcde", 0, 0, 8);
-    test("abcdefghij", 1, 8, "abcde", 0, 1, 1);
-    test("abcdefghij", 1, 8, "abcde", 0, 2, 1);
-    test("abcdefghij", 1, 8, "abcde", 0, 4, 1);
-    test("abcdefghij", 1, 8, "abcde", 0, 5, 1);
-    test("abcdefghij", 1, 8, "abcde", 0, 6, 1);
-    test("abcdefghij", 1, 8, "abcde", 1, 0, 8);
+void test25() {
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 1, 4, "", 0, 0, 4);
+  test("abcdefghij", 1, 4, "", 0, 1, 4);
+  test("abcdefghij", 1, 4, "", 1, 0, 0);
+  test("abcdefghij", 1, 4, "abcde", 0, 0, 4);
+  test("abcdefghij", 1, 4, "abcde", 0, 1, 1);
+  test("abcdefghij", 1, 4, "abcde", 0, 2, 1);
+  test("abcdefghij", 1, 4, "abcde", 0, 4, 1);
+  test("abcdefghij", 1, 4, "abcde", 0, 5, 1);
+  test("abcdefghij", 1, 4, "abcde", 0, 6, 1);
+  test("abcdefghij", 1, 4, "abcde", 1, 0, 4);
+  test("abcdefghij", 1, 4, "abcde", 1, 1, 3);
+  test("abcdefghij", 1, 4, "abcde", 1, 2, 2);
+  test("abcdefghij", 1, 4, "abcde", 1, 3, 1);
+  test("abcdefghij", 1, 4, "abcde", 1, 4, 0);
+  test("abcdefghij", 1, 4, "abcde", 1, 5, 0);
+  test("abcdefghij", 1, 4, "abcde", 2, 0, 4);
+  test("abcdefghij", 1, 4, "abcde", 2, 1, -1);
+  test("abcdefghij", 1, 4, "abcde", 2, 2, -1);
+  test("abcdefghij", 1, 4, "abcde", 2, 3, -1);
+  test("abcdefghij", 1, 4, "abcde", 2, 4, -1);
+  test("abcdefghij", 1, 4, "abcde", 4, 0, 4);
+  test("abcdefghij", 1, 4, "abcde", 4, 1, -3);
+  test("abcdefghij", 1, 4, "abcde", 4, 2, -3);
+  test("abcdefghij", 1, 4, "abcde", 5, 0, 4);
+  test("abcdefghij", 1, 4, "abcde", 5, 1, 4);
+  test("abcdefghij", 1, 4, "abcde", 6, 0, 0);
+  test("abcdefghij", 1, 4, "abcdefghij", 0, 0, 4);
+  test("abcdefghij", 1, 4, "abcdefghij", 0, 1, 1);
+  test("abcdefghij", 1, 4, "abcdefghij", 0, 5, 1);
+  test("abcdefghij", 1, 4, "abcdefghij", 0, 9, 1);
+  test("abcdefghij", 1, 4, "abcdefghij", 0, 10, 1);
+  test("abcdefghij", 1, 4, "abcdefghij", 0, 11, 1);
+  test("abcdefghij", 1, 4, "abcdefghij", 1, 0, 4);
+  test("abcdefghij", 1, 4, "abcdefghij", 1, 1, 3);
+  test("abcdefghij", 1, 4, "abcdefghij", 1, 4, 0);
+  test("abcdefghij", 1, 4, "abcdefghij", 1, 8, -4);
+  test("abcdefghij", 1, 4, "abcdefghij", 1, 9, -5);
+  test("abcdefghij", 1, 4, "abcdefghij", 1, 10, -5);
+  test("abcdefghij", 1, 4, "abcdefghij", 5, 0, 4);
+  test("abcdefghij", 1, 4, "abcdefghij", 5, 1, -4);
+  test("abcdefghij", 1, 4, "abcdefghij", 5, 2, -4);
+  test("abcdefghij", 1, 4, "abcdefghij", 5, 4, -4);
+  test("abcdefghij", 1, 4, "abcdefghij", 5, 5, -4);
+  test("abcdefghij", 1, 4, "abcdefghij", 5, 6, -4);
+  test("abcdefghij", 1, 4, "abcdefghij", 9, 0, 4);
+  test("abcdefghij", 1, 4, "abcdefghij", 9, 1, -8);
+  test("abcdefghij", 1, 4, "abcdefghij", 9, 2, -8);
+  test("abcdefghij", 1, 4, "abcdefghij", 10, 0, 4);
+  test("abcdefghij", 1, 4, "abcdefghij", 10, 1, 4);
+  test("abcdefghij", 1, 4, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 0, 4);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 1, 1);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 10, 1);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 19, 1);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 20, 1);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 0, 21, 1);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 0, 4);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 1, 3);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 9, -5);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 18, -14);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 19, -15);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1, 20, -15);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 0, 4);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 1, -9);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 5, -9);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 10, -9);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 10, 11, -9);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 0, 4);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 1, -18);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 19, 2, -18);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 0, 4);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 20, 1, 4);
+  test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 1, 8, "", 0, 0, 8);
+  test("abcdefghij", 1, 8, "", 0, 1, 8);
+  test("abcdefghij", 1, 8, "", 1, 0, 0);
+  test("abcdefghij", 1, 8, "abcde", 0, 0, 8);
+  test("abcdefghij", 1, 8, "abcde", 0, 1, 1);
+  test("abcdefghij", 1, 8, "abcde", 0, 2, 1);
+  test("abcdefghij", 1, 8, "abcde", 0, 4, 1);
+  test("abcdefghij", 1, 8, "abcde", 0, 5, 1);
+  test("abcdefghij", 1, 8, "abcde", 0, 6, 1);
+  test("abcdefghij", 1, 8, "abcde", 1, 0, 8);
 }
 
-void test26()
-{
-    test("abcdefghij", 1, 8, "abcde", 1, 1, 7);
-    test("abcdefghij", 1, 8, "abcde", 1, 2, 6);
-    test("abcdefghij", 1, 8, "abcde", 1, 3, 5);
-    test("abcdefghij", 1, 8, "abcde", 1, 4, 4);
-    test("abcdefghij", 1, 8, "abcde", 1, 5, 4);
-    test("abcdefghij", 1, 8, "abcde", 2, 0, 8);
-    test("abcdefghij", 1, 8, "abcde", 2, 1, -1);
-    test("abcdefghij", 1, 8, "abcde", 2, 2, -1);
-    test("abcdefghij", 1, 8, "abcde", 2, 3, -1);
-    test("abcdefghij", 1, 8, "abcde", 2, 4, -1);
-    test("abcdefghij", 1, 8, "abcde", 4, 0, 8);
-    test("abcdefghij", 1, 8, "abcde", 4, 1, -3);
-    test("abcdefghij", 1, 8, "abcde", 4, 2, -3);
-    test("abcdefghij", 1, 8, "abcde", 5, 0, 8);
-    test("abcdefghij", 1, 8, "abcde", 5, 1, 8);
-    test("abcdefghij", 1, 8, "abcde", 6, 0, 0);
-    test("abcdefghij", 1, 8, "abcdefghij", 0, 0, 8);
-    test("abcdefghij", 1, 8, "abcdefghij", 0, 1, 1);
-    test("abcdefghij", 1, 8, "abcdefghij", 0, 5, 1);
-    test("abcdefghij", 1, 8, "abcdefghij", 0, 9, 1);
-    test("abcdefghij", 1, 8, "abcdefghij", 0, 10, 1);
-    test("abcdefghij", 1, 8, "abcdefghij", 0, 11, 1);
-    test("abcdefghij", 1, 8, "abcdefghij", 1, 0, 8);
-    test("abcdefghij", 1, 8, "abcdefghij", 1, 1, 7);
-    test("abcdefghij", 1, 8, "abcdefghij", 1, 4, 4);
-    test("abcdefghij", 1, 8, "abcdefghij", 1, 8, 0);
-    test("abcdefghij", 1, 8, "abcdefghij", 1, 9, -1);
-    test("abcdefghij", 1, 8, "abcdefghij", 1, 10, -1);
-    test("abcdefghij", 1, 8, "abcdefghij", 5, 0, 8);
-    test("abcdefghij", 1, 8, "abcdefghij", 5, 1, -4);
-    test("abcdefghij", 1, 8, "abcdefghij", 5, 2, -4);
-    test("abcdefghij", 1, 8, "abcdefghij", 5, 4, -4);
-    test("abcdefghij", 1, 8, "abcdefghij", 5, 5, -4);
-    test("abcdefghij", 1, 8, "abcdefghij", 5, 6, -4);
-    test("abcdefghij", 1, 8, "abcdefghij", 9, 0, 8);
-    test("abcdefghij", 1, 8, "abcdefghij", 9, 1, -8);
-    test("abcdefghij", 1, 8, "abcdefghij", 9, 2, -8);
-    test("abcdefghij", 1, 8, "abcdefghij", 10, 0, 8);
-    test("abcdefghij", 1, 8, "abcdefghij", 10, 1, 8);
-    test("abcdefghij", 1, 8, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 0, 8);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 1, 1);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 10, 1);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 19, 1);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 20, 1);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 21, 1);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 0, 8);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 1, 7);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 9, -1);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 18, -10);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 19, -11);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 20, -11);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 0, 8);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 1, -9);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 5, -9);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 10, -9);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 11, -9);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 0, 8);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 1, -18);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 2, -18);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 0, 8);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 1, 8);
-    test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 1, 9, "", 0, 0, 9);
-    test("abcdefghij", 1, 9, "", 0, 1, 9);
-    test("abcdefghij", 1, 9, "", 1, 0, 0);
-    test("abcdefghij", 1, 9, "abcde", 0, 0, 9);
-    test("abcdefghij", 1, 9, "abcde", 0, 1, 1);
-    test("abcdefghij", 1, 9, "abcde", 0, 2, 1);
-    test("abcdefghij", 1, 9, "abcde", 0, 4, 1);
-    test("abcdefghij", 1, 9, "abcde", 0, 5, 1);
-    test("abcdefghij", 1, 9, "abcde", 0, 6, 1);
-    test("abcdefghij", 1, 9, "abcde", 1, 0, 9);
-    test("abcdefghij", 1, 9, "abcde", 1, 1, 8);
-    test("abcdefghij", 1, 9, "abcde", 1, 2, 7);
-    test("abcdefghij", 1, 9, "abcde", 1, 3, 6);
-    test("abcdefghij", 1, 9, "abcde", 1, 4, 5);
-    test("abcdefghij", 1, 9, "abcde", 1, 5, 5);
-    test("abcdefghij", 1, 9, "abcde", 2, 0, 9);
-    test("abcdefghij", 1, 9, "abcde", 2, 1, -1);
-    test("abcdefghij", 1, 9, "abcde", 2, 2, -1);
-    test("abcdefghij", 1, 9, "abcde", 2, 3, -1);
-    test("abcdefghij", 1, 9, "abcde", 2, 4, -1);
-    test("abcdefghij", 1, 9, "abcde", 4, 0, 9);
-    test("abcdefghij", 1, 9, "abcde", 4, 1, -3);
-    test("abcdefghij", 1, 9, "abcde", 4, 2, -3);
-    test("abcdefghij", 1, 9, "abcde", 5, 0, 9);
-    test("abcdefghij", 1, 9, "abcde", 5, 1, 9);
-    test("abcdefghij", 1, 9, "abcde", 6, 0, 0);
-    test("abcdefghij", 1, 9, "abcdefghij", 0, 0, 9);
-    test("abcdefghij", 1, 9, "abcdefghij", 0, 1, 1);
-    test("abcdefghij", 1, 9, "abcdefghij", 0, 5, 1);
-    test("abcdefghij", 1, 9, "abcdefghij", 0, 9, 1);
-    test("abcdefghij", 1, 9, "abcdefghij", 0, 10, 1);
-    test("abcdefghij", 1, 9, "abcdefghij", 0, 11, 1);
-    test("abcdefghij", 1, 9, "abcdefghij", 1, 0, 9);
-    test("abcdefghij", 1, 9, "abcdefghij", 1, 1, 8);
-    test("abcdefghij", 1, 9, "abcdefghij", 1, 4, 5);
-    test("abcdefghij", 1, 9, "abcdefghij", 1, 8, 1);
+void test26() {
+  test("abcdefghij", 1, 8, "abcde", 1, 1, 7);
+  test("abcdefghij", 1, 8, "abcde", 1, 2, 6);
+  test("abcdefghij", 1, 8, "abcde", 1, 3, 5);
+  test("abcdefghij", 1, 8, "abcde", 1, 4, 4);
+  test("abcdefghij", 1, 8, "abcde", 1, 5, 4);
+  test("abcdefghij", 1, 8, "abcde", 2, 0, 8);
+  test("abcdefghij", 1, 8, "abcde", 2, 1, -1);
+  test("abcdefghij", 1, 8, "abcde", 2, 2, -1);
+  test("abcdefghij", 1, 8, "abcde", 2, 3, -1);
+  test("abcdefghij", 1, 8, "abcde", 2, 4, -1);
+  test("abcdefghij", 1, 8, "abcde", 4, 0, 8);
+  test("abcdefghij", 1, 8, "abcde", 4, 1, -3);
+  test("abcdefghij", 1, 8, "abcde", 4, 2, -3);
+  test("abcdefghij", 1, 8, "abcde", 5, 0, 8);
+  test("abcdefghij", 1, 8, "abcde", 5, 1, 8);
+  test("abcdefghij", 1, 8, "abcde", 6, 0, 0);
+  test("abcdefghij", 1, 8, "abcdefghij", 0, 0, 8);
+  test("abcdefghij", 1, 8, "abcdefghij", 0, 1, 1);
+  test("abcdefghij", 1, 8, "abcdefghij", 0, 5, 1);
+  test("abcdefghij", 1, 8, "abcdefghij", 0, 9, 1);
+  test("abcdefghij", 1, 8, "abcdefghij", 0, 10, 1);
+  test("abcdefghij", 1, 8, "abcdefghij", 0, 11, 1);
+  test("abcdefghij", 1, 8, "abcdefghij", 1, 0, 8);
+  test("abcdefghij", 1, 8, "abcdefghij", 1, 1, 7);
+  test("abcdefghij", 1, 8, "abcdefghij", 1, 4, 4);
+  test("abcdefghij", 1, 8, "abcdefghij", 1, 8, 0);
+  test("abcdefghij", 1, 8, "abcdefghij", 1, 9, -1);
+  test("abcdefghij", 1, 8, "abcdefghij", 1, 10, -1);
+  test("abcdefghij", 1, 8, "abcdefghij", 5, 0, 8);
+  test("abcdefghij", 1, 8, "abcdefghij", 5, 1, -4);
+  test("abcdefghij", 1, 8, "abcdefghij", 5, 2, -4);
+  test("abcdefghij", 1, 8, "abcdefghij", 5, 4, -4);
+  test("abcdefghij", 1, 8, "abcdefghij", 5, 5, -4);
+  test("abcdefghij", 1, 8, "abcdefghij", 5, 6, -4);
+  test("abcdefghij", 1, 8, "abcdefghij", 9, 0, 8);
+  test("abcdefghij", 1, 8, "abcdefghij", 9, 1, -8);
+  test("abcdefghij", 1, 8, "abcdefghij", 9, 2, -8);
+  test("abcdefghij", 1, 8, "abcdefghij", 10, 0, 8);
+  test("abcdefghij", 1, 8, "abcdefghij", 10, 1, 8);
+  test("abcdefghij", 1, 8, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 0, 8);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 1, 1);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 10, 1);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 19, 1);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 20, 1);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 0, 21, 1);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 0, 8);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 1, 7);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 9, -1);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 18, -10);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 19, -11);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1, 20, -11);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 0, 8);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 1, -9);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 5, -9);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 10, -9);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 10, 11, -9);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 0, 8);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 1, -18);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 19, 2, -18);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 0, 8);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 20, 1, 8);
+  test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 1, 9, "", 0, 0, 9);
+  test("abcdefghij", 1, 9, "", 0, 1, 9);
+  test("abcdefghij", 1, 9, "", 1, 0, 0);
+  test("abcdefghij", 1, 9, "abcde", 0, 0, 9);
+  test("abcdefghij", 1, 9, "abcde", 0, 1, 1);
+  test("abcdefghij", 1, 9, "abcde", 0, 2, 1);
+  test("abcdefghij", 1, 9, "abcde", 0, 4, 1);
+  test("abcdefghij", 1, 9, "abcde", 0, 5, 1);
+  test("abcdefghij", 1, 9, "abcde", 0, 6, 1);
+  test("abcdefghij", 1, 9, "abcde", 1, 0, 9);
+  test("abcdefghij", 1, 9, "abcde", 1, 1, 8);
+  test("abcdefghij", 1, 9, "abcde", 1, 2, 7);
+  test("abcdefghij", 1, 9, "abcde", 1, 3, 6);
+  test("abcdefghij", 1, 9, "abcde", 1, 4, 5);
+  test("abcdefghij", 1, 9, "abcde", 1, 5, 5);
+  test("abcdefghij", 1, 9, "abcde", 2, 0, 9);
+  test("abcdefghij", 1, 9, "abcde", 2, 1, -1);
+  test("abcdefghij", 1, 9, "abcde", 2, 2, -1);
+  test("abcdefghij", 1, 9, "abcde", 2, 3, -1);
+  test("abcdefghij", 1, 9, "abcde", 2, 4, -1);
+  test("abcdefghij", 1, 9, "abcde", 4, 0, 9);
+  test("abcdefghij", 1, 9, "abcde", 4, 1, -3);
+  test("abcdefghij", 1, 9, "abcde", 4, 2, -3);
+  test("abcdefghij", 1, 9, "abcde", 5, 0, 9);
+  test("abcdefghij", 1, 9, "abcde", 5, 1, 9);
+  test("abcdefghij", 1, 9, "abcde", 6, 0, 0);
+  test("abcdefghij", 1, 9, "abcdefghij", 0, 0, 9);
+  test("abcdefghij", 1, 9, "abcdefghij", 0, 1, 1);
+  test("abcdefghij", 1, 9, "abcdefghij", 0, 5, 1);
+  test("abcdefghij", 1, 9, "abcdefghij", 0, 9, 1);
+  test("abcdefghij", 1, 9, "abcdefghij", 0, 10, 1);
+  test("abcdefghij", 1, 9, "abcdefghij", 0, 11, 1);
+  test("abcdefghij", 1, 9, "abcdefghij", 1, 0, 9);
+  test("abcdefghij", 1, 9, "abcdefghij", 1, 1, 8);
+  test("abcdefghij", 1, 9, "abcdefghij", 1, 4, 5);
+  test("abcdefghij", 1, 9, "abcdefghij", 1, 8, 1);
 }
 
-void test27()
-{
-    test("abcdefghij", 1, 9, "abcdefghij", 1, 9, 0);
-    test("abcdefghij", 1, 9, "abcdefghij", 1, 10, 0);
-    test("abcdefghij", 1, 9, "abcdefghij", 5, 0, 9);
-    test("abcdefghij", 1, 9, "abcdefghij", 5, 1, -4);
-    test("abcdefghij", 1, 9, "abcdefghij", 5, 2, -4);
-    test("abcdefghij", 1, 9, "abcdefghij", 5, 4, -4);
-    test("abcdefghij", 1, 9, "abcdefghij", 5, 5, -4);
-    test("abcdefghij", 1, 9, "abcdefghij", 5, 6, -4);
-    test("abcdefghij", 1, 9, "abcdefghij", 9, 0, 9);
-    test("abcdefghij", 1, 9, "abcdefghij", 9, 1, -8);
-    test("abcdefghij", 1, 9, "abcdefghij", 9, 2, -8);
-    test("abcdefghij", 1, 9, "abcdefghij", 10, 0, 9);
-    test("abcdefghij", 1, 9, "abcdefghij", 10, 1, 9);
-    test("abcdefghij", 1, 9, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 0, 9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 1, 1);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 10, 1);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 19, 1);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 20, 1);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 21, 1);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 0, 9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 1, 8);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 9, 0);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 18, -9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 19, -10);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 20, -10);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 0, 9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 1, -9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 5, -9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 10, -9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 11, -9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 0, 9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 1, -18);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 2, -18);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 0, 9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 1, 9);
-    test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 1, 10, "", 0, 0, 9);
-    test("abcdefghij", 1, 10, "", 0, 1, 9);
-    test("abcdefghij", 1, 10, "", 1, 0, 0);
-    test("abcdefghij", 1, 10, "abcde", 0, 0, 9);
-    test("abcdefghij", 1, 10, "abcde", 0, 1, 1);
-    test("abcdefghij", 1, 10, "abcde", 0, 2, 1);
-    test("abcdefghij", 1, 10, "abcde", 0, 4, 1);
-    test("abcdefghij", 1, 10, "abcde", 0, 5, 1);
-    test("abcdefghij", 1, 10, "abcde", 0, 6, 1);
-    test("abcdefghij", 1, 10, "abcde", 1, 0, 9);
-    test("abcdefghij", 1, 10, "abcde", 1, 1, 8);
-    test("abcdefghij", 1, 10, "abcde", 1, 2, 7);
-    test("abcdefghij", 1, 10, "abcde", 1, 3, 6);
-    test("abcdefghij", 1, 10, "abcde", 1, 4, 5);
-    test("abcdefghij", 1, 10, "abcde", 1, 5, 5);
-    test("abcdefghij", 1, 10, "abcde", 2, 0, 9);
-    test("abcdefghij", 1, 10, "abcde", 2, 1, -1);
-    test("abcdefghij", 1, 10, "abcde", 2, 2, -1);
-    test("abcdefghij", 1, 10, "abcde", 2, 3, -1);
-    test("abcdefghij", 1, 10, "abcde", 2, 4, -1);
-    test("abcdefghij", 1, 10, "abcde", 4, 0, 9);
-    test("abcdefghij", 1, 10, "abcde", 4, 1, -3);
-    test("abcdefghij", 1, 10, "abcde", 4, 2, -3);
-    test("abcdefghij", 1, 10, "abcde", 5, 0, 9);
-    test("abcdefghij", 1, 10, "abcde", 5, 1, 9);
-    test("abcdefghij", 1, 10, "abcde", 6, 0, 0);
-    test("abcdefghij", 1, 10, "abcdefghij", 0, 0, 9);
-    test("abcdefghij", 1, 10, "abcdefghij", 0, 1, 1);
-    test("abcdefghij", 1, 10, "abcdefghij", 0, 5, 1);
-    test("abcdefghij", 1, 10, "abcdefghij", 0, 9, 1);
-    test("abcdefghij", 1, 10, "abcdefghij", 0, 10, 1);
-    test("abcdefghij", 1, 10, "abcdefghij", 0, 11, 1);
-    test("abcdefghij", 1, 10, "abcdefghij", 1, 0, 9);
-    test("abcdefghij", 1, 10, "abcdefghij", 1, 1, 8);
-    test("abcdefghij", 1, 10, "abcdefghij", 1, 4, 5);
-    test("abcdefghij", 1, 10, "abcdefghij", 1, 8, 1);
-    test("abcdefghij", 1, 10, "abcdefghij", 1, 9, 0);
-    test("abcdefghij", 1, 10, "abcdefghij", 1, 10, 0);
-    test("abcdefghij", 1, 10, "abcdefghij", 5, 0, 9);
-    test("abcdefghij", 1, 10, "abcdefghij", 5, 1, -4);
-    test("abcdefghij", 1, 10, "abcdefghij", 5, 2, -4);
-    test("abcdefghij", 1, 10, "abcdefghij", 5, 4, -4);
-    test("abcdefghij", 1, 10, "abcdefghij", 5, 5, -4);
-    test("abcdefghij", 1, 10, "abcdefghij", 5, 6, -4);
-    test("abcdefghij", 1, 10, "abcdefghij", 9, 0, 9);
-    test("abcdefghij", 1, 10, "abcdefghij", 9, 1, -8);
-    test("abcdefghij", 1, 10, "abcdefghij", 9, 2, -8);
-    test("abcdefghij", 1, 10, "abcdefghij", 10, 0, 9);
-    test("abcdefghij", 1, 10, "abcdefghij", 10, 1, 9);
-    test("abcdefghij", 1, 10, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 0, 9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 1, 1);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 10, 1);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 19, 1);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 20, 1);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 21, 1);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 0, 9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 1, 8);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 9, 0);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 18, -9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 19, -10);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 20, -10);
+void test27() {
+  test("abcdefghij", 1, 9, "abcdefghij", 1, 9, 0);
+  test("abcdefghij", 1, 9, "abcdefghij", 1, 10, 0);
+  test("abcdefghij", 1, 9, "abcdefghij", 5, 0, 9);
+  test("abcdefghij", 1, 9, "abcdefghij", 5, 1, -4);
+  test("abcdefghij", 1, 9, "abcdefghij", 5, 2, -4);
+  test("abcdefghij", 1, 9, "abcdefghij", 5, 4, -4);
+  test("abcdefghij", 1, 9, "abcdefghij", 5, 5, -4);
+  test("abcdefghij", 1, 9, "abcdefghij", 5, 6, -4);
+  test("abcdefghij", 1, 9, "abcdefghij", 9, 0, 9);
+  test("abcdefghij", 1, 9, "abcdefghij", 9, 1, -8);
+  test("abcdefghij", 1, 9, "abcdefghij", 9, 2, -8);
+  test("abcdefghij", 1, 9, "abcdefghij", 10, 0, 9);
+  test("abcdefghij", 1, 9, "abcdefghij", 10, 1, 9);
+  test("abcdefghij", 1, 9, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 0, 9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 1, 1);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 10, 1);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 19, 1);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 20, 1);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 0, 21, 1);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 0, 9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 1, 8);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 9, 0);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 18, -9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 19, -10);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1, 20, -10);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 0, 9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 1, -9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 5, -9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 10, -9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 10, 11, -9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 0, 9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 1, -18);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 19, 2, -18);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 0, 9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 20, 1, 9);
+  test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 1, 10, "", 0, 0, 9);
+  test("abcdefghij", 1, 10, "", 0, 1, 9);
+  test("abcdefghij", 1, 10, "", 1, 0, 0);
+  test("abcdefghij", 1, 10, "abcde", 0, 0, 9);
+  test("abcdefghij", 1, 10, "abcde", 0, 1, 1);
+  test("abcdefghij", 1, 10, "abcde", 0, 2, 1);
+  test("abcdefghij", 1, 10, "abcde", 0, 4, 1);
+  test("abcdefghij", 1, 10, "abcde", 0, 5, 1);
+  test("abcdefghij", 1, 10, "abcde", 0, 6, 1);
+  test("abcdefghij", 1, 10, "abcde", 1, 0, 9);
+  test("abcdefghij", 1, 10, "abcde", 1, 1, 8);
+  test("abcdefghij", 1, 10, "abcde", 1, 2, 7);
+  test("abcdefghij", 1, 10, "abcde", 1, 3, 6);
+  test("abcdefghij", 1, 10, "abcde", 1, 4, 5);
+  test("abcdefghij", 1, 10, "abcde", 1, 5, 5);
+  test("abcdefghij", 1, 10, "abcde", 2, 0, 9);
+  test("abcdefghij", 1, 10, "abcde", 2, 1, -1);
+  test("abcdefghij", 1, 10, "abcde", 2, 2, -1);
+  test("abcdefghij", 1, 10, "abcde", 2, 3, -1);
+  test("abcdefghij", 1, 10, "abcde", 2, 4, -1);
+  test("abcdefghij", 1, 10, "abcde", 4, 0, 9);
+  test("abcdefghij", 1, 10, "abcde", 4, 1, -3);
+  test("abcdefghij", 1, 10, "abcde", 4, 2, -3);
+  test("abcdefghij", 1, 10, "abcde", 5, 0, 9);
+  test("abcdefghij", 1, 10, "abcde", 5, 1, 9);
+  test("abcdefghij", 1, 10, "abcde", 6, 0, 0);
+  test("abcdefghij", 1, 10, "abcdefghij", 0, 0, 9);
+  test("abcdefghij", 1, 10, "abcdefghij", 0, 1, 1);
+  test("abcdefghij", 1, 10, "abcdefghij", 0, 5, 1);
+  test("abcdefghij", 1, 10, "abcdefghij", 0, 9, 1);
+  test("abcdefghij", 1, 10, "abcdefghij", 0, 10, 1);
+  test("abcdefghij", 1, 10, "abcdefghij", 0, 11, 1);
+  test("abcdefghij", 1, 10, "abcdefghij", 1, 0, 9);
+  test("abcdefghij", 1, 10, "abcdefghij", 1, 1, 8);
+  test("abcdefghij", 1, 10, "abcdefghij", 1, 4, 5);
+  test("abcdefghij", 1, 10, "abcdefghij", 1, 8, 1);
+  test("abcdefghij", 1, 10, "abcdefghij", 1, 9, 0);
+  test("abcdefghij", 1, 10, "abcdefghij", 1, 10, 0);
+  test("abcdefghij", 1, 10, "abcdefghij", 5, 0, 9);
+  test("abcdefghij", 1, 10, "abcdefghij", 5, 1, -4);
+  test("abcdefghij", 1, 10, "abcdefghij", 5, 2, -4);
+  test("abcdefghij", 1, 10, "abcdefghij", 5, 4, -4);
+  test("abcdefghij", 1, 10, "abcdefghij", 5, 5, -4);
+  test("abcdefghij", 1, 10, "abcdefghij", 5, 6, -4);
+  test("abcdefghij", 1, 10, "abcdefghij", 9, 0, 9);
+  test("abcdefghij", 1, 10, "abcdefghij", 9, 1, -8);
+  test("abcdefghij", 1, 10, "abcdefghij", 9, 2, -8);
+  test("abcdefghij", 1, 10, "abcdefghij", 10, 0, 9);
+  test("abcdefghij", 1, 10, "abcdefghij", 10, 1, 9);
+  test("abcdefghij", 1, 10, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 0, 9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 1, 1);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 10, 1);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 19, 1);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 20, 1);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 0, 21, 1);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 0, 9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 1, 8);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 9, 0);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 18, -9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 19, -10);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1, 20, -10);
 }
 
-void test28()
-{
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 0, 9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 1, -9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 5, -9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 10, -9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 11, -9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 0, 9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 1, -18);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 2, -18);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 0, 9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 1, 9);
-    test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 5, 0, "", 0, 0, 0);
-    test("abcdefghij", 5, 0, "", 0, 1, 0);
-    test("abcdefghij", 5, 0, "", 1, 0, 0);
-    test("abcdefghij", 5, 0, "abcde", 0, 0, 0);
-    test("abcdefghij", 5, 0, "abcde", 0, 1, -1);
-    test("abcdefghij", 5, 0, "abcde", 0, 2, -2);
-    test("abcdefghij", 5, 0, "abcde", 0, 4, -4);
-    test("abcdefghij", 5, 0, "abcde", 0, 5, -5);
-    test("abcdefghij", 5, 0, "abcde", 0, 6, -5);
-    test("abcdefghij", 5, 0, "abcde", 1, 0, 0);
-    test("abcdefghij", 5, 0, "abcde", 1, 1, -1);
-    test("abcdefghij", 5, 0, "abcde", 1, 2, -2);
-    test("abcdefghij", 5, 0, "abcde", 1, 3, -3);
-    test("abcdefghij", 5, 0, "abcde", 1, 4, -4);
-    test("abcdefghij", 5, 0, "abcde", 1, 5, -4);
-    test("abcdefghij", 5, 0, "abcde", 2, 0, 0);
-    test("abcdefghij", 5, 0, "abcde", 2, 1, -1);
-    test("abcdefghij", 5, 0, "abcde", 2, 2, -2);
-    test("abcdefghij", 5, 0, "abcde", 2, 3, -3);
-    test("abcdefghij", 5, 0, "abcde", 2, 4, -3);
-    test("abcdefghij", 5, 0, "abcde", 4, 0, 0);
-    test("abcdefghij", 5, 0, "abcde", 4, 1, -1);
-    test("abcdefghij", 5, 0, "abcde", 4, 2, -1);
-    test("abcdefghij", 5, 0, "abcde", 5, 0, 0);
-    test("abcdefghij", 5, 0, "abcde", 5, 1, 0);
-    test("abcdefghij", 5, 0, "abcde", 6, 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghij", 0, 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghij", 0, 1, -1);
-    test("abcdefghij", 5, 0, "abcdefghij", 0, 5, -5);
-    test("abcdefghij", 5, 0, "abcdefghij", 0, 9, -9);
-    test("abcdefghij", 5, 0, "abcdefghij", 0, 10, -10);
-    test("abcdefghij", 5, 0, "abcdefghij", 0, 11, -10);
-    test("abcdefghij", 5, 0, "abcdefghij", 1, 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghij", 1, 1, -1);
-    test("abcdefghij", 5, 0, "abcdefghij", 1, 4, -4);
-    test("abcdefghij", 5, 0, "abcdefghij", 1, 8, -8);
-    test("abcdefghij", 5, 0, "abcdefghij", 1, 9, -9);
-    test("abcdefghij", 5, 0, "abcdefghij", 1, 10, -9);
-    test("abcdefghij", 5, 0, "abcdefghij", 5, 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghij", 5, 1, -1);
-    test("abcdefghij", 5, 0, "abcdefghij", 5, 2, -2);
-    test("abcdefghij", 5, 0, "abcdefghij", 5, 4, -4);
-    test("abcdefghij", 5, 0, "abcdefghij", 5, 5, -5);
-    test("abcdefghij", 5, 0, "abcdefghij", 5, 6, -5);
-    test("abcdefghij", 5, 0, "abcdefghij", 9, 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghij", 9, 1, -1);
-    test("abcdefghij", 5, 0, "abcdefghij", 9, 2, -1);
-    test("abcdefghij", 5, 0, "abcdefghij", 10, 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghij", 10, 1, 0);
-    test("abcdefghij", 5, 0, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 5, 1, "", 0, 0, 1);
-    test("abcdefghij", 5, 1, "", 0, 1, 1);
-    test("abcdefghij", 5, 1, "", 1, 0, 0);
-    test("abcdefghij", 5, 1, "abcde", 0, 0, 1);
-    test("abcdefghij", 5, 1, "abcde", 0, 1, 5);
-    test("abcdefghij", 5, 1, "abcde", 0, 2, 5);
-    test("abcdefghij", 5, 1, "abcde", 0, 4, 5);
-    test("abcdefghij", 5, 1, "abcde", 0, 5, 5);
-    test("abcdefghij", 5, 1, "abcde", 0, 6, 5);
-    test("abcdefghij", 5, 1, "abcde", 1, 0, 1);
-    test("abcdefghij", 5, 1, "abcde", 1, 1, 4);
-    test("abcdefghij", 5, 1, "abcde", 1, 2, 4);
-    test("abcdefghij", 5, 1, "abcde", 1, 3, 4);
-    test("abcdefghij", 5, 1, "abcde", 1, 4, 4);
+void test28() {
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 0, 9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 1, -9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 5, -9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 10, -9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 10, 11, -9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 0, 9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 1, -18);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 19, 2, -18);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 0, 9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 20, 1, 9);
+  test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 5, 0, "", 0, 0, 0);
+  test("abcdefghij", 5, 0, "", 0, 1, 0);
+  test("abcdefghij", 5, 0, "", 1, 0, 0);
+  test("abcdefghij", 5, 0, "abcde", 0, 0, 0);
+  test("abcdefghij", 5, 0, "abcde", 0, 1, -1);
+  test("abcdefghij", 5, 0, "abcde", 0, 2, -2);
+  test("abcdefghij", 5, 0, "abcde", 0, 4, -4);
+  test("abcdefghij", 5, 0, "abcde", 0, 5, -5);
+  test("abcdefghij", 5, 0, "abcde", 0, 6, -5);
+  test("abcdefghij", 5, 0, "abcde", 1, 0, 0);
+  test("abcdefghij", 5, 0, "abcde", 1, 1, -1);
+  test("abcdefghij", 5, 0, "abcde", 1, 2, -2);
+  test("abcdefghij", 5, 0, "abcde", 1, 3, -3);
+  test("abcdefghij", 5, 0, "abcde", 1, 4, -4);
+  test("abcdefghij", 5, 0, "abcde", 1, 5, -4);
+  test("abcdefghij", 5, 0, "abcde", 2, 0, 0);
+  test("abcdefghij", 5, 0, "abcde", 2, 1, -1);
+  test("abcdefghij", 5, 0, "abcde", 2, 2, -2);
+  test("abcdefghij", 5, 0, "abcde", 2, 3, -3);
+  test("abcdefghij", 5, 0, "abcde", 2, 4, -3);
+  test("abcdefghij", 5, 0, "abcde", 4, 0, 0);
+  test("abcdefghij", 5, 0, "abcde", 4, 1, -1);
+  test("abcdefghij", 5, 0, "abcde", 4, 2, -1);
+  test("abcdefghij", 5, 0, "abcde", 5, 0, 0);
+  test("abcdefghij", 5, 0, "abcde", 5, 1, 0);
+  test("abcdefghij", 5, 0, "abcde", 6, 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghij", 0, 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghij", 0, 1, -1);
+  test("abcdefghij", 5, 0, "abcdefghij", 0, 5, -5);
+  test("abcdefghij", 5, 0, "abcdefghij", 0, 9, -9);
+  test("abcdefghij", 5, 0, "abcdefghij", 0, 10, -10);
+  test("abcdefghij", 5, 0, "abcdefghij", 0, 11, -10);
+  test("abcdefghij", 5, 0, "abcdefghij", 1, 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghij", 1, 1, -1);
+  test("abcdefghij", 5, 0, "abcdefghij", 1, 4, -4);
+  test("abcdefghij", 5, 0, "abcdefghij", 1, 8, -8);
+  test("abcdefghij", 5, 0, "abcdefghij", 1, 9, -9);
+  test("abcdefghij", 5, 0, "abcdefghij", 1, 10, -9);
+  test("abcdefghij", 5, 0, "abcdefghij", 5, 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghij", 5, 1, -1);
+  test("abcdefghij", 5, 0, "abcdefghij", 5, 2, -2);
+  test("abcdefghij", 5, 0, "abcdefghij", 5, 4, -4);
+  test("abcdefghij", 5, 0, "abcdefghij", 5, 5, -5);
+  test("abcdefghij", 5, 0, "abcdefghij", 5, 6, -5);
+  test("abcdefghij", 5, 0, "abcdefghij", 9, 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghij", 9, 1, -1);
+  test("abcdefghij", 5, 0, "abcdefghij", 9, 2, -1);
+  test("abcdefghij", 5, 0, "abcdefghij", 10, 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghij", 10, 1, 0);
+  test("abcdefghij", 5, 0, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 5, 1, "", 0, 0, 1);
+  test("abcdefghij", 5, 1, "", 0, 1, 1);
+  test("abcdefghij", 5, 1, "", 1, 0, 0);
+  test("abcdefghij", 5, 1, "abcde", 0, 0, 1);
+  test("abcdefghij", 5, 1, "abcde", 0, 1, 5);
+  test("abcdefghij", 5, 1, "abcde", 0, 2, 5);
+  test("abcdefghij", 5, 1, "abcde", 0, 4, 5);
+  test("abcdefghij", 5, 1, "abcde", 0, 5, 5);
+  test("abcdefghij", 5, 1, "abcde", 0, 6, 5);
+  test("abcdefghij", 5, 1, "abcde", 1, 0, 1);
+  test("abcdefghij", 5, 1, "abcde", 1, 1, 4);
+  test("abcdefghij", 5, 1, "abcde", 1, 2, 4);
+  test("abcdefghij", 5, 1, "abcde", 1, 3, 4);
+  test("abcdefghij", 5, 1, "abcde", 1, 4, 4);
 }
 
-void test29()
-{
-    test("abcdefghij", 5, 1, "abcde", 1, 5, 4);
-    test("abcdefghij", 5, 1, "abcde", 2, 0, 1);
-    test("abcdefghij", 5, 1, "abcde", 2, 1, 3);
-    test("abcdefghij", 5, 1, "abcde", 2, 2, 3);
-    test("abcdefghij", 5, 1, "abcde", 2, 3, 3);
-    test("abcdefghij", 5, 1, "abcde", 2, 4, 3);
-    test("abcdefghij", 5, 1, "abcde", 4, 0, 1);
-    test("abcdefghij", 5, 1, "abcde", 4, 1, 1);
-    test("abcdefghij", 5, 1, "abcde", 4, 2, 1);
-    test("abcdefghij", 5, 1, "abcde", 5, 0, 1);
-    test("abcdefghij", 5, 1, "abcde", 5, 1, 1);
-    test("abcdefghij", 5, 1, "abcde", 6, 0, 0);
-    test("abcdefghij", 5, 1, "abcdefghij", 0, 0, 1);
-    test("abcdefghij", 5, 1, "abcdefghij", 0, 1, 5);
-    test("abcdefghij", 5, 1, "abcdefghij", 0, 5, 5);
-    test("abcdefghij", 5, 1, "abcdefghij", 0, 9, 5);
-    test("abcdefghij", 5, 1, "abcdefghij", 0, 10, 5);
-    test("abcdefghij", 5, 1, "abcdefghij", 0, 11, 5);
-    test("abcdefghij", 5, 1, "abcdefghij", 1, 0, 1);
-    test("abcdefghij", 5, 1, "abcdefghij", 1, 1, 4);
-    test("abcdefghij", 5, 1, "abcdefghij", 1, 4, 4);
-    test("abcdefghij", 5, 1, "abcdefghij", 1, 8, 4);
-    test("abcdefghij", 5, 1, "abcdefghij", 1, 9, 4);
-    test("abcdefghij", 5, 1, "abcdefghij", 1, 10, 4);
-    test("abcdefghij", 5, 1, "abcdefghij", 5, 0, 1);
-    test("abcdefghij", 5, 1, "abcdefghij", 5, 1, 0);
-    test("abcdefghij", 5, 1, "abcdefghij", 5, 2, -1);
-    test("abcdefghij", 5, 1, "abcdefghij", 5, 4, -3);
-    test("abcdefghij", 5, 1, "abcdefghij", 5, 5, -4);
-    test("abcdefghij", 5, 1, "abcdefghij", 5, 6, -4);
-    test("abcdefghij", 5, 1, "abcdefghij", 9, 0, 1);
-    test("abcdefghij", 5, 1, "abcdefghij", 9, 1, -4);
-    test("abcdefghij", 5, 1, "abcdefghij", 9, 2, -4);
-    test("abcdefghij", 5, 1, "abcdefghij", 10, 0, 1);
-    test("abcdefghij", 5, 1, "abcdefghij", 10, 1, 1);
-    test("abcdefghij", 5, 1, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 1, 5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 10, 5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 19, 5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 20, 5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 21, 5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 1, 4);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 9, 4);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 18, 4);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 19, 4);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 20, 4);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 1, -5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 9, -5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 10, -5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 11, -5);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 1, -14);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 2, -14);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 0, 1);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 5, 2, "", 0, 0, 2);
-    test("abcdefghij", 5, 2, "", 0, 1, 2);
-    test("abcdefghij", 5, 2, "", 1, 0, 0);
-    test("abcdefghij", 5, 2, "abcde", 0, 0, 2);
-    test("abcdefghij", 5, 2, "abcde", 0, 1, 5);
-    test("abcdefghij", 5, 2, "abcde", 0, 2, 5);
-    test("abcdefghij", 5, 2, "abcde", 0, 4, 5);
-    test("abcdefghij", 5, 2, "abcde", 0, 5, 5);
-    test("abcdefghij", 5, 2, "abcde", 0, 6, 5);
-    test("abcdefghij", 5, 2, "abcde", 1, 0, 2);
-    test("abcdefghij", 5, 2, "abcde", 1, 1, 4);
-    test("abcdefghij", 5, 2, "abcde", 1, 2, 4);
-    test("abcdefghij", 5, 2, "abcde", 1, 3, 4);
-    test("abcdefghij", 5, 2, "abcde", 1, 4, 4);
-    test("abcdefghij", 5, 2, "abcde", 1, 5, 4);
-    test("abcdefghij", 5, 2, "abcde", 2, 0, 2);
-    test("abcdefghij", 5, 2, "abcde", 2, 1, 3);
-    test("abcdefghij", 5, 2, "abcde", 2, 2, 3);
-    test("abcdefghij", 5, 2, "abcde", 2, 3, 3);
-    test("abcdefghij", 5, 2, "abcde", 2, 4, 3);
-    test("abcdefghij", 5, 2, "abcde", 4, 0, 2);
-    test("abcdefghij", 5, 2, "abcde", 4, 1, 1);
-    test("abcdefghij", 5, 2, "abcde", 4, 2, 1);
-    test("abcdefghij", 5, 2, "abcde", 5, 0, 2);
-    test("abcdefghij", 5, 2, "abcde", 5, 1, 2);
-    test("abcdefghij", 5, 2, "abcde", 6, 0, 0);
-    test("abcdefghij", 5, 2, "abcdefghij", 0, 0, 2);
-    test("abcdefghij", 5, 2, "abcdefghij", 0, 1, 5);
-    test("abcdefghij", 5, 2, "abcdefghij", 0, 5, 5);
-    test("abcdefghij", 5, 2, "abcdefghij", 0, 9, 5);
-    test("abcdefghij", 5, 2, "abcdefghij", 0, 10, 5);
-    test("abcdefghij", 5, 2, "abcdefghij", 0, 11, 5);
-    test("abcdefghij", 5, 2, "abcdefghij", 1, 0, 2);
-    test("abcdefghij", 5, 2, "abcdefghij", 1, 1, 4);
-    test("abcdefghij", 5, 2, "abcdefghij", 1, 4, 4);
-    test("abcdefghij", 5, 2, "abcdefghij", 1, 8, 4);
-    test("abcdefghij", 5, 2, "abcdefghij", 1, 9, 4);
-    test("abcdefghij", 5, 2, "abcdefghij", 1, 10, 4);
-    test("abcdefghij", 5, 2, "abcdefghij", 5, 0, 2);
-    test("abcdefghij", 5, 2, "abcdefghij", 5, 1, 1);
+void test29() {
+  test("abcdefghij", 5, 1, "abcde", 1, 5, 4);
+  test("abcdefghij", 5, 1, "abcde", 2, 0, 1);
+  test("abcdefghij", 5, 1, "abcde", 2, 1, 3);
+  test("abcdefghij", 5, 1, "abcde", 2, 2, 3);
+  test("abcdefghij", 5, 1, "abcde", 2, 3, 3);
+  test("abcdefghij", 5, 1, "abcde", 2, 4, 3);
+  test("abcdefghij", 5, 1, "abcde", 4, 0, 1);
+  test("abcdefghij", 5, 1, "abcde", 4, 1, 1);
+  test("abcdefghij", 5, 1, "abcde", 4, 2, 1);
+  test("abcdefghij", 5, 1, "abcde", 5, 0, 1);
+  test("abcdefghij", 5, 1, "abcde", 5, 1, 1);
+  test("abcdefghij", 5, 1, "abcde", 6, 0, 0);
+  test("abcdefghij", 5, 1, "abcdefghij", 0, 0, 1);
+  test("abcdefghij", 5, 1, "abcdefghij", 0, 1, 5);
+  test("abcdefghij", 5, 1, "abcdefghij", 0, 5, 5);
+  test("abcdefghij", 5, 1, "abcdefghij", 0, 9, 5);
+  test("abcdefghij", 5, 1, "abcdefghij", 0, 10, 5);
+  test("abcdefghij", 5, 1, "abcdefghij", 0, 11, 5);
+  test("abcdefghij", 5, 1, "abcdefghij", 1, 0, 1);
+  test("abcdefghij", 5, 1, "abcdefghij", 1, 1, 4);
+  test("abcdefghij", 5, 1, "abcdefghij", 1, 4, 4);
+  test("abcdefghij", 5, 1, "abcdefghij", 1, 8, 4);
+  test("abcdefghij", 5, 1, "abcdefghij", 1, 9, 4);
+  test("abcdefghij", 5, 1, "abcdefghij", 1, 10, 4);
+  test("abcdefghij", 5, 1, "abcdefghij", 5, 0, 1);
+  test("abcdefghij", 5, 1, "abcdefghij", 5, 1, 0);
+  test("abcdefghij", 5, 1, "abcdefghij", 5, 2, -1);
+  test("abcdefghij", 5, 1, "abcdefghij", 5, 4, -3);
+  test("abcdefghij", 5, 1, "abcdefghij", 5, 5, -4);
+  test("abcdefghij", 5, 1, "abcdefghij", 5, 6, -4);
+  test("abcdefghij", 5, 1, "abcdefghij", 9, 0, 1);
+  test("abcdefghij", 5, 1, "abcdefghij", 9, 1, -4);
+  test("abcdefghij", 5, 1, "abcdefghij", 9, 2, -4);
+  test("abcdefghij", 5, 1, "abcdefghij", 10, 0, 1);
+  test("abcdefghij", 5, 1, "abcdefghij", 10, 1, 1);
+  test("abcdefghij", 5, 1, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 1, 5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 10, 5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 19, 5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 20, 5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 0, 21, 5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 1, 4);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 9, 4);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 18, 4);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 19, 4);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 1, 20, 4);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 1, -5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 9, -5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 10, -5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 10, 11, -5);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 1, -14);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 19, 2, -14);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 0, 1);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 5, 2, "", 0, 0, 2);
+  test("abcdefghij", 5, 2, "", 0, 1, 2);
+  test("abcdefghij", 5, 2, "", 1, 0, 0);
+  test("abcdefghij", 5, 2, "abcde", 0, 0, 2);
+  test("abcdefghij", 5, 2, "abcde", 0, 1, 5);
+  test("abcdefghij", 5, 2, "abcde", 0, 2, 5);
+  test("abcdefghij", 5, 2, "abcde", 0, 4, 5);
+  test("abcdefghij", 5, 2, "abcde", 0, 5, 5);
+  test("abcdefghij", 5, 2, "abcde", 0, 6, 5);
+  test("abcdefghij", 5, 2, "abcde", 1, 0, 2);
+  test("abcdefghij", 5, 2, "abcde", 1, 1, 4);
+  test("abcdefghij", 5, 2, "abcde", 1, 2, 4);
+  test("abcdefghij", 5, 2, "abcde", 1, 3, 4);
+  test("abcdefghij", 5, 2, "abcde", 1, 4, 4);
+  test("abcdefghij", 5, 2, "abcde", 1, 5, 4);
+  test("abcdefghij", 5, 2, "abcde", 2, 0, 2);
+  test("abcdefghij", 5, 2, "abcde", 2, 1, 3);
+  test("abcdefghij", 5, 2, "abcde", 2, 2, 3);
+  test("abcdefghij", 5, 2, "abcde", 2, 3, 3);
+  test("abcdefghij", 5, 2, "abcde", 2, 4, 3);
+  test("abcdefghij", 5, 2, "abcde", 4, 0, 2);
+  test("abcdefghij", 5, 2, "abcde", 4, 1, 1);
+  test("abcdefghij", 5, 2, "abcde", 4, 2, 1);
+  test("abcdefghij", 5, 2, "abcde", 5, 0, 2);
+  test("abcdefghij", 5, 2, "abcde", 5, 1, 2);
+  test("abcdefghij", 5, 2, "abcde", 6, 0, 0);
+  test("abcdefghij", 5, 2, "abcdefghij", 0, 0, 2);
+  test("abcdefghij", 5, 2, "abcdefghij", 0, 1, 5);
+  test("abcdefghij", 5, 2, "abcdefghij", 0, 5, 5);
+  test("abcdefghij", 5, 2, "abcdefghij", 0, 9, 5);
+  test("abcdefghij", 5, 2, "abcdefghij", 0, 10, 5);
+  test("abcdefghij", 5, 2, "abcdefghij", 0, 11, 5);
+  test("abcdefghij", 5, 2, "abcdefghij", 1, 0, 2);
+  test("abcdefghij", 5, 2, "abcdefghij", 1, 1, 4);
+  test("abcdefghij", 5, 2, "abcdefghij", 1, 4, 4);
+  test("abcdefghij", 5, 2, "abcdefghij", 1, 8, 4);
+  test("abcdefghij", 5, 2, "abcdefghij", 1, 9, 4);
+  test("abcdefghij", 5, 2, "abcdefghij", 1, 10, 4);
+  test("abcdefghij", 5, 2, "abcdefghij", 5, 0, 2);
+  test("abcdefghij", 5, 2, "abcdefghij", 5, 1, 1);
 }
 
-void test30()
-{
-    test("abcdefghij", 5, 2, "abcdefghij", 5, 2, 0);
-    test("abcdefghij", 5, 2, "abcdefghij", 5, 4, -2);
-    test("abcdefghij", 5, 2, "abcdefghij", 5, 5, -3);
-    test("abcdefghij", 5, 2, "abcdefghij", 5, 6, -3);
-    test("abcdefghij", 5, 2, "abcdefghij", 9, 0, 2);
-    test("abcdefghij", 5, 2, "abcdefghij", 9, 1, -4);
-    test("abcdefghij", 5, 2, "abcdefghij", 9, 2, -4);
-    test("abcdefghij", 5, 2, "abcdefghij", 10, 0, 2);
-    test("abcdefghij", 5, 2, "abcdefghij", 10, 1, 2);
-    test("abcdefghij", 5, 2, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 0, 2);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 1, 5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 10, 5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 19, 5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 20, 5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 21, 5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 0, 2);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 1, 4);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 9, 4);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 18, 4);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 19, 4);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 20, 4);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 0, 2);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 1, -5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 9, -5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 10, -5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 11, -5);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 0, 2);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 1, -14);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 2, -14);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 0, 2);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 1, 2);
-    test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 5, 4, "", 0, 0, 4);
-    test("abcdefghij", 5, 4, "", 0, 1, 4);
-    test("abcdefghij", 5, 4, "", 1, 0, 0);
-    test("abcdefghij", 5, 4, "abcde", 0, 0, 4);
-    test("abcdefghij", 5, 4, "abcde", 0, 1, 5);
-    test("abcdefghij", 5, 4, "abcde", 0, 2, 5);
-    test("abcdefghij", 5, 4, "abcde", 0, 4, 5);
-    test("abcdefghij", 5, 4, "abcde", 0, 5, 5);
-    test("abcdefghij", 5, 4, "abcde", 0, 6, 5);
-    test("abcdefghij", 5, 4, "abcde", 1, 0, 4);
-    test("abcdefghij", 5, 4, "abcde", 1, 1, 4);
-    test("abcdefghij", 5, 4, "abcde", 1, 2, 4);
-    test("abcdefghij", 5, 4, "abcde", 1, 3, 4);
-    test("abcdefghij", 5, 4, "abcde", 1, 4, 4);
-    test("abcdefghij", 5, 4, "abcde", 1, 5, 4);
-    test("abcdefghij", 5, 4, "abcde", 2, 0, 4);
-    test("abcdefghij", 5, 4, "abcde", 2, 1, 3);
-    test("abcdefghij", 5, 4, "abcde", 2, 2, 3);
-    test("abcdefghij", 5, 4, "abcde", 2, 3, 3);
-    test("abcdefghij", 5, 4, "abcde", 2, 4, 3);
-    test("abcdefghij", 5, 4, "abcde", 4, 0, 4);
-    test("abcdefghij", 5, 4, "abcde", 4, 1, 1);
-    test("abcdefghij", 5, 4, "abcde", 4, 2, 1);
-    test("abcdefghij", 5, 4, "abcde", 5, 0, 4);
-    test("abcdefghij", 5, 4, "abcde", 5, 1, 4);
-    test("abcdefghij", 5, 4, "abcde", 6, 0, 0);
-    test("abcdefghij", 5, 4, "abcdefghij", 0, 0, 4);
-    test("abcdefghij", 5, 4, "abcdefghij", 0, 1, 5);
-    test("abcdefghij", 5, 4, "abcdefghij", 0, 5, 5);
-    test("abcdefghij", 5, 4, "abcdefghij", 0, 9, 5);
-    test("abcdefghij", 5, 4, "abcdefghij", 0, 10, 5);
-    test("abcdefghij", 5, 4, "abcdefghij", 0, 11, 5);
-    test("abcdefghij", 5, 4, "abcdefghij", 1, 0, 4);
-    test("abcdefghij", 5, 4, "abcdefghij", 1, 1, 4);
-    test("abcdefghij", 5, 4, "abcdefghij", 1, 4, 4);
-    test("abcdefghij", 5, 4, "abcdefghij", 1, 8, 4);
-    test("abcdefghij", 5, 4, "abcdefghij", 1, 9, 4);
-    test("abcdefghij", 5, 4, "abcdefghij", 1, 10, 4);
-    test("abcdefghij", 5, 4, "abcdefghij", 5, 0, 4);
-    test("abcdefghij", 5, 4, "abcdefghij", 5, 1, 3);
-    test("abcdefghij", 5, 4, "abcdefghij", 5, 2, 2);
-    test("abcdefghij", 5, 4, "abcdefghij", 5, 4, 0);
-    test("abcdefghij", 5, 4, "abcdefghij", 5, 5, -1);
-    test("abcdefghij", 5, 4, "abcdefghij", 5, 6, -1);
-    test("abcdefghij", 5, 4, "abcdefghij", 9, 0, 4);
-    test("abcdefghij", 5, 4, "abcdefghij", 9, 1, -4);
-    test("abcdefghij", 5, 4, "abcdefghij", 9, 2, -4);
-    test("abcdefghij", 5, 4, "abcdefghij", 10, 0, 4);
-    test("abcdefghij", 5, 4, "abcdefghij", 10, 1, 4);
-    test("abcdefghij", 5, 4, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 0, 4);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 1, 5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 10, 5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 19, 5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 20, 5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 21, 5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 0, 4);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 1, 4);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 9, 4);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 18, 4);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 19, 4);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 20, 4);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 0, 4);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 1, -5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 9, -5);
+void test30() {
+  test("abcdefghij", 5, 2, "abcdefghij", 5, 2, 0);
+  test("abcdefghij", 5, 2, "abcdefghij", 5, 4, -2);
+  test("abcdefghij", 5, 2, "abcdefghij", 5, 5, -3);
+  test("abcdefghij", 5, 2, "abcdefghij", 5, 6, -3);
+  test("abcdefghij", 5, 2, "abcdefghij", 9, 0, 2);
+  test("abcdefghij", 5, 2, "abcdefghij", 9, 1, -4);
+  test("abcdefghij", 5, 2, "abcdefghij", 9, 2, -4);
+  test("abcdefghij", 5, 2, "abcdefghij", 10, 0, 2);
+  test("abcdefghij", 5, 2, "abcdefghij", 10, 1, 2);
+  test("abcdefghij", 5, 2, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 0, 2);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 1, 5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 10, 5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 19, 5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 20, 5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 0, 21, 5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 0, 2);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 1, 4);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 9, 4);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 18, 4);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 19, 4);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 1, 20, 4);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 0, 2);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 1, -5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 9, -5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 10, -5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 10, 11, -5);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 0, 2);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 1, -14);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 19, 2, -14);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 0, 2);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 20, 1, 2);
+  test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 5, 4, "", 0, 0, 4);
+  test("abcdefghij", 5, 4, "", 0, 1, 4);
+  test("abcdefghij", 5, 4, "", 1, 0, 0);
+  test("abcdefghij", 5, 4, "abcde", 0, 0, 4);
+  test("abcdefghij", 5, 4, "abcde", 0, 1, 5);
+  test("abcdefghij", 5, 4, "abcde", 0, 2, 5);
+  test("abcdefghij", 5, 4, "abcde", 0, 4, 5);
+  test("abcdefghij", 5, 4, "abcde", 0, 5, 5);
+  test("abcdefghij", 5, 4, "abcde", 0, 6, 5);
+  test("abcdefghij", 5, 4, "abcde", 1, 0, 4);
+  test("abcdefghij", 5, 4, "abcde", 1, 1, 4);
+  test("abcdefghij", 5, 4, "abcde", 1, 2, 4);
+  test("abcdefghij", 5, 4, "abcde", 1, 3, 4);
+  test("abcdefghij", 5, 4, "abcde", 1, 4, 4);
+  test("abcdefghij", 5, 4, "abcde", 1, 5, 4);
+  test("abcdefghij", 5, 4, "abcde", 2, 0, 4);
+  test("abcdefghij", 5, 4, "abcde", 2, 1, 3);
+  test("abcdefghij", 5, 4, "abcde", 2, 2, 3);
+  test("abcdefghij", 5, 4, "abcde", 2, 3, 3);
+  test("abcdefghij", 5, 4, "abcde", 2, 4, 3);
+  test("abcdefghij", 5, 4, "abcde", 4, 0, 4);
+  test("abcdefghij", 5, 4, "abcde", 4, 1, 1);
+  test("abcdefghij", 5, 4, "abcde", 4, 2, 1);
+  test("abcdefghij", 5, 4, "abcde", 5, 0, 4);
+  test("abcdefghij", 5, 4, "abcde", 5, 1, 4);
+  test("abcdefghij", 5, 4, "abcde", 6, 0, 0);
+  test("abcdefghij", 5, 4, "abcdefghij", 0, 0, 4);
+  test("abcdefghij", 5, 4, "abcdefghij", 0, 1, 5);
+  test("abcdefghij", 5, 4, "abcdefghij", 0, 5, 5);
+  test("abcdefghij", 5, 4, "abcdefghij", 0, 9, 5);
+  test("abcdefghij", 5, 4, "abcdefghij", 0, 10, 5);
+  test("abcdefghij", 5, 4, "abcdefghij", 0, 11, 5);
+  test("abcdefghij", 5, 4, "abcdefghij", 1, 0, 4);
+  test("abcdefghij", 5, 4, "abcdefghij", 1, 1, 4);
+  test("abcdefghij", 5, 4, "abcdefghij", 1, 4, 4);
+  test("abcdefghij", 5, 4, "abcdefghij", 1, 8, 4);
+  test("abcdefghij", 5, 4, "abcdefghij", 1, 9, 4);
+  test("abcdefghij", 5, 4, "abcdefghij", 1, 10, 4);
+  test("abcdefghij", 5, 4, "abcdefghij", 5, 0, 4);
+  test("abcdefghij", 5, 4, "abcdefghij", 5, 1, 3);
+  test("abcdefghij", 5, 4, "abcdefghij", 5, 2, 2);
+  test("abcdefghij", 5, 4, "abcdefghij", 5, 4, 0);
+  test("abcdefghij", 5, 4, "abcdefghij", 5, 5, -1);
+  test("abcdefghij", 5, 4, "abcdefghij", 5, 6, -1);
+  test("abcdefghij", 5, 4, "abcdefghij", 9, 0, 4);
+  test("abcdefghij", 5, 4, "abcdefghij", 9, 1, -4);
+  test("abcdefghij", 5, 4, "abcdefghij", 9, 2, -4);
+  test("abcdefghij", 5, 4, "abcdefghij", 10, 0, 4);
+  test("abcdefghij", 5, 4, "abcdefghij", 10, 1, 4);
+  test("abcdefghij", 5, 4, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 0, 4);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 1, 5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 10, 5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 19, 5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 20, 5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 0, 21, 5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 0, 4);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 1, 4);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 9, 4);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 18, 4);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 19, 4);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 1, 20, 4);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 0, 4);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 1, -5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 9, -5);
 }
 
-void test31()
-{
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 10, -5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 11, -5);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 0, 4);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 1, -14);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 2, -14);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 0, 4);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 1, 4);
-    test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 5, 5, "", 0, 0, 5);
-    test("abcdefghij", 5, 5, "", 0, 1, 5);
-    test("abcdefghij", 5, 5, "", 1, 0, 0);
-    test("abcdefghij", 5, 5, "abcde", 0, 0, 5);
-    test("abcdefghij", 5, 5, "abcde", 0, 1, 5);
-    test("abcdefghij", 5, 5, "abcde", 0, 2, 5);
-    test("abcdefghij", 5, 5, "abcde", 0, 4, 5);
-    test("abcdefghij", 5, 5, "abcde", 0, 5, 5);
-    test("abcdefghij", 5, 5, "abcde", 0, 6, 5);
-    test("abcdefghij", 5, 5, "abcde", 1, 0, 5);
-    test("abcdefghij", 5, 5, "abcde", 1, 1, 4);
-    test("abcdefghij", 5, 5, "abcde", 1, 2, 4);
-    test("abcdefghij", 5, 5, "abcde", 1, 3, 4);
-    test("abcdefghij", 5, 5, "abcde", 1, 4, 4);
-    test("abcdefghij", 5, 5, "abcde", 1, 5, 4);
-    test("abcdefghij", 5, 5, "abcde", 2, 0, 5);
-    test("abcdefghij", 5, 5, "abcde", 2, 1, 3);
-    test("abcdefghij", 5, 5, "abcde", 2, 2, 3);
-    test("abcdefghij", 5, 5, "abcde", 2, 3, 3);
-    test("abcdefghij", 5, 5, "abcde", 2, 4, 3);
-    test("abcdefghij", 5, 5, "abcde", 4, 0, 5);
-    test("abcdefghij", 5, 5, "abcde", 4, 1, 1);
-    test("abcdefghij", 5, 5, "abcde", 4, 2, 1);
-    test("abcdefghij", 5, 5, "abcde", 5, 0, 5);
-    test("abcdefghij", 5, 5, "abcde", 5, 1, 5);
-    test("abcdefghij", 5, 5, "abcde", 6, 0, 0);
-    test("abcdefghij", 5, 5, "abcdefghij", 0, 0, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 0, 1, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 0, 5, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 0, 9, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 0, 10, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 0, 11, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 1, 0, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 1, 1, 4);
-    test("abcdefghij", 5, 5, "abcdefghij", 1, 4, 4);
-    test("abcdefghij", 5, 5, "abcdefghij", 1, 8, 4);
-    test("abcdefghij", 5, 5, "abcdefghij", 1, 9, 4);
-    test("abcdefghij", 5, 5, "abcdefghij", 1, 10, 4);
-    test("abcdefghij", 5, 5, "abcdefghij", 5, 0, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 5, 1, 4);
-    test("abcdefghij", 5, 5, "abcdefghij", 5, 2, 3);
-    test("abcdefghij", 5, 5, "abcdefghij", 5, 4, 1);
-    test("abcdefghij", 5, 5, "abcdefghij", 5, 5, 0);
-    test("abcdefghij", 5, 5, "abcdefghij", 5, 6, 0);
-    test("abcdefghij", 5, 5, "abcdefghij", 9, 0, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 9, 1, -4);
-    test("abcdefghij", 5, 5, "abcdefghij", 9, 2, -4);
-    test("abcdefghij", 5, 5, "abcdefghij", 10, 0, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 10, 1, 5);
-    test("abcdefghij", 5, 5, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 0, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 1, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 10, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 19, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 20, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 21, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 0, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 1, 4);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 9, 4);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 18, 4);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 19, 4);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 20, 4);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 0, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 1, -5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 9, -5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 10, -5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 11, -5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 0, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 1, -14);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 2, -14);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 0, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 1, 5);
-    test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 5, 6, "", 0, 0, 5);
-    test("abcdefghij", 5, 6, "", 0, 1, 5);
-    test("abcdefghij", 5, 6, "", 1, 0, 0);
-    test("abcdefghij", 5, 6, "abcde", 0, 0, 5);
-    test("abcdefghij", 5, 6, "abcde", 0, 1, 5);
-    test("abcdefghij", 5, 6, "abcde", 0, 2, 5);
-    test("abcdefghij", 5, 6, "abcde", 0, 4, 5);
-    test("abcdefghij", 5, 6, "abcde", 0, 5, 5);
-    test("abcdefghij", 5, 6, "abcde", 0, 6, 5);
-    test("abcdefghij", 5, 6, "abcde", 1, 0, 5);
-    test("abcdefghij", 5, 6, "abcde", 1, 1, 4);
-    test("abcdefghij", 5, 6, "abcde", 1, 2, 4);
-    test("abcdefghij", 5, 6, "abcde", 1, 3, 4);
-    test("abcdefghij", 5, 6, "abcde", 1, 4, 4);
-    test("abcdefghij", 5, 6, "abcde", 1, 5, 4);
-    test("abcdefghij", 5, 6, "abcde", 2, 0, 5);
-    test("abcdefghij", 5, 6, "abcde", 2, 1, 3);
-    test("abcdefghij", 5, 6, "abcde", 2, 2, 3);
+void test31() {
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 10, -5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 10, 11, -5);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 0, 4);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 1, -14);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 19, 2, -14);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 0, 4);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 20, 1, 4);
+  test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 5, 5, "", 0, 0, 5);
+  test("abcdefghij", 5, 5, "", 0, 1, 5);
+  test("abcdefghij", 5, 5, "", 1, 0, 0);
+  test("abcdefghij", 5, 5, "abcde", 0, 0, 5);
+  test("abcdefghij", 5, 5, "abcde", 0, 1, 5);
+  test("abcdefghij", 5, 5, "abcde", 0, 2, 5);
+  test("abcdefghij", 5, 5, "abcde", 0, 4, 5);
+  test("abcdefghij", 5, 5, "abcde", 0, 5, 5);
+  test("abcdefghij", 5, 5, "abcde", 0, 6, 5);
+  test("abcdefghij", 5, 5, "abcde", 1, 0, 5);
+  test("abcdefghij", 5, 5, "abcde", 1, 1, 4);
+  test("abcdefghij", 5, 5, "abcde", 1, 2, 4);
+  test("abcdefghij", 5, 5, "abcde", 1, 3, 4);
+  test("abcdefghij", 5, 5, "abcde", 1, 4, 4);
+  test("abcdefghij", 5, 5, "abcde", 1, 5, 4);
+  test("abcdefghij", 5, 5, "abcde", 2, 0, 5);
+  test("abcdefghij", 5, 5, "abcde", 2, 1, 3);
+  test("abcdefghij", 5, 5, "abcde", 2, 2, 3);
+  test("abcdefghij", 5, 5, "abcde", 2, 3, 3);
+  test("abcdefghij", 5, 5, "abcde", 2, 4, 3);
+  test("abcdefghij", 5, 5, "abcde", 4, 0, 5);
+  test("abcdefghij", 5, 5, "abcde", 4, 1, 1);
+  test("abcdefghij", 5, 5, "abcde", 4, 2, 1);
+  test("abcdefghij", 5, 5, "abcde", 5, 0, 5);
+  test("abcdefghij", 5, 5, "abcde", 5, 1, 5);
+  test("abcdefghij", 5, 5, "abcde", 6, 0, 0);
+  test("abcdefghij", 5, 5, "abcdefghij", 0, 0, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 0, 1, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 0, 5, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 0, 9, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 0, 10, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 0, 11, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 1, 0, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 1, 1, 4);
+  test("abcdefghij", 5, 5, "abcdefghij", 1, 4, 4);
+  test("abcdefghij", 5, 5, "abcdefghij", 1, 8, 4);
+  test("abcdefghij", 5, 5, "abcdefghij", 1, 9, 4);
+  test("abcdefghij", 5, 5, "abcdefghij", 1, 10, 4);
+  test("abcdefghij", 5, 5, "abcdefghij", 5, 0, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 5, 1, 4);
+  test("abcdefghij", 5, 5, "abcdefghij", 5, 2, 3);
+  test("abcdefghij", 5, 5, "abcdefghij", 5, 4, 1);
+  test("abcdefghij", 5, 5, "abcdefghij", 5, 5, 0);
+  test("abcdefghij", 5, 5, "abcdefghij", 5, 6, 0);
+  test("abcdefghij", 5, 5, "abcdefghij", 9, 0, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 9, 1, -4);
+  test("abcdefghij", 5, 5, "abcdefghij", 9, 2, -4);
+  test("abcdefghij", 5, 5, "abcdefghij", 10, 0, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 10, 1, 5);
+  test("abcdefghij", 5, 5, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 0, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 1, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 10, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 19, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 20, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 0, 21, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 0, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 1, 4);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 9, 4);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 18, 4);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 19, 4);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 1, 20, 4);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 0, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 1, -5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 9, -5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 10, -5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 10, 11, -5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 0, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 1, -14);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 19, 2, -14);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 0, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 20, 1, 5);
+  test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 5, 6, "", 0, 0, 5);
+  test("abcdefghij", 5, 6, "", 0, 1, 5);
+  test("abcdefghij", 5, 6, "", 1, 0, 0);
+  test("abcdefghij", 5, 6, "abcde", 0, 0, 5);
+  test("abcdefghij", 5, 6, "abcde", 0, 1, 5);
+  test("abcdefghij", 5, 6, "abcde", 0, 2, 5);
+  test("abcdefghij", 5, 6, "abcde", 0, 4, 5);
+  test("abcdefghij", 5, 6, "abcde", 0, 5, 5);
+  test("abcdefghij", 5, 6, "abcde", 0, 6, 5);
+  test("abcdefghij", 5, 6, "abcde", 1, 0, 5);
+  test("abcdefghij", 5, 6, "abcde", 1, 1, 4);
+  test("abcdefghij", 5, 6, "abcde", 1, 2, 4);
+  test("abcdefghij", 5, 6, "abcde", 1, 3, 4);
+  test("abcdefghij", 5, 6, "abcde", 1, 4, 4);
+  test("abcdefghij", 5, 6, "abcde", 1, 5, 4);
+  test("abcdefghij", 5, 6, "abcde", 2, 0, 5);
+  test("abcdefghij", 5, 6, "abcde", 2, 1, 3);
+  test("abcdefghij", 5, 6, "abcde", 2, 2, 3);
 }
 
-void test32()
-{
-    test("abcdefghij", 5, 6, "abcde", 2, 3, 3);
-    test("abcdefghij", 5, 6, "abcde", 2, 4, 3);
-    test("abcdefghij", 5, 6, "abcde", 4, 0, 5);
-    test("abcdefghij", 5, 6, "abcde", 4, 1, 1);
-    test("abcdefghij", 5, 6, "abcde", 4, 2, 1);
-    test("abcdefghij", 5, 6, "abcde", 5, 0, 5);
-    test("abcdefghij", 5, 6, "abcde", 5, 1, 5);
-    test("abcdefghij", 5, 6, "abcde", 6, 0, 0);
-    test("abcdefghij", 5, 6, "abcdefghij", 0, 0, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 0, 1, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 0, 5, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 0, 9, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 0, 10, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 0, 11, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 1, 0, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 1, 1, 4);
-    test("abcdefghij", 5, 6, "abcdefghij", 1, 4, 4);
-    test("abcdefghij", 5, 6, "abcdefghij", 1, 8, 4);
-    test("abcdefghij", 5, 6, "abcdefghij", 1, 9, 4);
-    test("abcdefghij", 5, 6, "abcdefghij", 1, 10, 4);
-    test("abcdefghij", 5, 6, "abcdefghij", 5, 0, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 5, 1, 4);
-    test("abcdefghij", 5, 6, "abcdefghij", 5, 2, 3);
-    test("abcdefghij", 5, 6, "abcdefghij", 5, 4, 1);
-    test("abcdefghij", 5, 6, "abcdefghij", 5, 5, 0);
-    test("abcdefghij", 5, 6, "abcdefghij", 5, 6, 0);
-    test("abcdefghij", 5, 6, "abcdefghij", 9, 0, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 9, 1, -4);
-    test("abcdefghij", 5, 6, "abcdefghij", 9, 2, -4);
-    test("abcdefghij", 5, 6, "abcdefghij", 10, 0, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 10, 1, 5);
-    test("abcdefghij", 5, 6, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 0, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 1, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 10, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 19, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 20, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 21, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 0, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 1, 4);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 9, 4);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 18, 4);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 19, 4);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 20, 4);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 0, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 1, -5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 9, -5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 10, -5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 11, -5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 0, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 1, -14);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 2, -14);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 0, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 1, 5);
-    test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 9, 0, "", 0, 0, 0);
-    test("abcdefghij", 9, 0, "", 0, 1, 0);
-    test("abcdefghij", 9, 0, "", 1, 0, 0);
-    test("abcdefghij", 9, 0, "abcde", 0, 0, 0);
-    test("abcdefghij", 9, 0, "abcde", 0, 1, -1);
-    test("abcdefghij", 9, 0, "abcde", 0, 2, -2);
-    test("abcdefghij", 9, 0, "abcde", 0, 4, -4);
-    test("abcdefghij", 9, 0, "abcde", 0, 5, -5);
-    test("abcdefghij", 9, 0, "abcde", 0, 6, -5);
-    test("abcdefghij", 9, 0, "abcde", 1, 0, 0);
-    test("abcdefghij", 9, 0, "abcde", 1, 1, -1);
-    test("abcdefghij", 9, 0, "abcde", 1, 2, -2);
-    test("abcdefghij", 9, 0, "abcde", 1, 3, -3);
-    test("abcdefghij", 9, 0, "abcde", 1, 4, -4);
-    test("abcdefghij", 9, 0, "abcde", 1, 5, -4);
-    test("abcdefghij", 9, 0, "abcde", 2, 0, 0);
-    test("abcdefghij", 9, 0, "abcde", 2, 1, -1);
-    test("abcdefghij", 9, 0, "abcde", 2, 2, -2);
-    test("abcdefghij", 9, 0, "abcde", 2, 3, -3);
-    test("abcdefghij", 9, 0, "abcde", 2, 4, -3);
-    test("abcdefghij", 9, 0, "abcde", 4, 0, 0);
-    test("abcdefghij", 9, 0, "abcde", 4, 1, -1);
-    test("abcdefghij", 9, 0, "abcde", 4, 2, -1);
-    test("abcdefghij", 9, 0, "abcde", 5, 0, 0);
-    test("abcdefghij", 9, 0, "abcde", 5, 1, 0);
-    test("abcdefghij", 9, 0, "abcde", 6, 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghij", 0, 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghij", 0, 1, -1);
-    test("abcdefghij", 9, 0, "abcdefghij", 0, 5, -5);
-    test("abcdefghij", 9, 0, "abcdefghij", 0, 9, -9);
-    test("abcdefghij", 9, 0, "abcdefghij", 0, 10, -10);
-    test("abcdefghij", 9, 0, "abcdefghij", 0, 11, -10);
-    test("abcdefghij", 9, 0, "abcdefghij", 1, 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghij", 1, 1, -1);
-    test("abcdefghij", 9, 0, "abcdefghij", 1, 4, -4);
-    test("abcdefghij", 9, 0, "abcdefghij", 1, 8, -8);
-    test("abcdefghij", 9, 0, "abcdefghij", 1, 9, -9);
-    test("abcdefghij", 9, 0, "abcdefghij", 1, 10, -9);
-    test("abcdefghij", 9, 0, "abcdefghij", 5, 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghij", 5, 1, -1);
-    test("abcdefghij", 9, 0, "abcdefghij", 5, 2, -2);
-    test("abcdefghij", 9, 0, "abcdefghij", 5, 4, -4);
-    test("abcdefghij", 9, 0, "abcdefghij", 5, 5, -5);
-    test("abcdefghij", 9, 0, "abcdefghij", 5, 6, -5);
+void test32() {
+  test("abcdefghij", 5, 6, "abcde", 2, 3, 3);
+  test("abcdefghij", 5, 6, "abcde", 2, 4, 3);
+  test("abcdefghij", 5, 6, "abcde", 4, 0, 5);
+  test("abcdefghij", 5, 6, "abcde", 4, 1, 1);
+  test("abcdefghij", 5, 6, "abcde", 4, 2, 1);
+  test("abcdefghij", 5, 6, "abcde", 5, 0, 5);
+  test("abcdefghij", 5, 6, "abcde", 5, 1, 5);
+  test("abcdefghij", 5, 6, "abcde", 6, 0, 0);
+  test("abcdefghij", 5, 6, "abcdefghij", 0, 0, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 0, 1, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 0, 5, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 0, 9, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 0, 10, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 0, 11, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 1, 0, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 1, 1, 4);
+  test("abcdefghij", 5, 6, "abcdefghij", 1, 4, 4);
+  test("abcdefghij", 5, 6, "abcdefghij", 1, 8, 4);
+  test("abcdefghij", 5, 6, "abcdefghij", 1, 9, 4);
+  test("abcdefghij", 5, 6, "abcdefghij", 1, 10, 4);
+  test("abcdefghij", 5, 6, "abcdefghij", 5, 0, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 5, 1, 4);
+  test("abcdefghij", 5, 6, "abcdefghij", 5, 2, 3);
+  test("abcdefghij", 5, 6, "abcdefghij", 5, 4, 1);
+  test("abcdefghij", 5, 6, "abcdefghij", 5, 5, 0);
+  test("abcdefghij", 5, 6, "abcdefghij", 5, 6, 0);
+  test("abcdefghij", 5, 6, "abcdefghij", 9, 0, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 9, 1, -4);
+  test("abcdefghij", 5, 6, "abcdefghij", 9, 2, -4);
+  test("abcdefghij", 5, 6, "abcdefghij", 10, 0, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 10, 1, 5);
+  test("abcdefghij", 5, 6, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 0, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 1, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 10, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 19, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 20, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 0, 21, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 0, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 1, 4);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 9, 4);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 18, 4);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 19, 4);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 1, 20, 4);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 0, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 1, -5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 9, -5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 10, -5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 10, 11, -5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 0, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 1, -14);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 19, 2, -14);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 0, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 20, 1, 5);
+  test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 9, 0, "", 0, 0, 0);
+  test("abcdefghij", 9, 0, "", 0, 1, 0);
+  test("abcdefghij", 9, 0, "", 1, 0, 0);
+  test("abcdefghij", 9, 0, "abcde", 0, 0, 0);
+  test("abcdefghij", 9, 0, "abcde", 0, 1, -1);
+  test("abcdefghij", 9, 0, "abcde", 0, 2, -2);
+  test("abcdefghij", 9, 0, "abcde", 0, 4, -4);
+  test("abcdefghij", 9, 0, "abcde", 0, 5, -5);
+  test("abcdefghij", 9, 0, "abcde", 0, 6, -5);
+  test("abcdefghij", 9, 0, "abcde", 1, 0, 0);
+  test("abcdefghij", 9, 0, "abcde", 1, 1, -1);
+  test("abcdefghij", 9, 0, "abcde", 1, 2, -2);
+  test("abcdefghij", 9, 0, "abcde", 1, 3, -3);
+  test("abcdefghij", 9, 0, "abcde", 1, 4, -4);
+  test("abcdefghij", 9, 0, "abcde", 1, 5, -4);
+  test("abcdefghij", 9, 0, "abcde", 2, 0, 0);
+  test("abcdefghij", 9, 0, "abcde", 2, 1, -1);
+  test("abcdefghij", 9, 0, "abcde", 2, 2, -2);
+  test("abcdefghij", 9, 0, "abcde", 2, 3, -3);
+  test("abcdefghij", 9, 0, "abcde", 2, 4, -3);
+  test("abcdefghij", 9, 0, "abcde", 4, 0, 0);
+  test("abcdefghij", 9, 0, "abcde", 4, 1, -1);
+  test("abcdefghij", 9, 0, "abcde", 4, 2, -1);
+  test("abcdefghij", 9, 0, "abcde", 5, 0, 0);
+  test("abcdefghij", 9, 0, "abcde", 5, 1, 0);
+  test("abcdefghij", 9, 0, "abcde", 6, 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghij", 0, 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghij", 0, 1, -1);
+  test("abcdefghij", 9, 0, "abcdefghij", 0, 5, -5);
+  test("abcdefghij", 9, 0, "abcdefghij", 0, 9, -9);
+  test("abcdefghij", 9, 0, "abcdefghij", 0, 10, -10);
+  test("abcdefghij", 9, 0, "abcdefghij", 0, 11, -10);
+  test("abcdefghij", 9, 0, "abcdefghij", 1, 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghij", 1, 1, -1);
+  test("abcdefghij", 9, 0, "abcdefghij", 1, 4, -4);
+  test("abcdefghij", 9, 0, "abcdefghij", 1, 8, -8);
+  test("abcdefghij", 9, 0, "abcdefghij", 1, 9, -9);
+  test("abcdefghij", 9, 0, "abcdefghij", 1, 10, -9);
+  test("abcdefghij", 9, 0, "abcdefghij", 5, 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghij", 5, 1, -1);
+  test("abcdefghij", 9, 0, "abcdefghij", 5, 2, -2);
+  test("abcdefghij", 9, 0, "abcdefghij", 5, 4, -4);
+  test("abcdefghij", 9, 0, "abcdefghij", 5, 5, -5);
+  test("abcdefghij", 9, 0, "abcdefghij", 5, 6, -5);
 }
 
-void test33()
-{
-    test("abcdefghij", 9, 0, "abcdefghij", 9, 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghij", 9, 1, -1);
-    test("abcdefghij", 9, 0, "abcdefghij", 9, 2, -1);
-    test("abcdefghij", 9, 0, "abcdefghij", 10, 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghij", 10, 1, 0);
-    test("abcdefghij", 9, 0, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 9, 1, "", 0, 0, 1);
-    test("abcdefghij", 9, 1, "", 0, 1, 1);
-    test("abcdefghij", 9, 1, "", 1, 0, 0);
-    test("abcdefghij", 9, 1, "abcde", 0, 0, 1);
-    test("abcdefghij", 9, 1, "abcde", 0, 1, 9);
-    test("abcdefghij", 9, 1, "abcde", 0, 2, 9);
-    test("abcdefghij", 9, 1, "abcde", 0, 4, 9);
-    test("abcdefghij", 9, 1, "abcde", 0, 5, 9);
-    test("abcdefghij", 9, 1, "abcde", 0, 6, 9);
-    test("abcdefghij", 9, 1, "abcde", 1, 0, 1);
-    test("abcdefghij", 9, 1, "abcde", 1, 1, 8);
-    test("abcdefghij", 9, 1, "abcde", 1, 2, 8);
-    test("abcdefghij", 9, 1, "abcde", 1, 3, 8);
-    test("abcdefghij", 9, 1, "abcde", 1, 4, 8);
-    test("abcdefghij", 9, 1, "abcde", 1, 5, 8);
-    test("abcdefghij", 9, 1, "abcde", 2, 0, 1);
-    test("abcdefghij", 9, 1, "abcde", 2, 1, 7);
-    test("abcdefghij", 9, 1, "abcde", 2, 2, 7);
-    test("abcdefghij", 9, 1, "abcde", 2, 3, 7);
-    test("abcdefghij", 9, 1, "abcde", 2, 4, 7);
-    test("abcdefghij", 9, 1, "abcde", 4, 0, 1);
-    test("abcdefghij", 9, 1, "abcde", 4, 1, 5);
-    test("abcdefghij", 9, 1, "abcde", 4, 2, 5);
-    test("abcdefghij", 9, 1, "abcde", 5, 0, 1);
-    test("abcdefghij", 9, 1, "abcde", 5, 1, 1);
-    test("abcdefghij", 9, 1, "abcde", 6, 0, 0);
-    test("abcdefghij", 9, 1, "abcdefghij", 0, 0, 1);
-    test("abcdefghij", 9, 1, "abcdefghij", 0, 1, 9);
-    test("abcdefghij", 9, 1, "abcdefghij", 0, 5, 9);
-    test("abcdefghij", 9, 1, "abcdefghij", 0, 9, 9);
-    test("abcdefghij", 9, 1, "abcdefghij", 0, 10, 9);
-    test("abcdefghij", 9, 1, "abcdefghij", 0, 11, 9);
-    test("abcdefghij", 9, 1, "abcdefghij", 1, 0, 1);
-    test("abcdefghij", 9, 1, "abcdefghij", 1, 1, 8);
-    test("abcdefghij", 9, 1, "abcdefghij", 1, 4, 8);
-    test("abcdefghij", 9, 1, "abcdefghij", 1, 8, 8);
-    test("abcdefghij", 9, 1, "abcdefghij", 1, 9, 8);
-    test("abcdefghij", 9, 1, "abcdefghij", 1, 10, 8);
-    test("abcdefghij", 9, 1, "abcdefghij", 5, 0, 1);
-    test("abcdefghij", 9, 1, "abcdefghij", 5, 1, 4);
-    test("abcdefghij", 9, 1, "abcdefghij", 5, 2, 4);
-    test("abcdefghij", 9, 1, "abcdefghij", 5, 4, 4);
-    test("abcdefghij", 9, 1, "abcdefghij", 5, 5, 4);
-    test("abcdefghij", 9, 1, "abcdefghij", 5, 6, 4);
-    test("abcdefghij", 9, 1, "abcdefghij", 9, 0, 1);
-    test("abcdefghij", 9, 1, "abcdefghij", 9, 1, 0);
-    test("abcdefghij", 9, 1, "abcdefghij", 9, 2, 0);
-    test("abcdefghij", 9, 1, "abcdefghij", 10, 0, 1);
-    test("abcdefghij", 9, 1, "abcdefghij", 10, 1, 1);
-    test("abcdefghij", 9, 1, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 1, 9);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 10, 9);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 19, 9);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 20, 9);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 21, 9);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 1, 8);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 9, 8);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 18, 8);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 19, 8);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 20, 8);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 5, -1);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 9, -1);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 10, -1);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 11, -1);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 1, -10);
+void test33() {
+  test("abcdefghij", 9, 0, "abcdefghij", 9, 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghij", 9, 1, -1);
+  test("abcdefghij", 9, 0, "abcdefghij", 9, 2, -1);
+  test("abcdefghij", 9, 0, "abcdefghij", 10, 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghij", 10, 1, 0);
+  test("abcdefghij", 9, 0, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 9, 1, "", 0, 0, 1);
+  test("abcdefghij", 9, 1, "", 0, 1, 1);
+  test("abcdefghij", 9, 1, "", 1, 0, 0);
+  test("abcdefghij", 9, 1, "abcde", 0, 0, 1);
+  test("abcdefghij", 9, 1, "abcde", 0, 1, 9);
+  test("abcdefghij", 9, 1, "abcde", 0, 2, 9);
+  test("abcdefghij", 9, 1, "abcde", 0, 4, 9);
+  test("abcdefghij", 9, 1, "abcde", 0, 5, 9);
+  test("abcdefghij", 9, 1, "abcde", 0, 6, 9);
+  test("abcdefghij", 9, 1, "abcde", 1, 0, 1);
+  test("abcdefghij", 9, 1, "abcde", 1, 1, 8);
+  test("abcdefghij", 9, 1, "abcde", 1, 2, 8);
+  test("abcdefghij", 9, 1, "abcde", 1, 3, 8);
+  test("abcdefghij", 9, 1, "abcde", 1, 4, 8);
+  test("abcdefghij", 9, 1, "abcde", 1, 5, 8);
+  test("abcdefghij", 9, 1, "abcde", 2, 0, 1);
+  test("abcdefghij", 9, 1, "abcde", 2, 1, 7);
+  test("abcdefghij", 9, 1, "abcde", 2, 2, 7);
+  test("abcdefghij", 9, 1, "abcde", 2, 3, 7);
+  test("abcdefghij", 9, 1, "abcde", 2, 4, 7);
+  test("abcdefghij", 9, 1, "abcde", 4, 0, 1);
+  test("abcdefghij", 9, 1, "abcde", 4, 1, 5);
+  test("abcdefghij", 9, 1, "abcde", 4, 2, 5);
+  test("abcdefghij", 9, 1, "abcde", 5, 0, 1);
+  test("abcdefghij", 9, 1, "abcde", 5, 1, 1);
+  test("abcdefghij", 9, 1, "abcde", 6, 0, 0);
+  test("abcdefghij", 9, 1, "abcdefghij", 0, 0, 1);
+  test("abcdefghij", 9, 1, "abcdefghij", 0, 1, 9);
+  test("abcdefghij", 9, 1, "abcdefghij", 0, 5, 9);
+  test("abcdefghij", 9, 1, "abcdefghij", 0, 9, 9);
+  test("abcdefghij", 9, 1, "abcdefghij", 0, 10, 9);
+  test("abcdefghij", 9, 1, "abcdefghij", 0, 11, 9);
+  test("abcdefghij", 9, 1, "abcdefghij", 1, 0, 1);
+  test("abcdefghij", 9, 1, "abcdefghij", 1, 1, 8);
+  test("abcdefghij", 9, 1, "abcdefghij", 1, 4, 8);
+  test("abcdefghij", 9, 1, "abcdefghij", 1, 8, 8);
+  test("abcdefghij", 9, 1, "abcdefghij", 1, 9, 8);
+  test("abcdefghij", 9, 1, "abcdefghij", 1, 10, 8);
+  test("abcdefghij", 9, 1, "abcdefghij", 5, 0, 1);
+  test("abcdefghij", 9, 1, "abcdefghij", 5, 1, 4);
+  test("abcdefghij", 9, 1, "abcdefghij", 5, 2, 4);
+  test("abcdefghij", 9, 1, "abcdefghij", 5, 4, 4);
+  test("abcdefghij", 9, 1, "abcdefghij", 5, 5, 4);
+  test("abcdefghij", 9, 1, "abcdefghij", 5, 6, 4);
+  test("abcdefghij", 9, 1, "abcdefghij", 9, 0, 1);
+  test("abcdefghij", 9, 1, "abcdefghij", 9, 1, 0);
+  test("abcdefghij", 9, 1, "abcdefghij", 9, 2, 0);
+  test("abcdefghij", 9, 1, "abcdefghij", 10, 0, 1);
+  test("abcdefghij", 9, 1, "abcdefghij", 10, 1, 1);
+  test("abcdefghij", 9, 1, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 1, 9);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 10, 9);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 19, 9);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 20, 9);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 0, 21, 9);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 1, 8);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 9, 8);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 18, 8);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 19, 8);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 1, 20, 8);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 5, -1);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 9, -1);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 10, -1);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 10, 11, -1);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 1, -10);
 }
 
-void test34()
-{
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 2, -10);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 0, 1);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 9, 2, "", 0, 0, 1);
-    test("abcdefghij", 9, 2, "", 0, 1, 1);
-    test("abcdefghij", 9, 2, "", 1, 0, 0);
-    test("abcdefghij", 9, 2, "abcde", 0, 0, 1);
-    test("abcdefghij", 9, 2, "abcde", 0, 1, 9);
-    test("abcdefghij", 9, 2, "abcde", 0, 2, 9);
-    test("abcdefghij", 9, 2, "abcde", 0, 4, 9);
-    test("abcdefghij", 9, 2, "abcde", 0, 5, 9);
-    test("abcdefghij", 9, 2, "abcde", 0, 6, 9);
-    test("abcdefghij", 9, 2, "abcde", 1, 0, 1);
-    test("abcdefghij", 9, 2, "abcde", 1, 1, 8);
-    test("abcdefghij", 9, 2, "abcde", 1, 2, 8);
-    test("abcdefghij", 9, 2, "abcde", 1, 3, 8);
-    test("abcdefghij", 9, 2, "abcde", 1, 4, 8);
-    test("abcdefghij", 9, 2, "abcde", 1, 5, 8);
-    test("abcdefghij", 9, 2, "abcde", 2, 0, 1);
-    test("abcdefghij", 9, 2, "abcde", 2, 1, 7);
-    test("abcdefghij", 9, 2, "abcde", 2, 2, 7);
-    test("abcdefghij", 9, 2, "abcde", 2, 3, 7);
-    test("abcdefghij", 9, 2, "abcde", 2, 4, 7);
-    test("abcdefghij", 9, 2, "abcde", 4, 0, 1);
-    test("abcdefghij", 9, 2, "abcde", 4, 1, 5);
-    test("abcdefghij", 9, 2, "abcde", 4, 2, 5);
-    test("abcdefghij", 9, 2, "abcde", 5, 0, 1);
-    test("abcdefghij", 9, 2, "abcde", 5, 1, 1);
-    test("abcdefghij", 9, 2, "abcde", 6, 0, 0);
-    test("abcdefghij", 9, 2, "abcdefghij", 0, 0, 1);
-    test("abcdefghij", 9, 2, "abcdefghij", 0, 1, 9);
-    test("abcdefghij", 9, 2, "abcdefghij", 0, 5, 9);
-    test("abcdefghij", 9, 2, "abcdefghij", 0, 9, 9);
-    test("abcdefghij", 9, 2, "abcdefghij", 0, 10, 9);
-    test("abcdefghij", 9, 2, "abcdefghij", 0, 11, 9);
-    test("abcdefghij", 9, 2, "abcdefghij", 1, 0, 1);
-    test("abcdefghij", 9, 2, "abcdefghij", 1, 1, 8);
-    test("abcdefghij", 9, 2, "abcdefghij", 1, 4, 8);
-    test("abcdefghij", 9, 2, "abcdefghij", 1, 8, 8);
-    test("abcdefghij", 9, 2, "abcdefghij", 1, 9, 8);
-    test("abcdefghij", 9, 2, "abcdefghij", 1, 10, 8);
-    test("abcdefghij", 9, 2, "abcdefghij", 5, 0, 1);
-    test("abcdefghij", 9, 2, "abcdefghij", 5, 1, 4);
-    test("abcdefghij", 9, 2, "abcdefghij", 5, 2, 4);
-    test("abcdefghij", 9, 2, "abcdefghij", 5, 4, 4);
-    test("abcdefghij", 9, 2, "abcdefghij", 5, 5, 4);
-    test("abcdefghij", 9, 2, "abcdefghij", 5, 6, 4);
-    test("abcdefghij", 9, 2, "abcdefghij", 9, 0, 1);
-    test("abcdefghij", 9, 2, "abcdefghij", 9, 1, 0);
-    test("abcdefghij", 9, 2, "abcdefghij", 9, 2, 0);
-    test("abcdefghij", 9, 2, "abcdefghij", 10, 0, 1);
-    test("abcdefghij", 9, 2, "abcdefghij", 10, 1, 1);
-    test("abcdefghij", 9, 2, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 1, 9);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 10, 9);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 19, 9);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 20, 9);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 21, 9);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 1, 8);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 9, 8);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 18, 8);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 19, 8);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 20, 8);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 5, -1);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 9, -1);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 10, -1);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 11, -1);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 1, -10);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 2, -10);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 0, 1);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 10, 0, "", 0, 0, 0);
-    test("abcdefghij", 10, 0, "", 0, 1, 0);
-    test("abcdefghij", 10, 0, "", 1, 0, 0);
-    test("abcdefghij", 10, 0, "abcde", 0, 0, 0);
-    test("abcdefghij", 10, 0, "abcde", 0, 1, -1);
-    test("abcdefghij", 10, 0, "abcde", 0, 2, -2);
-    test("abcdefghij", 10, 0, "abcde", 0, 4, -4);
-    test("abcdefghij", 10, 0, "abcde", 0, 5, -5);
-    test("abcdefghij", 10, 0, "abcde", 0, 6, -5);
-    test("abcdefghij", 10, 0, "abcde", 1, 0, 0);
-    test("abcdefghij", 10, 0, "abcde", 1, 1, -1);
-    test("abcdefghij", 10, 0, "abcde", 1, 2, -2);
-    test("abcdefghij", 10, 0, "abcde", 1, 3, -3);
-    test("abcdefghij", 10, 0, "abcde", 1, 4, -4);
-    test("abcdefghij", 10, 0, "abcde", 1, 5, -4);
-    test("abcdefghij", 10, 0, "abcde", 2, 0, 0);
-    test("abcdefghij", 10, 0, "abcde", 2, 1, -1);
-    test("abcdefghij", 10, 0, "abcde", 2, 2, -2);
-    test("abcdefghij", 10, 0, "abcde", 2, 3, -3);
-    test("abcdefghij", 10, 0, "abcde", 2, 4, -3);
-    test("abcdefghij", 10, 0, "abcde", 4, 0, 0);
-    test("abcdefghij", 10, 0, "abcde", 4, 1, -1);
+void test34() {
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 19, 2, -10);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 0, 1);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 9, 2, "", 0, 0, 1);
+  test("abcdefghij", 9, 2, "", 0, 1, 1);
+  test("abcdefghij", 9, 2, "", 1, 0, 0);
+  test("abcdefghij", 9, 2, "abcde", 0, 0, 1);
+  test("abcdefghij", 9, 2, "abcde", 0, 1, 9);
+  test("abcdefghij", 9, 2, "abcde", 0, 2, 9);
+  test("abcdefghij", 9, 2, "abcde", 0, 4, 9);
+  test("abcdefghij", 9, 2, "abcde", 0, 5, 9);
+  test("abcdefghij", 9, 2, "abcde", 0, 6, 9);
+  test("abcdefghij", 9, 2, "abcde", 1, 0, 1);
+  test("abcdefghij", 9, 2, "abcde", 1, 1, 8);
+  test("abcdefghij", 9, 2, "abcde", 1, 2, 8);
+  test("abcdefghij", 9, 2, "abcde", 1, 3, 8);
+  test("abcdefghij", 9, 2, "abcde", 1, 4, 8);
+  test("abcdefghij", 9, 2, "abcde", 1, 5, 8);
+  test("abcdefghij", 9, 2, "abcde", 2, 0, 1);
+  test("abcdefghij", 9, 2, "abcde", 2, 1, 7);
+  test("abcdefghij", 9, 2, "abcde", 2, 2, 7);
+  test("abcdefghij", 9, 2, "abcde", 2, 3, 7);
+  test("abcdefghij", 9, 2, "abcde", 2, 4, 7);
+  test("abcdefghij", 9, 2, "abcde", 4, 0, 1);
+  test("abcdefghij", 9, 2, "abcde", 4, 1, 5);
+  test("abcdefghij", 9, 2, "abcde", 4, 2, 5);
+  test("abcdefghij", 9, 2, "abcde", 5, 0, 1);
+  test("abcdefghij", 9, 2, "abcde", 5, 1, 1);
+  test("abcdefghij", 9, 2, "abcde", 6, 0, 0);
+  test("abcdefghij", 9, 2, "abcdefghij", 0, 0, 1);
+  test("abcdefghij", 9, 2, "abcdefghij", 0, 1, 9);
+  test("abcdefghij", 9, 2, "abcdefghij", 0, 5, 9);
+  test("abcdefghij", 9, 2, "abcdefghij", 0, 9, 9);
+  test("abcdefghij", 9, 2, "abcdefghij", 0, 10, 9);
+  test("abcdefghij", 9, 2, "abcdefghij", 0, 11, 9);
+  test("abcdefghij", 9, 2, "abcdefghij", 1, 0, 1);
+  test("abcdefghij", 9, 2, "abcdefghij", 1, 1, 8);
+  test("abcdefghij", 9, 2, "abcdefghij", 1, 4, 8);
+  test("abcdefghij", 9, 2, "abcdefghij", 1, 8, 8);
+  test("abcdefghij", 9, 2, "abcdefghij", 1, 9, 8);
+  test("abcdefghij", 9, 2, "abcdefghij", 1, 10, 8);
+  test("abcdefghij", 9, 2, "abcdefghij", 5, 0, 1);
+  test("abcdefghij", 9, 2, "abcdefghij", 5, 1, 4);
+  test("abcdefghij", 9, 2, "abcdefghij", 5, 2, 4);
+  test("abcdefghij", 9, 2, "abcdefghij", 5, 4, 4);
+  test("abcdefghij", 9, 2, "abcdefghij", 5, 5, 4);
+  test("abcdefghij", 9, 2, "abcdefghij", 5, 6, 4);
+  test("abcdefghij", 9, 2, "abcdefghij", 9, 0, 1);
+  test("abcdefghij", 9, 2, "abcdefghij", 9, 1, 0);
+  test("abcdefghij", 9, 2, "abcdefghij", 9, 2, 0);
+  test("abcdefghij", 9, 2, "abcdefghij", 10, 0, 1);
+  test("abcdefghij", 9, 2, "abcdefghij", 10, 1, 1);
+  test("abcdefghij", 9, 2, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 1, 9);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 10, 9);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 19, 9);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 20, 9);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 0, 21, 9);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 1, 8);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 9, 8);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 18, 8);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 19, 8);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 1, 20, 8);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 5, -1);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 9, -1);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 10, -1);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 10, 11, -1);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 1, -10);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 19, 2, -10);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 0, 1);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 10, 0, "", 0, 0, 0);
+  test("abcdefghij", 10, 0, "", 0, 1, 0);
+  test("abcdefghij", 10, 0, "", 1, 0, 0);
+  test("abcdefghij", 10, 0, "abcde", 0, 0, 0);
+  test("abcdefghij", 10, 0, "abcde", 0, 1, -1);
+  test("abcdefghij", 10, 0, "abcde", 0, 2, -2);
+  test("abcdefghij", 10, 0, "abcde", 0, 4, -4);
+  test("abcdefghij", 10, 0, "abcde", 0, 5, -5);
+  test("abcdefghij", 10, 0, "abcde", 0, 6, -5);
+  test("abcdefghij", 10, 0, "abcde", 1, 0, 0);
+  test("abcdefghij", 10, 0, "abcde", 1, 1, -1);
+  test("abcdefghij", 10, 0, "abcde", 1, 2, -2);
+  test("abcdefghij", 10, 0, "abcde", 1, 3, -3);
+  test("abcdefghij", 10, 0, "abcde", 1, 4, -4);
+  test("abcdefghij", 10, 0, "abcde", 1, 5, -4);
+  test("abcdefghij", 10, 0, "abcde", 2, 0, 0);
+  test("abcdefghij", 10, 0, "abcde", 2, 1, -1);
+  test("abcdefghij", 10, 0, "abcde", 2, 2, -2);
+  test("abcdefghij", 10, 0, "abcde", 2, 3, -3);
+  test("abcdefghij", 10, 0, "abcde", 2, 4, -3);
+  test("abcdefghij", 10, 0, "abcde", 4, 0, 0);
+  test("abcdefghij", 10, 0, "abcde", 4, 1, -1);
 }
 
-void test35()
-{
-    test("abcdefghij", 10, 0, "abcde", 4, 2, -1);
-    test("abcdefghij", 10, 0, "abcde", 5, 0, 0);
-    test("abcdefghij", 10, 0, "abcde", 5, 1, 0);
-    test("abcdefghij", 10, 0, "abcde", 6, 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghij", 0, 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghij", 0, 1, -1);
-    test("abcdefghij", 10, 0, "abcdefghij", 0, 5, -5);
-    test("abcdefghij", 10, 0, "abcdefghij", 0, 9, -9);
-    test("abcdefghij", 10, 0, "abcdefghij", 0, 10, -10);
-    test("abcdefghij", 10, 0, "abcdefghij", 0, 11, -10);
-    test("abcdefghij", 10, 0, "abcdefghij", 1, 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghij", 1, 1, -1);
-    test("abcdefghij", 10, 0, "abcdefghij", 1, 4, -4);
-    test("abcdefghij", 10, 0, "abcdefghij", 1, 8, -8);
-    test("abcdefghij", 10, 0, "abcdefghij", 1, 9, -9);
-    test("abcdefghij", 10, 0, "abcdefghij", 1, 10, -9);
-    test("abcdefghij", 10, 0, "abcdefghij", 5, 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghij", 5, 1, -1);
-    test("abcdefghij", 10, 0, "abcdefghij", 5, 2, -2);
-    test("abcdefghij", 10, 0, "abcdefghij", 5, 4, -4);
-    test("abcdefghij", 10, 0, "abcdefghij", 5, 5, -5);
-    test("abcdefghij", 10, 0, "abcdefghij", 5, 6, -5);
-    test("abcdefghij", 10, 0, "abcdefghij", 9, 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghij", 9, 1, -1);
-    test("abcdefghij", 10, 0, "abcdefghij", 9, 2, -1);
-    test("abcdefghij", 10, 0, "abcdefghij", 10, 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghij", 10, 1, 0);
-    test("abcdefghij", 10, 0, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 10, 1, "", 0, 0, 0);
-    test("abcdefghij", 10, 1, "", 0, 1, 0);
-    test("abcdefghij", 10, 1, "", 1, 0, 0);
-    test("abcdefghij", 10, 1, "abcde", 0, 0, 0);
-    test("abcdefghij", 10, 1, "abcde", 0, 1, -1);
-    test("abcdefghij", 10, 1, "abcde", 0, 2, -2);
-    test("abcdefghij", 10, 1, "abcde", 0, 4, -4);
-    test("abcdefghij", 10, 1, "abcde", 0, 5, -5);
-    test("abcdefghij", 10, 1, "abcde", 0, 6, -5);
-    test("abcdefghij", 10, 1, "abcde", 1, 0, 0);
-    test("abcdefghij", 10, 1, "abcde", 1, 1, -1);
-    test("abcdefghij", 10, 1, "abcde", 1, 2, -2);
-    test("abcdefghij", 10, 1, "abcde", 1, 3, -3);
-    test("abcdefghij", 10, 1, "abcde", 1, 4, -4);
-    test("abcdefghij", 10, 1, "abcde", 1, 5, -4);
-    test("abcdefghij", 10, 1, "abcde", 2, 0, 0);
-    test("abcdefghij", 10, 1, "abcde", 2, 1, -1);
-    test("abcdefghij", 10, 1, "abcde", 2, 2, -2);
-    test("abcdefghij", 10, 1, "abcde", 2, 3, -3);
-    test("abcdefghij", 10, 1, "abcde", 2, 4, -3);
-    test("abcdefghij", 10, 1, "abcde", 4, 0, 0);
-    test("abcdefghij", 10, 1, "abcde", 4, 1, -1);
-    test("abcdefghij", 10, 1, "abcde", 4, 2, -1);
-    test("abcdefghij", 10, 1, "abcde", 5, 0, 0);
-    test("abcdefghij", 10, 1, "abcde", 5, 1, 0);
-    test("abcdefghij", 10, 1, "abcde", 6, 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghij", 0, 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghij", 0, 1, -1);
-    test("abcdefghij", 10, 1, "abcdefghij", 0, 5, -5);
-    test("abcdefghij", 10, 1, "abcdefghij", 0, 9, -9);
-    test("abcdefghij", 10, 1, "abcdefghij", 0, 10, -10);
-    test("abcdefghij", 10, 1, "abcdefghij", 0, 11, -10);
-    test("abcdefghij", 10, 1, "abcdefghij", 1, 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghij", 1, 1, -1);
-    test("abcdefghij", 10, 1, "abcdefghij", 1, 4, -4);
-    test("abcdefghij", 10, 1, "abcdefghij", 1, 8, -8);
-    test("abcdefghij", 10, 1, "abcdefghij", 1, 9, -9);
-    test("abcdefghij", 10, 1, "abcdefghij", 1, 10, -9);
-    test("abcdefghij", 10, 1, "abcdefghij", 5, 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghij", 5, 1, -1);
-    test("abcdefghij", 10, 1, "abcdefghij", 5, 2, -2);
-    test("abcdefghij", 10, 1, "abcdefghij", 5, 4, -4);
-    test("abcdefghij", 10, 1, "abcdefghij", 5, 5, -5);
-    test("abcdefghij", 10, 1, "abcdefghij", 5, 6, -5);
-    test("abcdefghij", 10, 1, "abcdefghij", 9, 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghij", 9, 1, -1);
-    test("abcdefghij", 10, 1, "abcdefghij", 9, 2, -1);
-    test("abcdefghij", 10, 1, "abcdefghij", 10, 0, 0);
+void test35() {
+  test("abcdefghij", 10, 0, "abcde", 4, 2, -1);
+  test("abcdefghij", 10, 0, "abcde", 5, 0, 0);
+  test("abcdefghij", 10, 0, "abcde", 5, 1, 0);
+  test("abcdefghij", 10, 0, "abcde", 6, 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghij", 0, 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghij", 0, 1, -1);
+  test("abcdefghij", 10, 0, "abcdefghij", 0, 5, -5);
+  test("abcdefghij", 10, 0, "abcdefghij", 0, 9, -9);
+  test("abcdefghij", 10, 0, "abcdefghij", 0, 10, -10);
+  test("abcdefghij", 10, 0, "abcdefghij", 0, 11, -10);
+  test("abcdefghij", 10, 0, "abcdefghij", 1, 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghij", 1, 1, -1);
+  test("abcdefghij", 10, 0, "abcdefghij", 1, 4, -4);
+  test("abcdefghij", 10, 0, "abcdefghij", 1, 8, -8);
+  test("abcdefghij", 10, 0, "abcdefghij", 1, 9, -9);
+  test("abcdefghij", 10, 0, "abcdefghij", 1, 10, -9);
+  test("abcdefghij", 10, 0, "abcdefghij", 5, 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghij", 5, 1, -1);
+  test("abcdefghij", 10, 0, "abcdefghij", 5, 2, -2);
+  test("abcdefghij", 10, 0, "abcdefghij", 5, 4, -4);
+  test("abcdefghij", 10, 0, "abcdefghij", 5, 5, -5);
+  test("abcdefghij", 10, 0, "abcdefghij", 5, 6, -5);
+  test("abcdefghij", 10, 0, "abcdefghij", 9, 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghij", 9, 1, -1);
+  test("abcdefghij", 10, 0, "abcdefghij", 9, 2, -1);
+  test("abcdefghij", 10, 0, "abcdefghij", 10, 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghij", 10, 1, 0);
+  test("abcdefghij", 10, 0, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 10, 1, "", 0, 0, 0);
+  test("abcdefghij", 10, 1, "", 0, 1, 0);
+  test("abcdefghij", 10, 1, "", 1, 0, 0);
+  test("abcdefghij", 10, 1, "abcde", 0, 0, 0);
+  test("abcdefghij", 10, 1, "abcde", 0, 1, -1);
+  test("abcdefghij", 10, 1, "abcde", 0, 2, -2);
+  test("abcdefghij", 10, 1, "abcde", 0, 4, -4);
+  test("abcdefghij", 10, 1, "abcde", 0, 5, -5);
+  test("abcdefghij", 10, 1, "abcde", 0, 6, -5);
+  test("abcdefghij", 10, 1, "abcde", 1, 0, 0);
+  test("abcdefghij", 10, 1, "abcde", 1, 1, -1);
+  test("abcdefghij", 10, 1, "abcde", 1, 2, -2);
+  test("abcdefghij", 10, 1, "abcde", 1, 3, -3);
+  test("abcdefghij", 10, 1, "abcde", 1, 4, -4);
+  test("abcdefghij", 10, 1, "abcde", 1, 5, -4);
+  test("abcdefghij", 10, 1, "abcde", 2, 0, 0);
+  test("abcdefghij", 10, 1, "abcde", 2, 1, -1);
+  test("abcdefghij", 10, 1, "abcde", 2, 2, -2);
+  test("abcdefghij", 10, 1, "abcde", 2, 3, -3);
+  test("abcdefghij", 10, 1, "abcde", 2, 4, -3);
+  test("abcdefghij", 10, 1, "abcde", 4, 0, 0);
+  test("abcdefghij", 10, 1, "abcde", 4, 1, -1);
+  test("abcdefghij", 10, 1, "abcde", 4, 2, -1);
+  test("abcdefghij", 10, 1, "abcde", 5, 0, 0);
+  test("abcdefghij", 10, 1, "abcde", 5, 1, 0);
+  test("abcdefghij", 10, 1, "abcde", 6, 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghij", 0, 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghij", 0, 1, -1);
+  test("abcdefghij", 10, 1, "abcdefghij", 0, 5, -5);
+  test("abcdefghij", 10, 1, "abcdefghij", 0, 9, -9);
+  test("abcdefghij", 10, 1, "abcdefghij", 0, 10, -10);
+  test("abcdefghij", 10, 1, "abcdefghij", 0, 11, -10);
+  test("abcdefghij", 10, 1, "abcdefghij", 1, 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghij", 1, 1, -1);
+  test("abcdefghij", 10, 1, "abcdefghij", 1, 4, -4);
+  test("abcdefghij", 10, 1, "abcdefghij", 1, 8, -8);
+  test("abcdefghij", 10, 1, "abcdefghij", 1, 9, -9);
+  test("abcdefghij", 10, 1, "abcdefghij", 1, 10, -9);
+  test("abcdefghij", 10, 1, "abcdefghij", 5, 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghij", 5, 1, -1);
+  test("abcdefghij", 10, 1, "abcdefghij", 5, 2, -2);
+  test("abcdefghij", 10, 1, "abcdefghij", 5, 4, -4);
+  test("abcdefghij", 10, 1, "abcdefghij", 5, 5, -5);
+  test("abcdefghij", 10, 1, "abcdefghij", 5, 6, -5);
+  test("abcdefghij", 10, 1, "abcdefghij", 9, 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghij", 9, 1, -1);
+  test("abcdefghij", 10, 1, "abcdefghij", 9, 2, -1);
+  test("abcdefghij", 10, 1, "abcdefghij", 10, 0, 0);
 }
 
-void test36()
-{
-    test("abcdefghij", 10, 1, "abcdefghij", 10, 1, 0);
-    test("abcdefghij", 10, 1, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghij", 11, 0, "", 0, 0, 0);
-    test("abcdefghij", 11, 0, "", 0, 1, 0);
-    test("abcdefghij", 11, 0, "", 1, 0, 0);
-    test("abcdefghij", 11, 0, "abcde", 0, 0, 0);
-    test("abcdefghij", 11, 0, "abcde", 0, 1, 0);
-    test("abcdefghij", 11, 0, "abcde", 0, 2, 0);
-    test("abcdefghij", 11, 0, "abcde", 0, 4, 0);
-    test("abcdefghij", 11, 0, "abcde", 0, 5, 0);
-    test("abcdefghij", 11, 0, "abcde", 0, 6, 0);
-    test("abcdefghij", 11, 0, "abcde", 1, 0, 0);
-    test("abcdefghij", 11, 0, "abcde", 1, 1, 0);
-    test("abcdefghij", 11, 0, "abcde", 1, 2, 0);
-    test("abcdefghij", 11, 0, "abcde", 1, 3, 0);
-    test("abcdefghij", 11, 0, "abcde", 1, 4, 0);
-    test("abcdefghij", 11, 0, "abcde", 1, 5, 0);
-    test("abcdefghij", 11, 0, "abcde", 2, 0, 0);
-    test("abcdefghij", 11, 0, "abcde", 2, 1, 0);
-    test("abcdefghij", 11, 0, "abcde", 2, 2, 0);
-    test("abcdefghij", 11, 0, "abcde", 2, 3, 0);
-    test("abcdefghij", 11, 0, "abcde", 2, 4, 0);
-    test("abcdefghij", 11, 0, "abcde", 4, 0, 0);
-    test("abcdefghij", 11, 0, "abcde", 4, 1, 0);
-    test("abcdefghij", 11, 0, "abcde", 4, 2, 0);
-    test("abcdefghij", 11, 0, "abcde", 5, 0, 0);
-    test("abcdefghij", 11, 0, "abcde", 5, 1, 0);
-    test("abcdefghij", 11, 0, "abcde", 6, 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 0, 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 0, 1, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 0, 5, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 0, 9, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 0, 10, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 0, 11, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 1, 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 1, 1, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 1, 4, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 1, 8, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 1, 9, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 1, 10, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 5, 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 5, 1, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 5, 2, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 5, 4, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 5, 5, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 5, 6, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 9, 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 9, 1, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 9, 2, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 10, 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 10, 1, 0);
-    test("abcdefghij", 11, 0, "abcdefghij", 11, 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 1, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 10, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 19, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 20, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 21, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 1, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 9, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 18, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 19, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 20, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 1, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 5, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 9, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 10, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 11, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 1, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 2, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+void test36() {
+  test("abcdefghij", 10, 1, "abcdefghij", 10, 1, 0);
+  test("abcdefghij", 10, 1, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghij", 11, 0, "", 0, 0, 0);
+  test("abcdefghij", 11, 0, "", 0, 1, 0);
+  test("abcdefghij", 11, 0, "", 1, 0, 0);
+  test("abcdefghij", 11, 0, "abcde", 0, 0, 0);
+  test("abcdefghij", 11, 0, "abcde", 0, 1, 0);
+  test("abcdefghij", 11, 0, "abcde", 0, 2, 0);
+  test("abcdefghij", 11, 0, "abcde", 0, 4, 0);
+  test("abcdefghij", 11, 0, "abcde", 0, 5, 0);
+  test("abcdefghij", 11, 0, "abcde", 0, 6, 0);
+  test("abcdefghij", 11, 0, "abcde", 1, 0, 0);
+  test("abcdefghij", 11, 0, "abcde", 1, 1, 0);
+  test("abcdefghij", 11, 0, "abcde", 1, 2, 0);
+  test("abcdefghij", 11, 0, "abcde", 1, 3, 0);
+  test("abcdefghij", 11, 0, "abcde", 1, 4, 0);
+  test("abcdefghij", 11, 0, "abcde", 1, 5, 0);
+  test("abcdefghij", 11, 0, "abcde", 2, 0, 0);
+  test("abcdefghij", 11, 0, "abcde", 2, 1, 0);
+  test("abcdefghij", 11, 0, "abcde", 2, 2, 0);
+  test("abcdefghij", 11, 0, "abcde", 2, 3, 0);
+  test("abcdefghij", 11, 0, "abcde", 2, 4, 0);
+  test("abcdefghij", 11, 0, "abcde", 4, 0, 0);
+  test("abcdefghij", 11, 0, "abcde", 4, 1, 0);
+  test("abcdefghij", 11, 0, "abcde", 4, 2, 0);
+  test("abcdefghij", 11, 0, "abcde", 5, 0, 0);
+  test("abcdefghij", 11, 0, "abcde", 5, 1, 0);
+  test("abcdefghij", 11, 0, "abcde", 6, 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 0, 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 0, 1, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 0, 5, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 0, 9, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 0, 10, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 0, 11, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 1, 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 1, 1, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 1, 4, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 1, 8, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 1, 9, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 1, 10, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 5, 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 5, 1, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 5, 2, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 5, 4, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 5, 5, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 5, 6, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 9, 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 9, 1, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 9, 2, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 10, 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 10, 1, 0);
+  test("abcdefghij", 11, 0, "abcdefghij", 11, 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 1, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 10, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 19, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 20, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0, 21, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 1, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 9, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 18, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 19, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 1, 20, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 1, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 5, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 9, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 10, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 10, 11, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 1, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 19, 2, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 21, 0, 0);
 }
 
-void test37()
-{
-    test("abcdefghijklmnopqrst", 0, 0, "", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 2, -2);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 4, -4);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 5, -5);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 6, -5);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 2, -2);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 3, -3);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 4, -4);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 5, -4);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 2, -2);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 3, -3);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 4, -3);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 2, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, 1, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 5, -5);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 9, -9);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 10, -10);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 11, -10);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 4, -4);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 8, -8);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 9, -9);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 10, -9);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 2, -2);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 4, -4);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 5, -5);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 6, -5);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 2, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, 1, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 1, "", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 2, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 4, -3);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 5, -4);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 6, -4);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 2, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 3, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 4, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 5, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 1, -2);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 2, -2);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 3, -2);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 4, -2);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 1, -4);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 2, -4);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, 1, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcde", 6, 0, 0);
+void test37() {
+  test("abcdefghijklmnopqrst", 0, 0, "", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 2, -2);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 4, -4);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 5, -5);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 0, 6, -5);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 2, -2);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 3, -3);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 4, -4);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 1, 5, -4);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 2, -2);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 3, -3);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 2, 4, -3);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 4, 2, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 5, 1, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 5, -5);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 9, -9);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 10, -10);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 0, 11, -10);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 4, -4);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 8, -8);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 9, -9);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 1, 10, -9);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 2, -2);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 4, -4);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 5, -5);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 5, 6, -5);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 9, 2, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 10, 1, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 1, "", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 2, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 4, -3);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 5, -4);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 0, 6, -4);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 2, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 3, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 4, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 1, 5, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 1, -2);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 2, -2);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 3, -2);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 2, 4, -2);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 1, -4);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 4, 2, -4);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 5, 1, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcde", 6, 0, 0);
 }
 
-void test38()
-{
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 5, -4);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 9, -8);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 10, -9);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 11, -9);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 4, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 8, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 9, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 10, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 1, -5);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 2, -5);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 4, -5);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 5, -5);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 6, -5);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 1, -9);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 2, -9);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, 1, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 10, "", 0, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 1, 9);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 2, 8);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 4, 6);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 5, 5);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 6, 5);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 2, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 3, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 4, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 5, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 1, -2);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 2, -2);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 3, -2);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 4, -2);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 1, -4);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 2, -4);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 1, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 1, 9);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 5, 5);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 9, 1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 10, 0);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 11, 0);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 4, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 8, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 9, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 10, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 1, -5);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 2, -5);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 4, -5);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 5, -5);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 6, -5);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 1, -9);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 2, -9);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 1, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 1, 9);
+void test38() {
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 5, -4);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 9, -8);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 10, -9);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 0, 11, -9);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 4, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 8, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 9, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 1, 10, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 1, -5);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 2, -5);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 4, -5);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 5, -5);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 5, 6, -5);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 1, -9);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 9, 2, -9);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 10, 1, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 10, -9);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 19, -18);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 20, -19);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 0, 21, -19);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 9, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 18, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 19, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 1, 20, -1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 1, -10);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 5, -10);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 9, -10);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 1, -19);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 19, 2, -19);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, 0, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 10, "", 0, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 1, 9);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 2, 8);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 4, 6);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 5, 5);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 0, 6, 5);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 2, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 3, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 4, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 1, 5, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 1, -2);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 2, -2);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 3, -2);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 2, 4, -2);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 1, -4);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 4, 2, -4);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 5, 1, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 1, 9);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 5, 5);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 9, 1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 10, 0);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0, 11, 0);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 4, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 8, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 9, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 1, 10, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 1, -5);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 2, -5);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 4, -5);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 5, -5);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 5, 6, -5);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 1, -9);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 9, 2, -9);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 10, 1, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 1, 9);
 }
 
-void test39()
-{
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 10, 0);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 19, -9);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 20, -10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 21, -10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 9, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 18, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 19, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 20, -1);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 1, -10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 5, -10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 9, -10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 1, -19);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 2, -19);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, 0, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, 1, 10);
-    test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 19, "", 0, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 1, 18);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 2, 17);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 4, 15);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 5, 14);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 6, 14);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 2, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 3, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 4, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 5, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 1, -2);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 2, -2);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 3, -2);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 4, -2);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 1, -4);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 2, -4);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 1, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 1, 18);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 5, 14);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 9, 10);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 10, 9);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 11, 9);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 4, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 8, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 9, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 10, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 1, -5);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 2, -5);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 4, -5);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 5, -5);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 6, -5);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 1, -9);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 2, -9);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 1, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 1, 18);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 10, 9);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 19, 0);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 20, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 21, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 9, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 18, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 19, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 20, -1);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 1, -10);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 5, -10);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 9, -10);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 1, -19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 2, -19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, 0, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, 1, 19);
-    test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 20, "", 0, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "", 0, 1, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 0, 20);
+void test39() {
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 10, 0);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 19, -9);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 20, -10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 0, 21, -10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 9, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 18, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 19, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 1, 20, -1);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 1, -10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 5, -10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 9, -10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 1, -19);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 19, 2, -19);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, 0, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 20, 1, 10);
+  test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 19, "", 0, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 1, 18);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 2, 17);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 4, 15);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 5, 14);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 0, 6, 14);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 2, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 3, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 4, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 1, 5, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 1, -2);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 2, -2);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 3, -2);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 2, 4, -2);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 1, -4);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 4, 2, -4);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 5, 1, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 1, 18);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 5, 14);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 9, 10);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 10, 9);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 0, 11, 9);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 4, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 8, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 9, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 1, 10, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 1, -5);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 2, -5);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 4, -5);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 5, -5);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 5, 6, -5);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 1, -9);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9, 2, -9);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 10, 1, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 1, 18);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 10, 9);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 19, 0);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 20, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 0, 21, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 9, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 18, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 19, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 1, 20, -1);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 1, -10);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 5, -10);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 9, -10);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 1, -19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 19, 2, -19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, 0, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 20, 1, 19);
+  test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 20, "", 0, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "", 0, 1, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 0, 20);
 }
 
-void test40()
-{
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 2, 18);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 4, 16);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 5, 15);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 6, 15);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 2, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 3, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 4, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 5, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 1, -2);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 2, -2);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 3, -2);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 4, -2);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 1, -4);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 2, -4);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 1, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 5, 15);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 9, 11);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 11, 10);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 4, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 8, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 9, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 10, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 1, -5);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 2, -5);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 4, -5);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 5, -5);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 6, -5);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 1, -9);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 2, -9);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 1, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 19, 1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 20, 0);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 21, 0);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 9, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 18, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 19, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 20, -1);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 1, -10);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 5, -10);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 9, -10);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 1, -19);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 2, -19);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 1, 20);
-    test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 21, "", 0, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "", 0, 1, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 2, 18);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 4, 16);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 5, 15);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 6, 15);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 2, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 3, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 4, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 5, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 1, -2);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 2, -2);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 3, -2);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 4, -2);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 1, -4);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 2, -4);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 1, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 5, 15);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 9, 11);
+void test40() {
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 2, 18);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 4, 16);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 5, 15);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 0, 6, 15);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 2, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 3, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 4, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 1, 5, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 1, -2);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 2, -2);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 3, -2);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 2, 4, -2);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 1, -4);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 4, 2, -4);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 5, 1, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 5, 15);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 9, 11);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 0, 11, 10);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 4, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 8, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 9, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 1, 10, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 1, -5);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 2, -5);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 4, -5);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 5, -5);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 5, 6, -5);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 1, -9);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 9, 2, -9);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10, 1, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 19, 1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 20, 0);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0, 21, 0);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 9, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 18, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 19, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 1, 20, -1);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 1, -10);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 5, -10);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 9, -10);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 1, -19);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 19, 2, -19);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 20, 1, 20);
+  test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 21, "", 0, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "", 0, 1, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 2, 18);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 4, 16);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 5, 15);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 0, 6, 15);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 2, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 3, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 4, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 1, 5, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 1, -2);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 2, -2);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 3, -2);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 2, 4, -2);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 1, -4);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 4, 2, -4);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 5, 1, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 5, 15);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 9, 11);
 }
 
-void test41()
-{
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 11, 10);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 4, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 8, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 9, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 10, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 1, -5);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 2, -5);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 4, -5);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 5, -5);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 6, -5);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 1, -9);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 2, -9);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 1, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 19, 1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 20, 0);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 21, 0);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 9, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 18, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 19, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 20, -1);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 1, -10);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 5, -10);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 9, -10);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 1, -19);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 2, -19);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 0, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 1, 20);
-    test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 2, -2);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 4, -4);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 5, -5);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 6, -5);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 2, -2);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 3, -3);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 4, -4);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 5, -4);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 2, -2);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 3, -3);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 4, -3);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 2, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, 1, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 5, -5);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 9, -9);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 10, -10);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 11, -10);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 4, -4);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 8, -8);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 9, -9);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 10, -9);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 2, -2);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 4, -4);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 5, -5);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 6, -5);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 2, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, 1, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
+void test41() {
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 0, 11, 10);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 4, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 8, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 9, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 1, 10, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 1, -5);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 2, -5);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 4, -5);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 5, -5);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 5, 6, -5);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 1, -9);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 9, 2, -9);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10, 1, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 19, 1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 20, 0);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0, 21, 0);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 9, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 18, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 19, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 1, 20, -1);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 1, -10);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 5, -10);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 9, -10);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 1, -19);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 19, 2, -19);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 0, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 20, 1, 20);
+  test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 2, -2);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 4, -4);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 5, -5);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 0, 6, -5);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 2, -2);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 3, -3);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 4, -4);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 1, 5, -4);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 2, -2);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 3, -3);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 2, 4, -3);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 4, 2, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 5, 1, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 5, -5);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 9, -9);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 10, -10);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 0, 11, -10);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 4, -4);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 8, -8);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 9, -9);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 1, 10, -9);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 2, -2);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 4, -4);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 5, -5);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 5, 6, -5);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 9, 2, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 10, 1, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 0, 21, -20);
 }
 
-void test42()
-{
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 1, "", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 2, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 4, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 5, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 6, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 1, 0);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 2, -1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 3, -2);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 4, -3);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 5, -3);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 2, -1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 3, -1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 4, -1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 1, -3);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 2, -3);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 5, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 9, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 10, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 11, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 1, 0);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 4, -3);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 8, -7);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 9, -8);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 10, -8);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 1, -4);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 2, -4);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 4, -4);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 5, -4);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 6, -4);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 1, -8);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 2, -8);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 9, "", 0, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "", 0, 1, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 2, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 4, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 5, 1);
+void test42() {
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 1, "", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 2, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 4, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 5, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 0, 6, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 1, 0);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 2, -1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 3, -2);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 4, -3);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 1, 5, -3);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 2, -1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 3, -1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 2, 4, -1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 1, -3);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 4, 2, -3);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 5, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 5, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 9, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 10, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 0, 11, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 1, 0);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 4, -3);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 8, -7);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 9, -8);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1, 10, -8);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 1, -4);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 2, -4);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 4, -4);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 5, -4);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 5, 6, -4);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 1, -8);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 9, 2, -8);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 10, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 10, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 19, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 20, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 0, 21, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 1, 0);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 9, -8);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 18, -17);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 19, -18);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1, 20, -18);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 1, -9);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 5, -9);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 10, -9);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 10, 11, -9);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 1, -18);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 19, 2, -18);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 0, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 9, "", 0, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "", 0, 1, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 2, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 4, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 5, 1);
 }
 
-void test43()
-{
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 6, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 1, 8);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 2, 7);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 3, 6);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 4, 5);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 5, 5);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 2, -1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 3, -1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 4, -1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 1, -3);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 2, -3);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 1, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 5, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 9, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 10, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 11, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 1, 8);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 4, 5);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 8, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 9, 0);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 10, 0);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 1, -4);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 2, -4);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 4, -4);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 5, -4);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 6, -4);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 1, -8);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 2, -8);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 1, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 10, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 19, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 20, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 21, 1);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 1, 8);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 9, 0);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 18, -9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 19, -10);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 20, -10);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 1, -9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 5, -9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 10, -9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 11, -9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 1, -18);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 2, -18);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 0, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 1, 9);
-    test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 18, "", 0, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "", 0, 1, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 2, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 4, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 5, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 6, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 1, 17);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 2, 16);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 3, 15);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 4, 14);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 5, 14);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 2, -1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 3, -1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 4, -1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 1, -3);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 2, -3);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 1, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 5, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 9, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 10, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 11, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 1, 17);
+void test43() {
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 0, 6, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 1, 8);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 2, 7);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 3, 6);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 4, 5);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 1, 5, 5);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 2, -1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 3, -1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 2, 4, -1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 1, -3);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 4, 2, -3);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 5, 1, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 5, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 9, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 10, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 0, 11, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 1, 8);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 4, 5);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 8, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 9, 0);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1, 10, 0);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 1, -4);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 2, -4);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 4, -4);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 5, -4);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 5, 6, -4);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 1, -8);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 9, 2, -8);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 10, 1, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 10, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 19, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 20, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 0, 21, 1);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 1, 8);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 9, 0);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 18, -9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 19, -10);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1, 20, -10);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 1, -9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 5, -9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 10, -9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 10, 11, -9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 1, -18);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 19, 2, -18);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 0, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 20, 1, 9);
+  test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 18, "", 0, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "", 0, 1, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 2, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 4, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 5, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 0, 6, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 1, 17);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 2, 16);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 3, 15);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 4, 14);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 1, 5, 14);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 2, -1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 3, -1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 2, 4, -1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 1, -3);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 4, 2, -3);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 5, 1, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 5, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 9, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 10, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 0, 11, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 1, 17);
 }
 
-void test44()
-{
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 4, 14);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 8, 10);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 9, 9);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 10, 9);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 1, -4);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 2, -4);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 4, -4);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 5, -4);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 6, -4);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 1, -8);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 2, -8);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 1, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 10, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 19, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 20, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 21, 1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 1, 17);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 9, 9);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 18, 0);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 19, -1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 20, -1);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 1, -9);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 5, -9);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 10, -9);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 11, -9);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 1, -18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 2, -18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 0, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 1, 18);
-    test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 19, "", 0, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 2, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 4, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 5, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 6, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 1, 18);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 2, 17);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 3, 16);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 4, 15);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 5, 15);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 2, -1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 3, -1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 4, -1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 1, -3);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 2, -3);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 1, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 5, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 9, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 10, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 11, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 1, 18);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 4, 15);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 8, 11);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 9, 10);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 10, 10);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 1, -4);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 2, -4);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 4, -4);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 5, -4);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 6, -4);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 1, -8);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 2, -8);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 1, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 10, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 19, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 20, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 21, 1);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 1, 18);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 9, 10);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 18, 1);
+void test44() {
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 4, 14);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 8, 10);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 9, 9);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1, 10, 9);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 1, -4);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 2, -4);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 4, -4);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 5, -4);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 5, 6, -4);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 1, -8);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 9, 2, -8);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 10, 1, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 10, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 19, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 20, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 0, 21, 1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 1, 17);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 9, 9);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 18, 0);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 19, -1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1, 20, -1);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 1, -9);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 5, -9);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 10, -9);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 10, 11, -9);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 1, -18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 19, 2, -18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 0, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 20, 1, 18);
+  test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 19, "", 0, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 2, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 4, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 5, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 0, 6, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 1, 18);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 2, 17);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 3, 16);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 4, 15);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 1, 5, 15);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 2, -1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 3, -1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 2, 4, -1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 1, -3);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 4, 2, -3);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 5, 1, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 5, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 9, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 10, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 0, 11, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 1, 18);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 4, 15);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 8, 11);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 9, 10);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1, 10, 10);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 1, -4);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 2, -4);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 4, -4);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 5, -4);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 5, 6, -4);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 1, -8);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 9, 2, -8);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 10, 1, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 10, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 19, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 20, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 0, 21, 1);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 1, 18);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 9, 10);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 18, 1);
 }
 
-void test45()
-{
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 19, 0);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 20, 0);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 1, -9);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 5, -9);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 10, -9);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 11, -9);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 1, -18);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 2, -18);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 1, 19);
-    test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 20, "", 0, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 2, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 4, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 5, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 6, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 1, 18);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 2, 17);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 3, 16);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 4, 15);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 5, 15);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 1, -1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 2, -1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 3, -1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 4, -1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 1, -3);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 2, -3);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 1, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 5, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 9, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 10, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 11, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 1, 18);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 4, 15);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 8, 11);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 9, 10);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 10, 10);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 1, -4);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 2, -4);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 4, -4);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 5, -4);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 6, -4);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 1, -8);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 2, -8);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 1, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 10, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 19, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 20, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 21, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 1, 18);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 9, 10);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 18, 1);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 19, 0);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 20, 0);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 1, -9);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 5, -9);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 10, -9);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 11, -9);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 1, -18);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 2, -18);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 0, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 1, 19);
-    test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 2, -2);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 4, -4);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 5, -5);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 6, -5);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 2, -2);
+void test45() {
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 19, 0);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1, 20, 0);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 1, -9);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 5, -9);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 10, -9);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 10, 11, -9);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 1, -18);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 19, 2, -18);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 20, 1, 19);
+  test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 20, "", 0, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 2, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 4, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 5, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 0, 6, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 1, 18);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 2, 17);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 3, 16);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 4, 15);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 1, 5, 15);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 1, -1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 2, -1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 3, -1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 2, 4, -1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 1, -3);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 4, 2, -3);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 5, 1, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 5, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 9, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 10, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 0, 11, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 1, 18);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 4, 15);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 8, 11);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 9, 10);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1, 10, 10);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 1, -4);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 2, -4);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 4, -4);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 5, -4);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 5, 6, -4);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 1, -8);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 9, 2, -8);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 10, 1, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 10, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 19, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 20, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 0, 21, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 1, 18);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 9, 10);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 18, 1);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 19, 0);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1, 20, 0);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 1, -9);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 5, -9);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 10, -9);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 10, 11, -9);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 1, -18);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 19, 2, -18);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 0, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 20, 1, 19);
+  test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 2, -2);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 4, -4);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 5, -5);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 0, 6, -5);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 2, -2);
 }
 
-void test46()
-{
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 3, -3);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 4, -4);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 5, -4);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 2, -2);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 3, -3);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 4, -3);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 2, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, 1, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 5, -5);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 9, -9);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 10, -10);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 11, -10);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 4, -4);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 8, -8);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 9, -9);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 10, -9);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 2, -2);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 4, -4);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 5, -5);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 6, -5);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 2, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, 1, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 1, "", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 2, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 4, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 5, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 6, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 2, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 3, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 4, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 5, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 1, 8);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 2, 8);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 3, 8);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 4, 8);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 1, 6);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 2, 6);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 1, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 5, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 9, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 11, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 4, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 8, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 9, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 10, 9);
+void test46() {
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 3, -3);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 4, -4);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 1, 5, -4);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 2, -2);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 3, -3);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 2, 4, -3);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 4, 2, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 5, 1, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 5, -5);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 9, -9);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 10, -10);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 0, 11, -10);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 4, -4);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 8, -8);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 9, -9);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 1, 10, -9);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 2, -2);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 4, -4);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 5, -5);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 5, 6, -5);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 9, 2, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 10, 1, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 1, "", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 2, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 4, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 5, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 0, 6, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 2, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 3, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 4, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 1, 5, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 1, 8);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 2, 8);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 3, 8);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 2, 4, 8);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 1, 6);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 4, 2, 6);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 5, 1, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 5, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 9, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 0, 11, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 4, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 8, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 9, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 1, 10, 9);
 }
 
-void test47()
-{
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 1, 5);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 2, 5);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 4, 5);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 5, 5);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 6, 5);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 1, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 2, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 1, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 19, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 20, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 21, 10);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 9, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 18, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 19, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 20, 9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 1, 0);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 5, -4);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 9, -8);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 10, -9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 11, -9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 1, -9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 2, -9);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 0, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 5, "", 0, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "", 0, 1, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 2, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 4, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 5, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 6, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 2, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 3, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 4, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 5, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 1, 8);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 2, 8);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 3, 8);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 4, 8);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 1, 6);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 2, 6);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 1, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 5, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 9, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 11, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 4, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 8, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 9, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 10, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 1, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 2, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 4, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 5, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 6, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 1, 1);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 2, 1);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 1, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 19, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 20, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 21, 10);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 9, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 18, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 19, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 20, 9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 1, 4);
+void test47() {
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 1, 5);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 2, 5);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 4, 5);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 5, 5);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 5, 6, 5);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 1, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 9, 2, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10, 1, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 19, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 20, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 0, 21, 10);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 9, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 18, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 19, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 1, 20, 9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 1, 0);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 5, -4);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 9, -8);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 10, -9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10, 11, -9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 1, -9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 19, 2, -9);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 0, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 5, "", 0, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "", 0, 1, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 2, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 4, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 5, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 0, 6, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 2, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 3, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 4, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 1, 5, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 1, 8);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 2, 8);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 3, 8);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 2, 4, 8);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 1, 6);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 4, 2, 6);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 5, 1, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 5, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 9, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 0, 11, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 4, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 8, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 9, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 1, 10, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 1, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 2, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 4, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 5, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 5, 6, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 1, 1);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 9, 2, 1);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10, 1, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 19, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 20, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 0, 21, 10);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 9, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 18, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 19, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 1, 20, 9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 1, 4);
 }
 
-void test48()
-{
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 5, 0);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 9, -4);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 10, -5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 11, -5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 1, -9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 2, -9);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 0, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 1, 5);
-    test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 9, "", 0, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "", 0, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 2, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 4, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 5, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 6, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 2, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 3, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 4, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 5, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 1, 8);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 2, 8);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 3, 8);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 4, 8);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 1, 6);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 2, 6);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 5, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 9, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 11, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 4, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 8, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 9, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 10, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 1, 5);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 2, 5);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 4, 5);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 5, 5);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 6, 5);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 1, 1);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 2, 1);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 19, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 20, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 21, 10);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 9, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 18, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 19, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 20, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 1, 8);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 5, 4);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 9, 0);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 10, -1);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 11, -1);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 1, -9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 2, -9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 0, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 10, "", 0, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 2, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 4, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 5, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 6, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 2, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 3, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 4, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 5, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 0, 10);
+void test48() {
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 5, 0);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 9, -4);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 10, -5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10, 11, -5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 1, -9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 19, 2, -9);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 0, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 20, 1, 5);
+  test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 9, "", 0, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "", 0, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 2, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 4, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 5, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 0, 6, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 2, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 3, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 4, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 1, 5, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 1, 8);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 2, 8);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 3, 8);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 2, 4, 8);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 1, 6);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 4, 2, 6);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 5, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 5, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 9, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 0, 11, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 4, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 8, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 9, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 1, 10, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 1, 5);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 2, 5);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 4, 5);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 5, 5);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 5, 6, 5);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 1, 1);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 9, 2, 1);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 19, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 20, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 0, 21, 10);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 9, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 18, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 19, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 1, 20, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 1, 8);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 5, 4);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 9, 0);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 10, -1);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10, 11, -1);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 1, -9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 19, 2, -9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 0, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 20, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 10, "", 0, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 2, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 4, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 5, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 0, 6, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 2, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 3, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 4, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 1, 5, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 0, 10);
 }
 
-void test49()
-{
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 1, 8);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 2, 8);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 3, 8);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 4, 8);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 1, 6);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 2, 6);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 5, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 9, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 11, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 4, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 8, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 9, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 10, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 1, 5);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 2, 5);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 4, 5);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 5, 5);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 6, 5);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 1, 1);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 2, 1);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 19, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 20, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 21, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 9, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 18, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 19, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 20, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 5, 5);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 9, 1);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 10, 0);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 11, 0);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 1, -9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 2, -9);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 11, "", 0, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 2, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 4, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 5, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 6, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 2, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 3, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 4, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 5, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 1, 8);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 2, 8);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 3, 8);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 4, 8);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 1, 6);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 2, 6);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 5, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 9, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 11, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 4, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 8, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 9, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 10, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 1, 5);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 2, 5);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 4, 5);
+void test49() {
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 1, 8);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 2, 8);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 3, 8);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 2, 4, 8);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 1, 6);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 4, 2, 6);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 5, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 5, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 9, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 0, 11, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 4, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 8, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 9, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 1, 10, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 1, 5);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 2, 5);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 4, 5);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 5, 5);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 5, 6, 5);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 1, 1);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 9, 2, 1);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 19, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 20, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 0, 21, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 9, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 18, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 19, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 1, 20, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 5, 5);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 9, 1);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 10, 0);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10, 11, 0);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 1, -9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 19, 2, -9);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 20, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 11, "", 0, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 2, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 4, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 5, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 0, 6, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 2, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 3, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 4, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 1, 5, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 1, 8);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 2, 8);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 3, 8);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 2, 4, 8);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 1, 6);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 4, 2, 6);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 5, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 5, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 9, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 0, 11, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 4, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 8, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 9, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 1, 10, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 1, 5);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 2, 5);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 4, 5);
 }
 
-void test50()
-{
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 5, 5);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 6, 5);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 1, 1);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 2, 1);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 10, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 19, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 20, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 21, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 9, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 18, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 19, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 20, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 1, 9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 5, 5);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 9, 1);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 10, 0);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 11, 0);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 1, -9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 2, -9);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 0, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 1, 10);
-    test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 2, -2);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 4, -4);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 5, -5);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 6, -5);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 2, -2);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 3, -3);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 4, -4);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 5, -4);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 2, -2);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 3, -3);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 4, -3);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 2, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, 1, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 5, -5);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 9, -9);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 10, -10);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 11, -10);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 4, -4);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 8, -8);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 9, -9);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 10, -9);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 2, -2);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 4, -4);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 5, -5);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 6, -5);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 2, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, 1, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 11, -10);
+void test50() {
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 5, 5);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 5, 6, 5);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 1, 1);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 9, 2, 1);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 10, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 19, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 20, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 0, 21, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 9, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 18, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 19, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 1, 20, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 1, 9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 5, 5);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 9, 1);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 10, 0);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10, 11, 0);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 1, -9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 19, 2, -9);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 0, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 20, 1, 10);
+  test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 2, -2);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 4, -4);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 5, -5);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 0, 6, -5);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 2, -2);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 3, -3);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 4, -4);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 1, 5, -4);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 2, -2);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 3, -3);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 2, 4, -3);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 4, 2, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 5, 1, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 5, -5);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 9, -9);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 10, -10);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 0, 11, -10);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 4, -4);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 8, -8);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 9, -9);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 1, 10, -9);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 2, -2);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 4, -4);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 5, -5);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 5, 6, -5);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 9, 2, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 10, 1, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 10, 11, -10);
 }
 
-void test51()
-{
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 1, "", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 2, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 4, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 5, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 6, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 1, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 2, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 3, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 4, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 5, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 1, 17);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 2, 17);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 3, 17);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 4, 17);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 1, 15);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 2, 15);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 1, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 5, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 9, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 10, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 11, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 1, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 4, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 8, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 9, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 10, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 1, 14);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 2, 14);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 4, 14);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 5, 14);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 6, 14);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 1, 10);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 2, 10);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 1, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 10, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 19, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 20, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 21, 19);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 1, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 9, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 18, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 19, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 20, 18);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 1, 9);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 5, 9);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 9, 9);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 10, 9);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 11, 9);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 1, 0);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 2, 0);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 2, "", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "", 0, 1, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 2, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 4, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 5, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 6, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 1, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 2, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 3, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 4, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 5, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 1, 17);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 2, 17);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 3, 17);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 4, 17);
+void test51() {
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 1, "", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 2, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 4, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 5, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 0, 6, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 1, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 2, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 3, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 4, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 1, 5, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 1, 17);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 2, 17);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 3, 17);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 2, 4, 17);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 1, 15);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 4, 2, 15);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 5, 1, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 5, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 9, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 10, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 0, 11, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 1, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 4, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 8, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 9, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 1, 10, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 1, 14);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 2, 14);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 4, 14);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 5, 14);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 5, 6, 14);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 1, 10);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 9, 2, 10);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 10, 1, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 10, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 19, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 20, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 0, 21, 19);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 1, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 9, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 18, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 19, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 1, 20, 18);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 1, 9);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 5, 9);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 9, 9);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 10, 9);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 10, 11, 9);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 1, 0);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19, 2, 0);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 2, "", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "", 0, 1, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 2, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 4, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 5, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 0, 6, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 1, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 2, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 3, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 4, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 1, 5, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 1, 17);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 2, 17);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 3, 17);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 2, 4, 17);
 }
 
-void test52()
-{
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 1, 15);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 2, 15);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 1, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 5, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 9, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 10, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 11, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 1, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 4, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 8, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 9, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 10, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 1, 14);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 2, 14);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 4, 14);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 5, 14);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 6, 14);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 1, 10);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 2, 10);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 1, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 1, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 10, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 19, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 20, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 21, 19);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 1, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 9, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 18, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 19, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 20, 18);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 1, 9);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 5, 9);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 9, 9);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 10, 9);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 11, 9);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 1, 0);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 2, 0);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 0, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 1, 1);
-    test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 2, -2);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 4, -4);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 5, -5);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 6, -5);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 2, -2);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 3, -3);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 4, -4);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 5, -4);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 2, -2);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 3, -3);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 4, -3);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 2, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, 1, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 5, -5);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 9, -9);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 10, -10);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 11, -10);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 4, -4);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 8, -8);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 9, -9);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 10, -9);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 2, -2);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 4, -4);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 5, -5);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 6, -5);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 1, -1);
+void test52() {
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 1, 15);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 4, 2, 15);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 5, 1, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 5, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 9, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 10, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 0, 11, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 1, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 4, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 8, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 9, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 1, 10, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 1, 14);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 2, 14);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 4, 14);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 5, 14);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 5, 6, 14);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 1, 10);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 9, 2, 10);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 10, 1, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 1, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 10, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 19, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 20, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 0, 21, 19);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 1, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 9, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 18, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 19, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 1, 20, 18);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 1, 9);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 5, 9);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 9, 9);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 10, 9);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 10, 11, 9);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 1, 0);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19, 2, 0);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 0, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 20, 1, 1);
+  test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 2, -2);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 4, -4);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 5, -5);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 0, 6, -5);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 2, -2);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 3, -3);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 4, -4);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 1, 5, -4);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 2, -2);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 3, -3);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 2, 4, -3);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 4, 2, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 5, 1, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 5, -5);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 9, -9);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 10, -10);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 0, 11, -10);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 4, -4);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 8, -8);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 9, -9);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 1, 10, -9);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 2, -2);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 4, -4);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 5, -5);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 5, 6, -5);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 1, -1);
 }
 
-void test53()
-{
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 2, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, 1, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 2, -2);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 4, -4);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 5, -5);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 6, -5);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 2, -2);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 3, -3);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 4, -4);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 5, -4);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 2, -2);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 3, -3);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 4, -3);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 2, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, 1, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 5, -5);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 9, -9);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 10, -10);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 11, -10);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 4, -4);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 8, -8);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 9, -9);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 10, -9);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 2, -2);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 4, -4);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 5, -5);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 6, -5);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 2, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, 1, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 10, -10);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 19, -19);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 20, -20);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 21, -20);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 9, -9);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 18, -18);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 19, -19);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 20, -19);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 5, -5);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 9, -9);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 10, -10);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 11, -10);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 1, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 2, -1);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, 0, 0);
+void test53() {
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 9, 2, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 10, 1, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 2, -2);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 4, -4);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 5, -5);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 0, 6, -5);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 2, -2);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 3, -3);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 4, -4);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 1, 5, -4);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 2, -2);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 3, -3);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 2, 4, -3);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 4, 2, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 5, 1, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 5, -5);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 9, -9);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 10, -10);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 0, 11, -10);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 4, -4);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 8, -8);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 9, -9);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 1, 10, -9);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 2, -2);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 4, -4);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 5, -5);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 5, 6, -5);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 9, 2, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 10, 1, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 10, -10);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 19, -19);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 20, -20);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 0, 21, -20);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 9, -9);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 18, -18);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 19, -19);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 1, 20, -19);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 5, -5);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 9, -9);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 10, -10);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 10, 11, -10);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 1, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 19, 2, -1);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, 0, 0);
 }
 
-void test54()
-{
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 21, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 2, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 4, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 5, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 6, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 2, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 3, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 4, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 5, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 2, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 3, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 4, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 2, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcde", 6, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 5, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 9, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 10, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 11, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 4, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 8, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 9, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 10, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 2, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 4, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 5, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 6, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 2, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 11, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 10, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 19, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 20, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 21, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 9, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 18, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 19, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 20, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 5, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 9, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 10, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 11, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 2, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 0, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 1, 0);
-    test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 21, 0, 0);
+void test54() {
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", 21, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 2, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 4, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 5, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 0, 6, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 2, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 3, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 4, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 1, 5, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 2, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 3, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 2, 4, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 4, 2, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 5, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcde", 6, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 5, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 9, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 10, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0, 11, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 4, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 8, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 9, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 1, 10, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 2, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 4, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 5, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 5, 6, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 9, 2, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 10, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 11, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 10, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 19, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 20, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0, 21, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 9, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 18, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 19, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 1, 20, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 5, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 9, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 10, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 10, 11, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 19, 2, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 0, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 20, 1, 0);
+  test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 21, 0, 0);
 }
 
-
 int main(int, char**) {
-    test0();
-    test1();
-    test2();
-    test3();
-    test4();
-    test5();
-    test6();
-    test7();
-    test8();
-    test9();
-    test10();
-    test11();
-    test12();
-    test13();
-    test14();
-    test15();
-    test16();
-    test17();
-    test18();
-    test19();
-    test20();
-    test21();
-    test22();
-    test23();
-    test24();
-    test25();
-    test26();
-    test27();
-    test28();
-    test29();
-    test30();
-    test31();
-    test32();
-    test33();
-    test34();
-    test35();
-    test36();
-    test37();
-    test38();
-    test39();
-    test40();
-    test41();
-    test42();
-    test43();
-    test44();
-    test45();
-    test46();
-    test47();
-    test48();
-    test49();
-    test50();
-    test51();
-    test52();
-    test53();
-    test54();
-
+  test0();
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+  test7();
+  test8();
+  test9();
+  test10();
+  test11();
+  test12();
+  test13();
+  test14();
+  test15();
+  test16();
+  test17();
+  test18();
+  test19();
+  test20();
+  test21();
+  test22();
+  test23();
+  test24();
+  test25();
+  test26();
+  test27();
+  test28();
+  test29();
+  test30();
+  test31();
+  test32();
+  test33();
+  test34();
+  test35();
+  test36();
+  test37();
+  test38();
+  test39();
+  test40();
+  test41();
+  test42();
+  test43();
+  test44();
+  test45();
+  test46();
+  test47();
+  test48();
+  test49();
+  test50();
+  test51();
+  test52();
+  test53();
+  test54();
 
-    {
+  {
     test("abcde", 5, 1, "", 0, 0, 0);
     test("abcde", 2, 4, "", 0, 0, 3);
     test("abcde", 2, 4, "abcde", 3, 4, -2);
     test("ABCde", 2, 4, "abcde", 2, 4, -1);
-    }
+  }
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    {
+  {
     test(L"abcde", 5, 1, L"", 0, 0, 0);
     test(L"abcde", 2, 4, L"", 0, 0, 3);
     test(L"abcde", 2, 4, L"abcde", 3, 4, -2);
     test(L"ABCde", 2, 4, L"abcde", 2, 4, -1);
-    }
+  }
 #endif
 
 #if TEST_STD_VER >= 11
-    {
+  {
     test(u"abcde", 5, 1, u"", 0, 0, 0);
     test(u"abcde", 2, 4, u"", 0, 0, 3);
     test(u"abcde", 2, 4, u"abcde", 3, 4, -2);
     test(u"ABCde", 2, 4, u"abcde", 2, 4, -1);
-    }
+  }
 
-    {
+  {
     test(U"abcde", 5, 1, U"", 0, 0, 0);
     test(U"abcde", 2, 4, U"", 0, 0, 3);
     test(U"abcde", 2, 4, U"abcde", 3, 4, -2);
     test(U"ABCde", 2, 4, U"abcde", 2, 4, -1);
-    }
+  }
 #endif
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1 { "abcde", 5 };
-    static_assert ( sv1.compare(5, 1, "", 0, 0) == 0, "" );
-    static_assert ( sv1.compare(2, 4, "", 0, 0) > 0, "" );
-    static_assert ( sv1.compare(2, 4, "abcde", 3, 4) < 0, "" );
-    }
+    constexpr SV sv1{"abcde", 5};
+    static_assert(sv1.compare(5, 1, "", 0, 0) == 0, "");
+    static_assert(sv1.compare(2, 4, "", 0, 0) > 0, "");
+    static_assert(sv1.compare(2, 4, "abcde", 3, 4) < 0, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.ops/compare.sv.pass.cpp b/libcxx/test/std/strings/string.view/string.view.ops/compare.sv.pass.cpp
index 7db327d9c9ef8b9..38d8dec11c70be6 100644
--- a/libcxx/test/std/strings/string.view/string.view.ops/compare.sv.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.ops/compare.sv.pass.cpp
@@ -18,109 +18,106 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-int sign ( int x ) { return x > 0 ? 1 : ( x < 0 ? -1 : 0 ); }
+int sign(int x) { return x > 0 ? 1 : (x < 0 ? -1 : 0); }
 
-template<typename CharT>
-void test1 ( std::basic_string_view<CharT> sv1,
-            std::basic_string_view<CharT> sv2, int expected ) {
-    assert ( sign( sv1.compare(sv2)) == sign(expected));
+template <typename CharT>
+void test1(std::basic_string_view<CharT> sv1, std::basic_string_view<CharT> sv2, int expected) {
+  assert(sign(sv1.compare(sv2)) == sign(expected));
 }
 
+template <typename CharT>
+void test(const CharT* s1, const CharT* s2, int expected) {
+  typedef std::basic_string_view<CharT> string_view_t;
 
-template<typename CharT>
-void test ( const CharT *s1, const CharT  *s2, int expected ) {
-    typedef std::basic_string_view<CharT> string_view_t;
-
-    string_view_t sv1 ( s1 );
-    string_view_t sv2 ( s2 );
-    test1(sv1, sv2, expected);
+  string_view_t sv1(s1);
+  string_view_t sv2(s2);
+  test1(sv1, sv2, expected);
 }
 
 int main(int, char**) {
-
-    test("",                     "", 0);
-    test("",                     "abcde", -5);
-    test("",                     "abcdefghij", -10);
-    test("",                     "abcdefghijklmnopqrst", -20);
-    test("abcde",                "", 5);
-    test("abcde",                "abcde", 0);
-    test("abcde",                "abcdefghij", -5);
-    test("abcde",                "abcdefghijklmnopqrst", -15);
-    test("abcdefghij",           "", 10);
-    test("abcdefghij",           "abcde", 5);
-    test("abcdefghij",           "abcdefghij", 0);
-    test("abcdefghij",           "abcdefghijklmnopqrst", -10);
-    test("abcdefghijklmnopqrst", "", 20);
-    test("abcdefghijklmnopqrst", "abcde", 15);
-    test("abcdefghijklmnopqrst", "abcdefghij", 10);
-    test("abcdefghijklmnopqrst", "abcdefghijklmnopqrst", 0);
+  test("", "", 0);
+  test("", "abcde", -5);
+  test("", "abcdefghij", -10);
+  test("", "abcdefghijklmnopqrst", -20);
+  test("abcde", "", 5);
+  test("abcde", "abcde", 0);
+  test("abcde", "abcdefghij", -5);
+  test("abcde", "abcdefghijklmnopqrst", -15);
+  test("abcdefghij", "", 10);
+  test("abcdefghij", "abcde", 5);
+  test("abcdefghij", "abcdefghij", 0);
+  test("abcdefghij", "abcdefghijklmnopqrst", -10);
+  test("abcdefghijklmnopqrst", "", 20);
+  test("abcdefghijklmnopqrst", "abcde", 15);
+  test("abcdefghijklmnopqrst", "abcdefghij", 10);
+  test("abcdefghijklmnopqrst", "abcdefghijklmnopqrst", 0);
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test(L"",                     L"", 0);
-    test(L"",                     L"abcde", -5);
-    test(L"",                     L"abcdefghij", -10);
-    test(L"",                     L"abcdefghijklmnopqrst", -20);
-    test(L"abcde",                L"", 5);
-    test(L"abcde",                L"abcde", 0);
-    test(L"abcde",                L"abcdefghij", -5);
-    test(L"abcde",                L"abcdefghijklmnopqrst", -15);
-    test(L"abcdefghij",           L"", 10);
-    test(L"abcdefghij",           L"abcde", 5);
-    test(L"abcdefghij",           L"abcdefghij", 0);
-    test(L"abcdefghij",           L"abcdefghijklmnopqrst", -10);
-    test(L"abcdefghijklmnopqrst", L"", 20);
-    test(L"abcdefghijklmnopqrst", L"abcde", 15);
-    test(L"abcdefghijklmnopqrst", L"abcdefghij", 10);
-    test(L"abcdefghijklmnopqrst", L"abcdefghijklmnopqrst", 0);
+  test(L"", L"", 0);
+  test(L"", L"abcde", -5);
+  test(L"", L"abcdefghij", -10);
+  test(L"", L"abcdefghijklmnopqrst", -20);
+  test(L"abcde", L"", 5);
+  test(L"abcde", L"abcde", 0);
+  test(L"abcde", L"abcdefghij", -5);
+  test(L"abcde", L"abcdefghijklmnopqrst", -15);
+  test(L"abcdefghij", L"", 10);
+  test(L"abcdefghij", L"abcde", 5);
+  test(L"abcdefghij", L"abcdefghij", 0);
+  test(L"abcdefghij", L"abcdefghijklmnopqrst", -10);
+  test(L"abcdefghijklmnopqrst", L"", 20);
+  test(L"abcdefghijklmnopqrst", L"abcde", 15);
+  test(L"abcdefghijklmnopqrst", L"abcdefghij", 10);
+  test(L"abcdefghijklmnopqrst", L"abcdefghijklmnopqrst", 0);
 #endif
 
 #if TEST_STD_VER >= 11
-    test(u"",                     u"", 0);
-    test(u"",                     u"abcde", -5);
-    test(u"",                     u"abcdefghij", -10);
-    test(u"",                     u"abcdefghijklmnopqrst", -20);
-    test(u"abcde",                u"", 5);
-    test(u"abcde",                u"abcde", 0);
-    test(u"abcde",                u"abcdefghij", -5);
-    test(u"abcde",                u"abcdefghijklmnopqrst", -15);
-    test(u"abcdefghij",           u"", 10);
-    test(u"abcdefghij",           u"abcde", 5);
-    test(u"abcdefghij",           u"abcdefghij", 0);
-    test(u"abcdefghij",           u"abcdefghijklmnopqrst", -10);
-    test(u"abcdefghijklmnopqrst", u"", 20);
-    test(u"abcdefghijklmnopqrst", u"abcde", 15);
-    test(u"abcdefghijklmnopqrst", u"abcdefghij", 10);
-    test(u"abcdefghijklmnopqrst", u"abcdefghijklmnopqrst", 0);
-
-    test(U"",                     U"", 0);
-    test(U"",                     U"abcde", -5);
-    test(U"",                     U"abcdefghij", -10);
-    test(U"",                     U"abcdefghijklmnopqrst", -20);
-    test(U"abcde",                U"", 5);
-    test(U"abcde",                U"abcde", 0);
-    test(U"abcde",                U"abcdefghij", -5);
-    test(U"abcde",                U"abcdefghijklmnopqrst", -15);
-    test(U"abcdefghij",           U"", 10);
-    test(U"abcdefghij",           U"abcde", 5);
-    test(U"abcdefghij",           U"abcdefghij", 0);
-    test(U"abcdefghij",           U"abcdefghijklmnopqrst", -10);
-    test(U"abcdefghijklmnopqrst", U"", 20);
-    test(U"abcdefghijklmnopqrst", U"abcde", 15);
-    test(U"abcdefghijklmnopqrst", U"abcdefghij", 10);
-    test(U"abcdefghijklmnopqrst", U"abcdefghijklmnopqrst", 0);
+  test(u"", u"", 0);
+  test(u"", u"abcde", -5);
+  test(u"", u"abcdefghij", -10);
+  test(u"", u"abcdefghijklmnopqrst", -20);
+  test(u"abcde", u"", 5);
+  test(u"abcde", u"abcde", 0);
+  test(u"abcde", u"abcdefghij", -5);
+  test(u"abcde", u"abcdefghijklmnopqrst", -15);
+  test(u"abcdefghij", u"", 10);
+  test(u"abcdefghij", u"abcde", 5);
+  test(u"abcdefghij", u"abcdefghij", 0);
+  test(u"abcdefghij", u"abcdefghijklmnopqrst", -10);
+  test(u"abcdefghijklmnopqrst", u"", 20);
+  test(u"abcdefghijklmnopqrst", u"abcde", 15);
+  test(u"abcdefghijklmnopqrst", u"abcdefghij", 10);
+  test(u"abcdefghijklmnopqrst", u"abcdefghijklmnopqrst", 0);
+
+  test(U"", U"", 0);
+  test(U"", U"abcde", -5);
+  test(U"", U"abcdefghij", -10);
+  test(U"", U"abcdefghijklmnopqrst", -20);
+  test(U"abcde", U"", 5);
+  test(U"abcde", U"abcde", 0);
+  test(U"abcde", U"abcdefghij", -5);
+  test(U"abcde", U"abcdefghijklmnopqrst", -15);
+  test(U"abcdefghij", U"", 10);
+  test(U"abcdefghij", U"abcde", 5);
+  test(U"abcdefghij", U"abcdefghij", 0);
+  test(U"abcdefghij", U"abcdefghijklmnopqrst", -10);
+  test(U"abcdefghijklmnopqrst", U"", 20);
+  test(U"abcdefghijklmnopqrst", U"abcde", 15);
+  test(U"abcdefghijklmnopqrst", U"abcdefghij", 10);
+  test(U"abcdefghijklmnopqrst", U"abcdefghijklmnopqrst", 0);
 #endif
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1 { "abcde", 5 };
-    constexpr SV  sv2 { "abcde", 5 };
-    constexpr SV  sv3 { "edcba0", 6 };
-    static_assert ( sv1.compare(sv2) == 0, "" );
-    static_assert ( sv2.compare(sv1) == 0, "" );
-    static_assert ( sv3.compare(sv2)  > 0, "" );
-    static_assert ( sv2.compare(sv3)  < 0, "" );
-    }
+    constexpr SV sv1{"abcde", 5};
+    constexpr SV sv2{"abcde", 5};
+    constexpr SV sv3{"edcba0", 6};
+    static_assert(sv1.compare(sv2) == 0, "");
+    static_assert(sv2.compare(sv1) == 0, "");
+    static_assert(sv3.compare(sv2) > 0, "");
+    static_assert(sv2.compare(sv3) < 0, "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.ops/copy.pass.cpp b/libcxx/test/std/strings/string.view/string.view.ops/copy.pass.cpp
index 0128e98ee6aa274..1d97723b90edce5 100644
--- a/libcxx/test/std/strings/string.view/string.view.ops/copy.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.ops/copy.pass.cpp
@@ -25,112 +25,113 @@
 
 #include "test_macros.h"
 
-template<typename CharT>
-void test1 ( std::basic_string_view<CharT> sv, std::size_t n, size_t pos ) {
-    const std::size_t rlen = std::min ( n, sv.size() - pos );
+template <typename CharT>
+void test1(std::basic_string_view<CharT> sv, std::size_t n, size_t pos) {
+  const std::size_t rlen = std::min(n, sv.size() - pos);
 
-    CharT *dest1 = new CharT [rlen + 1];    dest1[rlen] = 0;
-    CharT *dest2 = new CharT [rlen + 1];    dest2[rlen] = 0;
+  CharT* dest1 = new CharT[rlen + 1];
+  dest1[rlen]  = 0;
+  CharT* dest2 = new CharT[rlen + 1];
+  dest2[rlen]  = 0;
 
-    if (pos > sv.size()) {
+  if (pos > sv.size()) {
 #ifndef TEST_HAS_NO_EXCEPTIONS
-        try {
-            sv.copy(dest1, n, pos);
-            assert(false);
-        } catch (const std::out_of_range&) {
-        } catch (...) {
-            assert(false);
-        }
-#endif
-    } else {
-        sv.copy(dest1, n, pos);
-        std::copy_n(sv.begin() + pos, rlen, dest2);
-        for ( std::size_t i = 0; i <= rlen; ++i )
-            assert ( dest1[i] == dest2[i] );
+    try {
+      sv.copy(dest1, n, pos);
+      assert(false);
+    } catch (const std::out_of_range&) {
+    } catch (...) {
+      assert(false);
     }
-    delete [] dest1;
-    delete [] dest2;
+#endif
+  } else {
+    sv.copy(dest1, n, pos);
+    std::copy_n(sv.begin() + pos, rlen, dest2);
+    for (std::size_t i = 0; i <= rlen; ++i)
+      assert(dest1[i] == dest2[i]);
+  }
+  delete[] dest1;
+  delete[] dest2;
 }
 
+template <typename CharT>
+void test(const CharT* s) {
+  typedef std::basic_string_view<CharT> string_view_t;
 
-template<typename CharT>
-void test ( const CharT *s ) {
-    typedef std::basic_string_view<CharT> string_view_t;
-
-    string_view_t sv1 ( s );
+  string_view_t sv1(s);
 
-    test1(sv1,  0, 0);
-    test1(sv1,  1, 0);
-    test1(sv1, 20, 0);
-    test1(sv1, sv1.size(), 0);
-    test1(sv1, 20, string_view_t::npos);
+  test1(sv1, 0, 0);
+  test1(sv1, 1, 0);
+  test1(sv1, 20, 0);
+  test1(sv1, sv1.size(), 0);
+  test1(sv1, 20, string_view_t::npos);
 
-    test1(sv1,   0, 3);
-    test1(sv1,   2, 3);
-    test1(sv1, 100, 3);
-    test1(sv1, 100, string_view_t::npos);
+  test1(sv1, 0, 3);
+  test1(sv1, 2, 3);
+  test1(sv1, 100, 3);
+  test1(sv1, 100, string_view_t::npos);
 
-    test1(sv1, sv1.size(), string_view_t::npos);
+  test1(sv1, sv1.size(), string_view_t::npos);
 
-    test1(sv1, sv1.size() + 1, 0);
-    test1(sv1, sv1.size() + 1, 1);
-    test1(sv1, sv1.size() + 1, string_view_t::npos);
+  test1(sv1, sv1.size() + 1, 0);
+  test1(sv1, sv1.size() + 1, 1);
+  test1(sv1, sv1.size() + 1, string_view_t::npos);
 }
 
-template<typename CharT>
-TEST_CONSTEXPR_CXX20 bool test_constexpr_copy(const CharT *abcde, const CharT *ghijk, const CharT *bcdjk)
-{
-    CharT buf[6] = {};
-    std::basic_string_view<CharT> lval(ghijk); lval.copy(buf, 6);
-    std::basic_string_view<CharT>(abcde).copy(buf, 3, 1);
-    assert(std::basic_string_view<CharT>(buf) == bcdjk);
-    return true;
+template <typename CharT>
+TEST_CONSTEXPR_CXX20 bool test_constexpr_copy(const CharT* abcde, const CharT* ghijk, const CharT* bcdjk) {
+  CharT buf[6] = {};
+  std::basic_string_view<CharT> lval(ghijk);
+  lval.copy(buf, 6);
+  std::basic_string_view<CharT>(abcde).copy(buf, 3, 1);
+  assert(std::basic_string_view<CharT>(buf) == bcdjk);
+  return true;
 }
 
 int main(int, char**) {
-    test ( "ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
-    test ( "ABCDE");
-    test ( "a" );
-    test ( "" );
+  test("ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE");
+  test("ABCDE");
+  test("a");
+  test("");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test ( L"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
-    test ( L"ABCDE" );
-    test ( L"a" );
-    test ( L"" );
+  test(L"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE");
+  test(L"ABCDE");
+  test(L"a");
+  test(L"");
 #endif
 
 #if TEST_STD_VER >= 11
-    test ( u"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
-    test ( u"ABCDE" );
-    test ( u"a" );
-    test ( u"" );
-
-    test ( U"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
-    test ( U"ABCDE" );
-    test ( U"a" );
-    test ( U"" );
+  test(u"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE");
+  test(u"ABCDE");
+  test(u"a");
+  test(u"");
+
+  test(U"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE");
+  test(U"ABCDE");
+  test(U"a");
+  test(U"");
 #endif
 
-    test_constexpr_copy("ABCDE", "GHIJK", "BCDJK");
+  test_constexpr_copy("ABCDE", "GHIJK", "BCDJK");
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test_constexpr_copy(L"ABCDE", L"GHIJK", L"BCDJK");
+  test_constexpr_copy(L"ABCDE", L"GHIJK", L"BCDJK");
 #endif
 #if TEST_STD_VER >= 11
-    test_constexpr_copy(u"ABCDE", u"GHIJK", u"BCDJK");
-    test_constexpr_copy(U"ABCDE", U"GHIJK", U"BCDJK");
+  test_constexpr_copy(u"ABCDE", u"GHIJK", u"BCDJK");
+  test_constexpr_copy(U"ABCDE", U"GHIJK", U"BCDJK");
 #endif
 #if TEST_STD_VER >= 17
-    test_constexpr_copy(u8"ABCDE", u8"GHIJK", u8"BCDJK");
+  test_constexpr_copy(u8"ABCDE", u8"GHIJK", u8"BCDJK");
 #endif
 #if TEST_STD_VER >= 20
-    static_assert(test_constexpr_copy("ABCDE", "GHIJK", "BCDJK"));
-#ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    static_assert(test_constexpr_copy(L"ABCDE", L"GHIJK", L"BCDJK"));
-#endif
-    static_assert(test_constexpr_copy(u"ABCDE", u"GHIJK", u"BCDJK"));
-    static_assert(test_constexpr_copy(U"ABCDE", U"GHIJK", U"BCDJK"));
-    static_assert(test_constexpr_copy(u8"ABCDE", u8"GHIJK", u8"BCDJK"));
+  static_assert(test_constexpr_copy("ABCDE", "GHIJK", "BCDJK"));
+#  ifndef TEST_HAS_NO_WIDE_CHARACTERS
+  static_assert(test_constexpr_copy(L"ABCDE", L"GHIJK", L"BCDJK"));
+#  endif
+  static_assert(test_constexpr_copy(u"ABCDE", u"GHIJK", u"BCDJK"));
+  static_assert(test_constexpr_copy(U"ABCDE", U"GHIJK", U"BCDJK"));
+  static_assert(test_constexpr_copy(u8"ABCDE", u8"GHIJK", u8"BCDJK"));
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.ops/substr.pass.cpp b/libcxx/test/std/strings/string.view/string.view.ops/substr.pass.cpp
index 0de64f0e59d49f6..1c8e0aebabd4127 100644
--- a/libcxx/test/std/strings/string.view/string.view.ops/substr.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.ops/substr.pass.cpp
@@ -23,103 +23,101 @@
 
 #include "test_macros.h"
 
-template<typename CharT>
+template <typename CharT>
 void test1(std::basic_string_view<CharT> sv, std::size_t n, size_t pos) {
-    std::basic_string_view<CharT> sv1;
+  std::basic_string_view<CharT> sv1;
 #ifdef TEST_HAS_NO_EXCEPTIONS
-    if (pos > sv.size())
-        return ;  // would throw if exceptions were enabled
-    sv1 = sv.substr(pos, n);
+  if (pos > sv.size())
+    return; // would throw if exceptions were enabled
+  sv1 = sv.substr(pos, n);
 #else
-    try {
-        sv1 = sv.substr(pos, n);
-        assert(pos <= sv.size());
-    }
-    catch (const std::out_of_range&) {
-        assert(pos > sv.size());
-        return ;
-    }
+  try {
+    sv1 = sv.substr(pos, n);
+    assert(pos <= sv.size());
+  } catch (const std::out_of_range&) {
+    assert(pos > sv.size());
+    return;
+  }
 #endif
-    const std::size_t rlen = std::min(n, sv.size() - pos);
-    assert (sv1.size() == rlen);
-    for (std::size_t i = 0; i < rlen; ++i)
-        assert(sv[pos+i] == sv1[i]);
+  const std::size_t rlen = std::min(n, sv.size() - pos);
+  assert(sv1.size() == rlen);
+  for (std::size_t i = 0; i < rlen; ++i)
+    assert(sv[pos + i] == sv1[i]);
 }
 
+template <typename CharT>
+void test(const CharT* s) {
+  typedef std::basic_string_view<CharT> string_view_t;
 
-template<typename CharT>
-void test ( const CharT *s ) {
-    typedef std::basic_string_view<CharT> string_view_t;
+  string_view_t sv1(s);
 
-    string_view_t sv1 ( s );
+  test1(sv1, 0, 0);
+  test1(sv1, 1, 0);
+  test1(sv1, 20, 0);
+  test1(sv1, sv1.size(), 0);
 
-    test1(sv1,  0, 0);
-    test1(sv1,  1, 0);
-    test1(sv1, 20, 0);
-    test1(sv1, sv1.size(), 0);
+  test1(sv1, 0, 3);
+  test1(sv1, 2, 3);
+  test1(sv1, 100, 3);
 
-    test1(sv1,   0, 3);
-    test1(sv1,   2, 3);
-    test1(sv1, 100, 3);
+  test1(sv1, 0, string_view_t::npos);
+  test1(sv1, 2, string_view_t::npos);
+  test1(sv1, sv1.size(), string_view_t::npos);
 
-    test1(sv1, 0, string_view_t::npos);
-    test1(sv1, 2, string_view_t::npos);
-    test1(sv1, sv1.size(), string_view_t::npos);
-
-    test1(sv1, sv1.size() + 1, 0);
-    test1(sv1, sv1.size() + 1, 1);
-    test1(sv1, sv1.size() + 1, string_view_t::npos);
+  test1(sv1, sv1.size() + 1, 0);
+  test1(sv1, sv1.size() + 1, 1);
+  test1(sv1, sv1.size() + 1, string_view_t::npos);
 }
 
 int main(int, char**) {
-    test ( "ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
-    test ( "ABCDE");
-    test ( "a" );
-    test ( "" );
+  test("ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE");
+  test("ABCDE");
+  test("a");
+  test("");
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test ( L"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
-    test ( L"ABCDE" );
-    test ( L"a" );
-    test ( L"" );
+  test(L"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE");
+  test(L"ABCDE");
+  test(L"a");
+  test(L"");
 #endif
 
 #if TEST_STD_VER >= 11
-    test ( u"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
-    test ( u"ABCDE" );
-    test ( u"a" );
-    test ( u"" );
-
-    test ( U"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE" );
-    test ( U"ABCDE" );
-    test ( U"a" );
-    test ( U"" );
+  test(u"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE");
+  test(u"ABCDE");
+  test(u"a");
+  test(u"");
+
+  test(U"ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE");
+  test(U"ABCDE");
+  test(U"a");
+  test(U"");
 #endif
 
 #if TEST_STD_VER > 11
-    {
-    constexpr std::string_view sv1 { "ABCDE", 5 };
+  {
+    constexpr std::string_view sv1{"ABCDE", 5};
 
     {
-    constexpr std::string_view sv2 = sv1.substr ( 0, 3 );
-    static_assert ( sv2.size() == 3, "" );
-    static_assert ( sv2[0] == 'A', "" );
-    static_assert ( sv2[1] == 'B', "" );
-    static_assert ( sv2[2] == 'C', "" );
+      constexpr std::string_view sv2 = sv1.substr(0, 3);
+      static_assert(sv2.size() == 3, "");
+      static_assert(sv2[0] == 'A', "");
+      static_assert(sv2[1] == 'B', "");
+      static_assert(sv2[2] == 'C', "");
     }
 
     {
-    constexpr std::string_view sv2 = sv1.substr ( 3, 0 );
-    static_assert ( sv2.size() == 0, "" );
+      constexpr std::string_view sv2 = sv1.substr(3, 0);
+      static_assert(sv2.size() == 0, "");
     }
 
     {
-    constexpr std::string_view sv2 = sv1.substr ( 3, 3 );
-    static_assert ( sv2.size() == 2, "" );
-    static_assert ( sv2[0] == 'D', "" );
-    static_assert ( sv2[1] == 'E', "" );
-    }
+      constexpr std::string_view sv2 = sv1.substr(3, 3);
+      static_assert(sv2.size() == 2, "");
+      static_assert(sv2[0] == 'D', "");
+      static_assert(sv2[1] == 'E', "");
     }
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.synop/nothing_to_do.pass.cpp b/libcxx/test/std/strings/string.view/string.view.synop/nothing_to_do.pass.cpp
index 45edec7f4b06881..c2738673a43647d 100644
--- a/libcxx/test/std/strings/string.view/string.view.synop/nothing_to_do.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.synop/nothing_to_do.pass.cpp
@@ -8,6 +8,4 @@
 
 #include <string_view>
 
-int main(int, char**) {
-  return 0;
-}
+int main(int, char**) { return 0; }

diff  --git a/libcxx/test/std/strings/string.view/string.view.template/contains.char.pass.cpp b/libcxx/test/std/strings/string.view/string.view.template/contains.char.pass.cpp
index 16ae8347f942586..4e20bbe17e1b656 100644
--- a/libcxx/test/std/strings/string.view/string.view.template/contains.char.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.template/contains.char.pass.cpp
@@ -17,29 +17,27 @@
 
 #include "test_macros.h"
 
-constexpr bool test()
-{
-    using SV = std::string_view;
+constexpr bool test() {
+  using SV = std::string_view;
 
-    SV sv1 {};
-    SV sv2 {"abcde", 5};
+  SV sv1{};
+  SV sv2{"abcde", 5};
 
-    ASSERT_NOEXCEPT(sv1.contains('e'));
+  ASSERT_NOEXCEPT(sv1.contains('e'));
 
-    assert(!sv1.contains('c'));
-    assert(!sv1.contains('e'));
-    assert(!sv1.contains('x'));
-    assert( sv2.contains('c'));
-    assert( sv2.contains('e'));
-    assert(!sv2.contains('x'));
+  assert(!sv1.contains('c'));
+  assert(!sv1.contains('e'));
+  assert(!sv1.contains('x'));
+  assert(sv2.contains('c'));
+  assert(sv2.contains('e'));
+  assert(!sv2.contains('x'));
 
-    return true;
+  return true;
 }
 
-int main(int, char**)
-{
-    test();
-    static_assert(test());
+int main(int, char**) {
+  test();
+  static_assert(test());
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.template/contains.ptr.pass.cpp b/libcxx/test/std/strings/string.view/string.view.template/contains.ptr.pass.cpp
index 85a86e0aade5ce3..67376af65a9086a 100644
--- a/libcxx/test/std/strings/string.view/string.view.template/contains.ptr.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.template/contains.ptr.pass.cpp
@@ -17,59 +17,57 @@
 
 #include "test_macros.h"
 
-constexpr bool test()
-{
-    using SV = std::string_view;
+constexpr bool test() {
+  using SV = std::string_view;
 
-    const char* s = "abcde";
-    SV sv0;
-    SV sv1 {s + 4, 1};
-    SV sv3 {s + 2, 3};
-    SV svNot {"xyz", 3};
+  const char* s = "abcde";
+  SV sv0;
+  SV sv1{s + 4, 1};
+  SV sv3{s + 2, 3};
+  SV svNot{"xyz", 3};
 
-    assert( sv0.contains(""));
-    assert(!sv0.contains("e"));
+  assert(sv0.contains(""));
+  assert(!sv0.contains("e"));
 
-    assert( sv1.contains(""));
-    assert(!sv1.contains("d"));
-    assert( sv1.contains("e"));
-    assert(!sv1.contains("de"));
-    assert(!sv1.contains("cd"));
-    assert(!sv1.contains("cde"));
-    assert(!sv1.contains("bcde"));
-    assert(!sv1.contains("abcde"));
-    assert(!sv1.contains("xyz"));
+  assert(sv1.contains(""));
+  assert(!sv1.contains("d"));
+  assert(sv1.contains("e"));
+  assert(!sv1.contains("de"));
+  assert(!sv1.contains("cd"));
+  assert(!sv1.contains("cde"));
+  assert(!sv1.contains("bcde"));
+  assert(!sv1.contains("abcde"));
+  assert(!sv1.contains("xyz"));
 
-    assert( sv3.contains(""));
-    assert( sv3.contains("d"));
-    assert( sv3.contains("e"));
-    assert( sv3.contains("de"));
-    assert( sv3.contains("cd"));
-    assert(!sv3.contains("ce"));
-    assert( sv3.contains("cde"));
-    assert(!sv3.contains("edc"));
-    assert(!sv3.contains("bcde"));
-    assert(!sv3.contains("abcde"));
-    assert(!sv3.contains("xyz"));
+  assert(sv3.contains(""));
+  assert(sv3.contains("d"));
+  assert(sv3.contains("e"));
+  assert(sv3.contains("de"));
+  assert(sv3.contains("cd"));
+  assert(!sv3.contains("ce"));
+  assert(sv3.contains("cde"));
+  assert(!sv3.contains("edc"));
+  assert(!sv3.contains("bcde"));
+  assert(!sv3.contains("abcde"));
+  assert(!sv3.contains("xyz"));
 
-    assert( svNot.contains(""));
-    assert(!svNot.contains("d"));
-    assert(!svNot.contains("e"));
-    assert(!svNot.contains("de"));
-    assert(!svNot.contains("cd"));
-    assert(!svNot.contains("cde"));
-    assert(!svNot.contains("bcde"));
-    assert(!svNot.contains("abcde"));
-    assert( svNot.contains("xyz"));
-    assert(!svNot.contains("zyx"));
+  assert(svNot.contains(""));
+  assert(!svNot.contains("d"));
+  assert(!svNot.contains("e"));
+  assert(!svNot.contains("de"));
+  assert(!svNot.contains("cd"));
+  assert(!svNot.contains("cde"));
+  assert(!svNot.contains("bcde"));
+  assert(!svNot.contains("abcde"));
+  assert(svNot.contains("xyz"));
+  assert(!svNot.contains("zyx"));
 
-    return true;
+  return true;
 }
 
-int main(int, char**)
-{
-    test();
-    static_assert(test());
+int main(int, char**) {
+  test();
+  static_assert(test());
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.template/contains.string_view.pass.cpp b/libcxx/test/std/strings/string.view/string.view.template/contains.string_view.pass.cpp
index a4bdc7ab821eeb0..74d82273fa9e892 100644
--- a/libcxx/test/std/strings/string.view/string.view.template/contains.string_view.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.template/contains.string_view.pass.cpp
@@ -17,73 +17,71 @@
 
 #include "test_macros.h"
 
-constexpr bool test()
-{
-    using SV = std::string_view;
-
-    const char* s = "abcde";
-    SV sv0;
-    SV sv1 {s + 1, 1};
-    SV sv2 {s + 1, 2};
-    SV sv3 {s + 1, 3};
-    SV sv4 {s + 1, 4};
-    SV sv5 {s    , 5};
-    SV svNot  {"xyz", 3};
-    SV svNot2 {"bd" , 2};
-    SV svNot3 {"dcb", 3};
-
-    ASSERT_NOEXCEPT(sv0.contains(sv0));
-
-    assert( sv0.contains(sv0));
-    assert(!sv0.contains(sv1));
-
-    assert( sv1.contains(sv0));
-    assert( sv1.contains(sv1));
-    assert(!sv1.contains(sv2));
-    assert(!sv1.contains(sv3));
-    assert(!sv1.contains(sv4));
-    assert(!sv1.contains(sv5));
-    assert(!sv1.contains(svNot));
-    assert(!sv1.contains(svNot2));
-    assert(!sv1.contains(svNot3));
-
-    assert( sv3.contains(sv0));
-    assert( sv3.contains(sv1));
-    assert( sv3.contains(sv2));
-    assert( sv3.contains(sv3));
-    assert(!sv3.contains(sv4));
-    assert(!sv3.contains(sv5));
-    assert(!sv3.contains(svNot));
-    assert(!sv3.contains(svNot2));
-    assert(!sv3.contains(svNot3));
-
-    assert( sv5.contains(sv0));
-    assert( sv5.contains(sv1));
-    assert( sv5.contains(sv2));
-    assert( sv5.contains(sv3));
-    assert( sv5.contains(sv4));
-    assert( sv5.contains(sv5));
-    assert(!sv5.contains(svNot));
-    assert(!sv5.contains(svNot2));
-    assert(!sv5.contains(svNot3));
-
-    assert( svNot.contains(sv0));
-    assert(!svNot.contains(sv1));
-    assert(!svNot.contains(sv2));
-    assert(!svNot.contains(sv3));
-    assert(!svNot.contains(sv4));
-    assert(!svNot.contains(sv5));
-    assert( svNot.contains(svNot));
-    assert(!svNot.contains(svNot2));
-    assert(!svNot.contains(svNot3));
-
-    return true;
+constexpr bool test() {
+  using SV = std::string_view;
+
+  const char* s = "abcde";
+  SV sv0;
+  SV sv1{s + 1, 1};
+  SV sv2{s + 1, 2};
+  SV sv3{s + 1, 3};
+  SV sv4{s + 1, 4};
+  SV sv5{s, 5};
+  SV svNot{"xyz", 3};
+  SV svNot2{"bd", 2};
+  SV svNot3{"dcb", 3};
+
+  ASSERT_NOEXCEPT(sv0.contains(sv0));
+
+  assert(sv0.contains(sv0));
+  assert(!sv0.contains(sv1));
+
+  assert(sv1.contains(sv0));
+  assert(sv1.contains(sv1));
+  assert(!sv1.contains(sv2));
+  assert(!sv1.contains(sv3));
+  assert(!sv1.contains(sv4));
+  assert(!sv1.contains(sv5));
+  assert(!sv1.contains(svNot));
+  assert(!sv1.contains(svNot2));
+  assert(!sv1.contains(svNot3));
+
+  assert(sv3.contains(sv0));
+  assert(sv3.contains(sv1));
+  assert(sv3.contains(sv2));
+  assert(sv3.contains(sv3));
+  assert(!sv3.contains(sv4));
+  assert(!sv3.contains(sv5));
+  assert(!sv3.contains(svNot));
+  assert(!sv3.contains(svNot2));
+  assert(!sv3.contains(svNot3));
+
+  assert(sv5.contains(sv0));
+  assert(sv5.contains(sv1));
+  assert(sv5.contains(sv2));
+  assert(sv5.contains(sv3));
+  assert(sv5.contains(sv4));
+  assert(sv5.contains(sv5));
+  assert(!sv5.contains(svNot));
+  assert(!sv5.contains(svNot2));
+  assert(!sv5.contains(svNot3));
+
+  assert(svNot.contains(sv0));
+  assert(!svNot.contains(sv1));
+  assert(!svNot.contains(sv2));
+  assert(!svNot.contains(sv3));
+  assert(!svNot.contains(sv4));
+  assert(!svNot.contains(sv5));
+  assert(svNot.contains(svNot));
+  assert(!svNot.contains(svNot2));
+  assert(!svNot.contains(svNot3));
+
+  return true;
 }
 
-int main(int, char**)
-{
-    test();
-    static_assert(test());
+int main(int, char**) {
+  test();
+  static_assert(test());
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/string.view.template/ends_with.char.pass.cpp b/libcxx/test/std/strings/string.view/string.view.template/ends_with.char.pass.cpp
index d1e949340da71a6..f1396714c0fd6ee 100644
--- a/libcxx/test/std/strings/string.view/string.view.template/ends_with.char.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.template/ends_with.char.pass.cpp
@@ -18,31 +18,30 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view SV;
-    SV  sv1 {};
-    SV  sv2 { "abcde", 5 };
+    SV sv1{};
+    SV sv2{"abcde", 5};
 
     ASSERT_NOEXCEPT(sv1.ends_with('e'));
 
-    assert (!sv1.ends_with('e'));
-    assert (!sv1.ends_with('x'));
-    assert ( sv2.ends_with('e'));
-    assert (!sv2.ends_with('x'));
-    }
+    assert(!sv1.ends_with('e'));
+    assert(!sv1.ends_with('x'));
+    assert(sv2.ends_with('e'));
+    assert(!sv2.ends_with('x'));
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1 {};
-    constexpr SV  sv2 { "abcde", 5 };
-    static_assert (!sv1.ends_with('e'), "" );
-    static_assert (!sv1.ends_with('x'), "" );
-    static_assert ( sv2.ends_with('e'), "" );
-    static_assert (!sv2.ends_with('x'), "" );
-    }
+    constexpr SV sv1{};
+    constexpr SV sv2{"abcde", 5};
+    static_assert(!sv1.ends_with('e'), "");
+    static_assert(!sv1.ends_with('x'), "");
+    static_assert(sv2.ends_with('e'), "");
+    static_assert(!sv2.ends_with('x'), "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.template/ends_with.ptr.pass.cpp b/libcxx/test/std/strings/string.view/string.view.template/ends_with.ptr.pass.cpp
index 0fea0ea6f5cb311..27897d01694177b 100644
--- a/libcxx/test/std/strings/string.view/string.view.template/ends_with.ptr.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.template/ends_with.ptr.pass.cpp
@@ -18,82 +18,81 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view SV;
-    const char *s = "abcde";
-    SV  sv0 {};
-    SV  sv1 { s + 4, 1 };
-    SV  sv2 { s + 3, 2 };
-    SV  svNot {"def", 3 };
+    const char* s = "abcde";
+    SV sv0{};
+    SV sv1{s + 4, 1};
+    SV sv2{s + 3, 2};
+    SV svNot{"def", 3};
 
     LIBCPP_ASSERT_NOEXCEPT(sv0.ends_with(""));
 
-    assert ( sv0.ends_with(""));
-    assert (!sv0.ends_with("e"));
-
-    assert ( sv1.ends_with(""));
-    assert ( sv1.ends_with("e"));
-    assert (!sv1.ends_with("de"));
-    assert (!sv1.ends_with("cde"));
-    assert (!sv1.ends_with("bcde"));
-    assert (!sv1.ends_with("abcde"));
-    assert (!sv1.ends_with("def"));
-
-    assert ( sv2.ends_with(""));
-    assert ( sv2.ends_with("e"));
-    assert ( sv2.ends_with("de"));
-    assert (!sv2.ends_with("cde"));
-    assert (!sv2.ends_with("bcde"));
-    assert (!sv2.ends_with("abcde"));
-    assert (!sv2.ends_with("def"));
-
-    assert ( svNot.ends_with(""));
-    assert (!svNot.ends_with("e"));
-    assert (!svNot.ends_with("de"));
-    assert (!svNot.ends_with("cde"));
-    assert (!svNot.ends_with("bcde"));
-    assert (!svNot.ends_with("abcde"));
-    assert ( svNot.ends_with("def"));
-    }
+    assert(sv0.ends_with(""));
+    assert(!sv0.ends_with("e"));
+
+    assert(sv1.ends_with(""));
+    assert(sv1.ends_with("e"));
+    assert(!sv1.ends_with("de"));
+    assert(!sv1.ends_with("cde"));
+    assert(!sv1.ends_with("bcde"));
+    assert(!sv1.ends_with("abcde"));
+    assert(!sv1.ends_with("def"));
+
+    assert(sv2.ends_with(""));
+    assert(sv2.ends_with("e"));
+    assert(sv2.ends_with("de"));
+    assert(!sv2.ends_with("cde"));
+    assert(!sv2.ends_with("bcde"));
+    assert(!sv2.ends_with("abcde"));
+    assert(!sv2.ends_with("def"));
+
+    assert(svNot.ends_with(""));
+    assert(!svNot.ends_with("e"));
+    assert(!svNot.ends_with("de"));
+    assert(!svNot.ends_with("cde"));
+    assert(!svNot.ends_with("bcde"));
+    assert(!svNot.ends_with("abcde"));
+    assert(svNot.ends_with("def"));
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr const char *s = "abcde";
-    constexpr SV  sv0 {};
-    constexpr SV  sv1 { s + 4, 1 };
-    constexpr SV  sv2 { s + 3, 2 };
-    constexpr SV  svNot {"def", 3 };
-
-    static_assert ( sv0.ends_with(""), "" );
-    static_assert (!sv0.ends_with("e"), "" );
-
-    static_assert ( sv1.ends_with(""), "" );
-    static_assert ( sv1.ends_with("e"), "" );
-    static_assert (!sv1.ends_with("de"), "" );
-    static_assert (!sv1.ends_with("cde"), "" );
-    static_assert (!sv1.ends_with("bcde"), "" );
-    static_assert (!sv1.ends_with("abcde"), "" );
-    static_assert (!sv1.ends_with("def"), "" );
-
-    static_assert ( sv2.ends_with(""), "" );
-    static_assert ( sv2.ends_with("e"), "" );
-    static_assert ( sv2.ends_with("de"), "" );
-    static_assert (!sv2.ends_with("cde"), "" );
-    static_assert (!sv2.ends_with("bcde"), "" );
-    static_assert (!sv2.ends_with("abcde"), "" );
-    static_assert (!sv2.ends_with("def"), "" );
-
-    static_assert ( svNot.ends_with(""), "" );
-    static_assert (!svNot.ends_with("e"), "" );
-    static_assert (!svNot.ends_with("de"), "" );
-    static_assert (!svNot.ends_with("cde"), "" );
-    static_assert (!svNot.ends_with("bcde"), "" );
-    static_assert (!svNot.ends_with("abcde"), "" );
-    static_assert ( svNot.ends_with("def"), "" );
-    }
+    constexpr const char* s = "abcde";
+    constexpr SV sv0{};
+    constexpr SV sv1{s + 4, 1};
+    constexpr SV sv2{s + 3, 2};
+    constexpr SV svNot{"def", 3};
+
+    static_assert(sv0.ends_with(""), "");
+    static_assert(!sv0.ends_with("e"), "");
+
+    static_assert(sv1.ends_with(""), "");
+    static_assert(sv1.ends_with("e"), "");
+    static_assert(!sv1.ends_with("de"), "");
+    static_assert(!sv1.ends_with("cde"), "");
+    static_assert(!sv1.ends_with("bcde"), "");
+    static_assert(!sv1.ends_with("abcde"), "");
+    static_assert(!sv1.ends_with("def"), "");
+
+    static_assert(sv2.ends_with(""), "");
+    static_assert(sv2.ends_with("e"), "");
+    static_assert(sv2.ends_with("de"), "");
+    static_assert(!sv2.ends_with("cde"), "");
+    static_assert(!sv2.ends_with("bcde"), "");
+    static_assert(!sv2.ends_with("abcde"), "");
+    static_assert(!sv2.ends_with("def"), "");
+
+    static_assert(svNot.ends_with(""), "");
+    static_assert(!svNot.ends_with("e"), "");
+    static_assert(!svNot.ends_with("de"), "");
+    static_assert(!svNot.ends_with("cde"), "");
+    static_assert(!svNot.ends_with("bcde"), "");
+    static_assert(!svNot.ends_with("abcde"), "");
+    static_assert(svNot.ends_with("def"), "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.template/ends_with.string_view.pass.cpp b/libcxx/test/std/strings/string.view/string.view.template/ends_with.string_view.pass.cpp
index 347ba7b9fd89686..82c73206af806f2 100644
--- a/libcxx/test/std/strings/string.view/string.view.template/ends_with.string_view.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.template/ends_with.string_view.pass.cpp
@@ -18,88 +18,87 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view SV;
-    const char *s = "abcde";
-    SV  sv0;
-    SV  sv1 { s + 4, 1 };
-    SV  sv2 { s + 3, 2 };
-    SV  sv3 { s + 2, 3 };
-    SV  sv4 { s + 1, 4 };
-    SV  sv5 { s    , 5 };
-    SV  svNot {"def", 3 };
+    const char* s = "abcde";
+    SV sv0;
+    SV sv1{s + 4, 1};
+    SV sv2{s + 3, 2};
+    SV sv3{s + 2, 3};
+    SV sv4{s + 1, 4};
+    SV sv5{s, 5};
+    SV svNot{"def", 3};
 
     ASSERT_NOEXCEPT(sv0.ends_with(sv0));
 
-    assert ( sv0.ends_with(sv0));
-    assert (!sv0.ends_with(sv1));
-
-    assert ( sv1.ends_with(sv0));
-    assert ( sv1.ends_with(sv1));
-    assert (!sv1.ends_with(sv2));
-    assert (!sv1.ends_with(sv3));
-    assert (!sv1.ends_with(sv4));
-    assert (!sv1.ends_with(sv5));
-    assert (!sv1.ends_with(svNot));
-
-    assert ( sv2.ends_with(sv0));
-    assert ( sv2.ends_with(sv1));
-    assert ( sv2.ends_with(sv2));
-    assert (!sv2.ends_with(sv3));
-    assert (!sv2.ends_with(sv4));
-    assert (!sv2.ends_with(sv5));
-    assert (!sv2.ends_with(svNot));
-
-    assert ( svNot.ends_with(sv0));
-    assert (!svNot.ends_with(sv1));
-    assert (!svNot.ends_with(sv2));
-    assert (!svNot.ends_with(sv3));
-    assert (!svNot.ends_with(sv4));
-    assert (!svNot.ends_with(sv5));
-    assert ( svNot.ends_with(svNot));
-    }
+    assert(sv0.ends_with(sv0));
+    assert(!sv0.ends_with(sv1));
+
+    assert(sv1.ends_with(sv0));
+    assert(sv1.ends_with(sv1));
+    assert(!sv1.ends_with(sv2));
+    assert(!sv1.ends_with(sv3));
+    assert(!sv1.ends_with(sv4));
+    assert(!sv1.ends_with(sv5));
+    assert(!sv1.ends_with(svNot));
+
+    assert(sv2.ends_with(sv0));
+    assert(sv2.ends_with(sv1));
+    assert(sv2.ends_with(sv2));
+    assert(!sv2.ends_with(sv3));
+    assert(!sv2.ends_with(sv4));
+    assert(!sv2.ends_with(sv5));
+    assert(!sv2.ends_with(svNot));
+
+    assert(svNot.ends_with(sv0));
+    assert(!svNot.ends_with(sv1));
+    assert(!svNot.ends_with(sv2));
+    assert(!svNot.ends_with(sv3));
+    assert(!svNot.ends_with(sv4));
+    assert(!svNot.ends_with(sv5));
+    assert(svNot.ends_with(svNot));
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr const char *s = "abcde";
-    constexpr SV  sv0 {};
-    constexpr SV  sv1 { s + 4, 1 };
-    constexpr SV  sv2 { s + 3, 2 };
-    constexpr SV  sv3 { s + 2, 3 };
-    constexpr SV  sv4 { s + 1, 4 };
-    constexpr SV  sv5 { s,     5 };
-    constexpr SV  svNot {"def", 3 };
-
-    static_assert ( sv0.ends_with(sv0), "" );
-    static_assert (!sv0.ends_with(sv1), "" );
-
-    static_assert ( sv1.ends_with(sv0), "" );
-    static_assert ( sv1.ends_with(sv1), "" );
-    static_assert (!sv1.ends_with(sv2), "" );
-    static_assert (!sv1.ends_with(sv3), "" );
-    static_assert (!sv1.ends_with(sv4), "" );
-    static_assert (!sv1.ends_with(sv5), "" );
-    static_assert (!sv1.ends_with(svNot), "" );
-
-    static_assert ( sv2.ends_with(sv0), "" );
-    static_assert ( sv2.ends_with(sv1), "" );
-    static_assert ( sv2.ends_with(sv2), "" );
-    static_assert (!sv2.ends_with(sv3), "" );
-    static_assert (!sv2.ends_with(sv4), "" );
-    static_assert (!sv2.ends_with(sv5), "" );
-    static_assert (!sv2.ends_with(svNot), "" );
-
-    static_assert ( svNot.ends_with(sv0), "" );
-    static_assert (!svNot.ends_with(sv1), "" );
-    static_assert (!svNot.ends_with(sv2), "" );
-    static_assert (!svNot.ends_with(sv3), "" );
-    static_assert (!svNot.ends_with(sv4), "" );
-    static_assert (!svNot.ends_with(sv5), "" );
-    static_assert ( svNot.ends_with(svNot), "" );
-    }
+    constexpr const char* s = "abcde";
+    constexpr SV sv0{};
+    constexpr SV sv1{s + 4, 1};
+    constexpr SV sv2{s + 3, 2};
+    constexpr SV sv3{s + 2, 3};
+    constexpr SV sv4{s + 1, 4};
+    constexpr SV sv5{s, 5};
+    constexpr SV svNot{"def", 3};
+
+    static_assert(sv0.ends_with(sv0), "");
+    static_assert(!sv0.ends_with(sv1), "");
+
+    static_assert(sv1.ends_with(sv0), "");
+    static_assert(sv1.ends_with(sv1), "");
+    static_assert(!sv1.ends_with(sv2), "");
+    static_assert(!sv1.ends_with(sv3), "");
+    static_assert(!sv1.ends_with(sv4), "");
+    static_assert(!sv1.ends_with(sv5), "");
+    static_assert(!sv1.ends_with(svNot), "");
+
+    static_assert(sv2.ends_with(sv0), "");
+    static_assert(sv2.ends_with(sv1), "");
+    static_assert(sv2.ends_with(sv2), "");
+    static_assert(!sv2.ends_with(sv3), "");
+    static_assert(!sv2.ends_with(sv4), "");
+    static_assert(!sv2.ends_with(sv5), "");
+    static_assert(!sv2.ends_with(svNot), "");
+
+    static_assert(svNot.ends_with(sv0), "");
+    static_assert(!svNot.ends_with(sv1), "");
+    static_assert(!svNot.ends_with(sv2), "");
+    static_assert(!svNot.ends_with(sv3), "");
+    static_assert(!svNot.ends_with(sv4), "");
+    static_assert(!svNot.ends_with(sv5), "");
+    static_assert(svNot.ends_with(svNot), "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.template/starts_with.char.pass.cpp b/libcxx/test/std/strings/string.view/string.view.template/starts_with.char.pass.cpp
index 175580650f98296..0cffab6ca487740 100644
--- a/libcxx/test/std/strings/string.view/string.view.template/starts_with.char.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.template/starts_with.char.pass.cpp
@@ -18,31 +18,30 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view SV;
-    SV  sv1 {};
-    SV  sv2 { "abcde", 5 };
+    SV sv1{};
+    SV sv2{"abcde", 5};
 
     ASSERT_NOEXCEPT(sv1.starts_with('e'));
 
-    assert (!sv1.starts_with('a'));
-    assert (!sv1.starts_with('x'));
-    assert ( sv2.starts_with('a'));
-    assert (!sv2.starts_with('x'));
-    }
+    assert(!sv1.starts_with('a'));
+    assert(!sv1.starts_with('x'));
+    assert(sv2.starts_with('a'));
+    assert(!sv2.starts_with('x'));
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr SV  sv1 {};
-    constexpr SV  sv2 { "abcde", 5 };
-    static_assert (!sv1.starts_with('a'), "" );
-    static_assert (!sv1.starts_with('x'), "" );
-    static_assert ( sv2.starts_with('a'), "" );
-    static_assert (!sv2.starts_with('x'), "" );
-    }
+    constexpr SV sv1{};
+    constexpr SV sv2{"abcde", 5};
+    static_assert(!sv1.starts_with('a'), "");
+    static_assert(!sv1.starts_with('x'), "");
+    static_assert(sv2.starts_with('a'), "");
+    static_assert(!sv2.starts_with('x'), "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.template/starts_with.ptr.pass.cpp b/libcxx/test/std/strings/string.view/string.view.template/starts_with.ptr.pass.cpp
index 464606fda547a35..94582ad93efce55 100644
--- a/libcxx/test/std/strings/string.view/string.view.template/starts_with.ptr.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.template/starts_with.ptr.pass.cpp
@@ -18,82 +18,81 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view SV;
-    const char *s = "abcde";
-    SV  sv0 {};
-    SV  sv1 { s, 1 };
-    SV  sv2 { s, 2 };
-    SV  svNot {"def", 3 };
+    const char* s = "abcde";
+    SV sv0{};
+    SV sv1{s, 1};
+    SV sv2{s, 2};
+    SV svNot{"def", 3};
 
     LIBCPP_ASSERT_NOEXCEPT(sv0.starts_with(""));
 
-    assert ( sv0.starts_with(""));
-    assert (!sv0.starts_with("a"));
-
-    assert ( sv1.starts_with(""));
-    assert ( sv1.starts_with("a"));
-    assert (!sv1.starts_with("ab"));
-    assert (!sv1.starts_with("abc"));
-    assert (!sv1.starts_with("abcd"));
-    assert (!sv1.starts_with("abcde"));
-    assert (!sv1.starts_with("def"));
-
-    assert ( sv2.starts_with(s + 5));
-    assert ( sv2.starts_with("a"));
-    assert ( sv2.starts_with("ab"));
-    assert (!sv2.starts_with("abc"));
-    assert (!sv2.starts_with("abcd"));
-    assert (!sv2.starts_with("abcde"));
-    assert (!sv2.starts_with("def"));
-
-    assert ( svNot.starts_with(""));
-    assert (!svNot.starts_with("a"));
-    assert (!svNot.starts_with("ab"));
-    assert (!svNot.starts_with("abc"));
-    assert (!svNot.starts_with("abcd"));
-    assert (!svNot.starts_with("abcde"));
-    assert ( svNot.starts_with("def"));
-    }
+    assert(sv0.starts_with(""));
+    assert(!sv0.starts_with("a"));
+
+    assert(sv1.starts_with(""));
+    assert(sv1.starts_with("a"));
+    assert(!sv1.starts_with("ab"));
+    assert(!sv1.starts_with("abc"));
+    assert(!sv1.starts_with("abcd"));
+    assert(!sv1.starts_with("abcde"));
+    assert(!sv1.starts_with("def"));
+
+    assert(sv2.starts_with(s + 5));
+    assert(sv2.starts_with("a"));
+    assert(sv2.starts_with("ab"));
+    assert(!sv2.starts_with("abc"));
+    assert(!sv2.starts_with("abcd"));
+    assert(!sv2.starts_with("abcde"));
+    assert(!sv2.starts_with("def"));
+
+    assert(svNot.starts_with(""));
+    assert(!svNot.starts_with("a"));
+    assert(!svNot.starts_with("ab"));
+    assert(!svNot.starts_with("abc"));
+    assert(!svNot.starts_with("abcd"));
+    assert(!svNot.starts_with("abcde"));
+    assert(svNot.starts_with("def"));
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr const char *s = "abcde";
-    constexpr SV  sv0 {};
-    constexpr SV  sv1 { s, 1 };
-    constexpr SV  sv2 { s, 2 };
-    constexpr SV  svNot {"def", 3 };
-
-    static_assert ( sv0.starts_with(""), "" );
-    static_assert (!sv0.starts_with("a"), "" );
-
-    static_assert ( sv1.starts_with(""), "" );
-    static_assert ( sv1.starts_with("a"), "" );
-    static_assert (!sv1.starts_with("ab"), "" );
-    static_assert (!sv1.starts_with("abc"), "" );
-    static_assert (!sv1.starts_with("abcd"), "" );
-    static_assert (!sv1.starts_with("abcde"), "" );
-    static_assert (!sv1.starts_with("def"), "" );
-
-    static_assert ( sv2.starts_with(s + 5), "" );
-    static_assert ( sv2.starts_with("a"), "" );
-    static_assert ( sv2.starts_with("ab"), "" );
-    static_assert (!sv2.starts_with("abc"), "" );
-    static_assert (!sv2.starts_with("abcd"), "" );
-    static_assert (!sv2.starts_with("abcde"), "" );
-    static_assert (!sv2.starts_with("def"), "" );
-
-    static_assert ( svNot.starts_with(""), "" );
-    static_assert (!svNot.starts_with("a"), "" );
-    static_assert (!svNot.starts_with("ab"), "" );
-    static_assert (!svNot.starts_with("abc"), "" );
-    static_assert (!svNot.starts_with("abcd"), "" );
-    static_assert (!svNot.starts_with("abcde"), "" );
-    static_assert ( svNot.starts_with("def"), "" );
-    }
+    constexpr const char* s = "abcde";
+    constexpr SV sv0{};
+    constexpr SV sv1{s, 1};
+    constexpr SV sv2{s, 2};
+    constexpr SV svNot{"def", 3};
+
+    static_assert(sv0.starts_with(""), "");
+    static_assert(!sv0.starts_with("a"), "");
+
+    static_assert(sv1.starts_with(""), "");
+    static_assert(sv1.starts_with("a"), "");
+    static_assert(!sv1.starts_with("ab"), "");
+    static_assert(!sv1.starts_with("abc"), "");
+    static_assert(!sv1.starts_with("abcd"), "");
+    static_assert(!sv1.starts_with("abcde"), "");
+    static_assert(!sv1.starts_with("def"), "");
+
+    static_assert(sv2.starts_with(s + 5), "");
+    static_assert(sv2.starts_with("a"), "");
+    static_assert(sv2.starts_with("ab"), "");
+    static_assert(!sv2.starts_with("abc"), "");
+    static_assert(!sv2.starts_with("abcd"), "");
+    static_assert(!sv2.starts_with("abcde"), "");
+    static_assert(!sv2.starts_with("def"), "");
+
+    static_assert(svNot.starts_with(""), "");
+    static_assert(!svNot.starts_with("a"), "");
+    static_assert(!svNot.starts_with("ab"), "");
+    static_assert(!svNot.starts_with("abc"), "");
+    static_assert(!svNot.starts_with("abcd"), "");
+    static_assert(!svNot.starts_with("abcde"), "");
+    static_assert(svNot.starts_with("def"), "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string.view.template/starts_with.string_view.pass.cpp b/libcxx/test/std/strings/string.view/string.view.template/starts_with.string_view.pass.cpp
index ebeacaadf2c61c1..dcc42bb110b1131 100644
--- a/libcxx/test/std/strings/string.view/string.view.template/starts_with.string_view.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.template/starts_with.string_view.pass.cpp
@@ -18,88 +18,87 @@
 #include "test_macros.h"
 #include "constexpr_char_traits.h"
 
-int main(int, char**)
-{
-    {
+int main(int, char**) {
+  {
     typedef std::string_view SV;
-    const char *s = "abcde";
-    SV  sv0 {};
-    SV  sv1 { s, 1 };
-    SV  sv2 { s, 2 };
-    SV  sv3 { s, 3 };
-    SV  sv4 { s, 4 };
-    SV  sv5 { s, 5 };
-    SV  svNot {"def", 3 };
+    const char* s = "abcde";
+    SV sv0{};
+    SV sv1{s, 1};
+    SV sv2{s, 2};
+    SV sv3{s, 3};
+    SV sv4{s, 4};
+    SV sv5{s, 5};
+    SV svNot{"def", 3};
 
     ASSERT_NOEXCEPT(sv0.starts_with(sv0));
 
-    assert ( sv0.starts_with(sv0));
-    assert (!sv0.starts_with(sv1));
-
-    assert ( sv1.starts_with(sv0));
-    assert ( sv1.starts_with(sv1));
-    assert (!sv1.starts_with(sv2));
-    assert (!sv1.starts_with(sv3));
-    assert (!sv1.starts_with(sv4));
-    assert (!sv1.starts_with(sv5));
-    assert (!sv1.starts_with(svNot));
-
-    assert ( sv2.starts_with(sv0));
-    assert ( sv2.starts_with(sv1));
-    assert ( sv2.starts_with(sv2));
-    assert (!sv2.starts_with(sv3));
-    assert (!sv2.starts_with(sv4));
-    assert (!sv2.starts_with(sv5));
-    assert (!sv2.starts_with(svNot));
-
-    assert ( svNot.starts_with(sv0));
-    assert (!svNot.starts_with(sv1));
-    assert (!svNot.starts_with(sv2));
-    assert (!svNot.starts_with(sv3));
-    assert (!svNot.starts_with(sv4));
-    assert (!svNot.starts_with(sv5));
-    assert ( svNot.starts_with(svNot));
-    }
+    assert(sv0.starts_with(sv0));
+    assert(!sv0.starts_with(sv1));
+
+    assert(sv1.starts_with(sv0));
+    assert(sv1.starts_with(sv1));
+    assert(!sv1.starts_with(sv2));
+    assert(!sv1.starts_with(sv3));
+    assert(!sv1.starts_with(sv4));
+    assert(!sv1.starts_with(sv5));
+    assert(!sv1.starts_with(svNot));
+
+    assert(sv2.starts_with(sv0));
+    assert(sv2.starts_with(sv1));
+    assert(sv2.starts_with(sv2));
+    assert(!sv2.starts_with(sv3));
+    assert(!sv2.starts_with(sv4));
+    assert(!sv2.starts_with(sv5));
+    assert(!sv2.starts_with(svNot));
+
+    assert(svNot.starts_with(sv0));
+    assert(!svNot.starts_with(sv1));
+    assert(!svNot.starts_with(sv2));
+    assert(!svNot.starts_with(sv3));
+    assert(!svNot.starts_with(sv4));
+    assert(!svNot.starts_with(sv5));
+    assert(svNot.starts_with(svNot));
+  }
 
 #if TEST_STD_VER > 11
-    {
+  {
     typedef std::basic_string_view<char, constexpr_char_traits<char>> SV;
-    constexpr const char *s = "abcde";
-    constexpr SV  sv0 {};
-    constexpr SV  sv1 { s, 1 };
-    constexpr SV  sv2 { s, 2 };
-    constexpr SV  sv3 { s, 3 };
-    constexpr SV  sv4 { s, 4 };
-    constexpr SV  sv5 { s, 5 };
-    constexpr SV  svNot {"def", 3 };
-
-    static_assert ( sv0.starts_with(sv0), "" );
-    static_assert (!sv0.starts_with(sv1), "" );
-
-    static_assert ( sv1.starts_with(sv0), "" );
-    static_assert ( sv1.starts_with(sv1), "" );
-    static_assert (!sv1.starts_with(sv2), "" );
-    static_assert (!sv1.starts_with(sv3), "" );
-    static_assert (!sv1.starts_with(sv4), "" );
-    static_assert (!sv1.starts_with(sv5), "" );
-    static_assert (!sv1.starts_with(svNot), "" );
-
-    static_assert ( sv2.starts_with(sv0), "" );
-    static_assert ( sv2.starts_with(sv1), "" );
-    static_assert ( sv2.starts_with(sv2), "" );
-    static_assert (!sv2.starts_with(sv3), "" );
-    static_assert (!sv2.starts_with(sv4), "" );
-    static_assert (!sv2.starts_with(sv5), "" );
-    static_assert (!sv2.starts_with(svNot), "" );
-
-    static_assert ( svNot.starts_with(sv0), "" );
-    static_assert (!svNot.starts_with(sv1), "" );
-    static_assert (!svNot.starts_with(sv2), "" );
-    static_assert (!svNot.starts_with(sv3), "" );
-    static_assert (!svNot.starts_with(sv4), "" );
-    static_assert (!svNot.starts_with(sv5), "" );
-    static_assert ( svNot.starts_with(svNot), "" );
-    }
+    constexpr const char* s = "abcde";
+    constexpr SV sv0{};
+    constexpr SV sv1{s, 1};
+    constexpr SV sv2{s, 2};
+    constexpr SV sv3{s, 3};
+    constexpr SV sv4{s, 4};
+    constexpr SV sv5{s, 5};
+    constexpr SV svNot{"def", 3};
+
+    static_assert(sv0.starts_with(sv0), "");
+    static_assert(!sv0.starts_with(sv1), "");
+
+    static_assert(sv1.starts_with(sv0), "");
+    static_assert(sv1.starts_with(sv1), "");
+    static_assert(!sv1.starts_with(sv2), "");
+    static_assert(!sv1.starts_with(sv3), "");
+    static_assert(!sv1.starts_with(sv4), "");
+    static_assert(!sv1.starts_with(sv5), "");
+    static_assert(!sv1.starts_with(svNot), "");
+
+    static_assert(sv2.starts_with(sv0), "");
+    static_assert(sv2.starts_with(sv1), "");
+    static_assert(sv2.starts_with(sv2), "");
+    static_assert(!sv2.starts_with(sv3), "");
+    static_assert(!sv2.starts_with(sv4), "");
+    static_assert(!sv2.starts_with(sv5), "");
+    static_assert(!sv2.starts_with(svNot), "");
+
+    static_assert(svNot.starts_with(sv0), "");
+    static_assert(!svNot.starts_with(sv1), "");
+    static_assert(!svNot.starts_with(sv2), "");
+    static_assert(!svNot.starts_with(sv3), "");
+    static_assert(!svNot.starts_with(sv4), "");
+    static_assert(!svNot.starts_with(sv5), "");
+    static_assert(svNot.starts_with(svNot), "");
+  }
 #endif
 
   return 0;

diff  --git a/libcxx/test/std/strings/string.view/string_view.literals/literal.pass.cpp b/libcxx/test/std/strings/string.view/string_view.literals/literal.pass.cpp
index 74ae456e585b09e..9448756a5638b77 100644
--- a/libcxx/test/std/strings/string.view/string_view.literals/literal.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string_view.literals/literal.pass.cpp
@@ -16,81 +16,101 @@
 #include "test_macros.h"
 
 #ifndef TEST_HAS_NO_CHAR8_T
-    typedef std::u8string_view u8string_view;
+typedef std::u8string_view u8string_view;
 #else
-    typedef std::string_view   u8string_view;
+typedef std::string_view u8string_view;
 #endif
 
 int main(int, char**) {
-    {
-        using namespace std::literals::string_view_literals;
+  {
+    using namespace std::literals::string_view_literals;
 
-        ASSERT_SAME_TYPE(decltype(  "Hi"sv), std::string_view);
-        ASSERT_SAME_TYPE(decltype(u8"Hi"sv), u8string_view);
+    ASSERT_SAME_TYPE(decltype("Hi"sv), std::string_view);
+    ASSERT_SAME_TYPE(decltype(u8"Hi"sv), u8string_view);
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        ASSERT_SAME_TYPE(decltype( L"Hi"sv), std::wstring_view);
+    ASSERT_SAME_TYPE(decltype(L"Hi"sv), std::wstring_view);
 #endif
-        ASSERT_SAME_TYPE(decltype( u"Hi"sv), std::u16string_view);
-        ASSERT_SAME_TYPE(decltype( U"Hi"sv), std::u32string_view);
+    ASSERT_SAME_TYPE(decltype(u"Hi"sv), std::u16string_view);
+    ASSERT_SAME_TYPE(decltype(U"Hi"sv), std::u32string_view);
 
-        std::string_view foo;
+    std::string_view foo;
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        std::wstring_view Lfoo;
+    std::wstring_view Lfoo;
 #endif
-        u8string_view u8foo;
-        std::u16string_view ufoo;
-        std::u32string_view Ufoo;
+    u8string_view u8foo;
+    std::u16string_view ufoo;
+    std::u32string_view Ufoo;
 
-        foo  =    ""sv;     assert(  foo.size() == 0);
-        u8foo = u8""sv;     assert(u8foo.size() == 0);
+    foo = ""sv;
+    assert(foo.size() == 0);
+    u8foo = u8""sv;
+    assert(u8foo.size() == 0);
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        Lfoo  =  L""sv;     assert( Lfoo.size() == 0);
+    Lfoo = L""sv;
+    assert(Lfoo.size() == 0);
 #endif
-        ufoo  =  u""sv;     assert( ufoo.size() == 0);
-        Ufoo  =  U""sv;     assert( Ufoo.size() == 0);
+    ufoo = u""sv;
+    assert(ufoo.size() == 0);
+    Ufoo = U""sv;
+    assert(Ufoo.size() == 0);
 
-        foo   =   " "sv;    assert(  foo.size() == 1);
-        u8foo = u8" "sv;    assert(u8foo.size() == 1);
+    foo = " "sv;
+    assert(foo.size() == 1);
+    u8foo = u8" "sv;
+    assert(u8foo.size() == 1);
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        Lfoo  =  L" "sv;    assert( Lfoo.size() == 1);
+    Lfoo = L" "sv;
+    assert(Lfoo.size() == 1);
 #endif
-        ufoo  =  u" "sv;    assert( ufoo.size() == 1);
-        Ufoo  =  U" "sv;    assert( Ufoo.size() == 1);
+    ufoo = u" "sv;
+    assert(ufoo.size() == 1);
+    Ufoo = U" "sv;
+    assert(Ufoo.size() == 1);
 
-        foo   =   "ABC"sv;  assert(  foo ==   "ABC");   assert(  foo == std::string_view   (  "ABC"));
-        u8foo = u8"ABC"sv;  assert(u8foo == u8"ABC");   assert(u8foo == u8string_view      (u8"ABC"));
+    foo = "ABC"sv;
+    assert(foo == "ABC");
+    assert(foo == std::string_view("ABC"));
+    u8foo = u8"ABC"sv;
+    assert(u8foo == u8"ABC");
+    assert(u8foo == u8string_view(u8"ABC"));
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        Lfoo  =  L"ABC"sv;  assert( Lfoo ==  L"ABC");   assert( Lfoo == std::wstring_view  ( L"ABC"));
+    Lfoo = L"ABC"sv;
+    assert(Lfoo == L"ABC");
+    assert(Lfoo == std::wstring_view(L"ABC"));
 #endif
-        ufoo  =  u"ABC"sv;  assert( ufoo ==  u"ABC");   assert( ufoo == std::u16string_view( u"ABC"));
-        Ufoo  =  U"ABC"sv;  assert( Ufoo ==  U"ABC");   assert( Ufoo == std::u32string_view( U"ABC"));
+    ufoo = u"ABC"sv;
+    assert(ufoo == u"ABC");
+    assert(ufoo == std::u16string_view(u"ABC"));
+    Ufoo = U"ABC"sv;
+    assert(Ufoo == U"ABC");
+    assert(Ufoo == std::u32string_view(U"ABC"));
 
-        static_assert(  "ABC"sv.size() == 3, "");
-        static_assert(u8"ABC"sv.size() == 3, "");
+    static_assert("ABC"sv.size() == 3, "");
+    static_assert(u8"ABC"sv.size() == 3, "");
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        static_assert( L"ABC"sv.size() == 3, "");
+    static_assert(L"ABC"sv.size() == 3, "");
 #endif
-        static_assert( u"ABC"sv.size() == 3, "");
-        static_assert( U"ABC"sv.size() == 3, "");
+    static_assert(u"ABC"sv.size() == 3, "");
+    static_assert(U"ABC"sv.size() == 3, "");
 
-        ASSERT_NOEXCEPT(  "ABC"sv);
-        ASSERT_NOEXCEPT(u8"ABC"sv);
+    ASSERT_NOEXCEPT("ABC"sv);
+    ASSERT_NOEXCEPT(u8"ABC"sv);
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-        ASSERT_NOEXCEPT( L"ABC"sv);
+    ASSERT_NOEXCEPT(L"ABC"sv);
 #endif
-        ASSERT_NOEXCEPT( u"ABC"sv);
-        ASSERT_NOEXCEPT( U"ABC"sv);
-    }
-    {
-        using namespace std::literals;
-        std::string_view foo = ""sv;
-        assert(foo.length() == 0);
-    }
-    {
-        using namespace std;
-        std::string_view foo = ""sv;
-        assert(foo.length() == 0);
-    }
+    ASSERT_NOEXCEPT(u"ABC"sv);
+    ASSERT_NOEXCEPT(U"ABC"sv);
+  }
+  {
+    using namespace std::literals;
+    std::string_view foo = ""sv;
+    assert(foo.length() == 0);
+  }
+  {
+    using namespace std;
+    std::string_view foo = ""sv;
+    assert(foo.length() == 0);
+  }
 
-    return 0;
+  return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/traits_mismatch.compile.fail.cpp b/libcxx/test/std/strings/string.view/traits_mismatch.compile.fail.cpp
index 5075642cc50abdf..65acb81d22efd7e 100644
--- a/libcxx/test/std/strings/string.view/traits_mismatch.compile.fail.cpp
+++ b/libcxx/test/std/strings/string.view/traits_mismatch.compile.fail.cpp
@@ -13,9 +13,8 @@
 
 #include <string_view>
 
-int main(int, char**)
-{
-    std::basic_string_view<char, std::char_traits<wchar_t>> s;
+int main(int, char**) {
+  std::basic_string_view<char, std::char_traits<wchar_t>> s;
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/string.view/types.pass.cpp b/libcxx/test/std/strings/string.view/types.pass.cpp
index 25dc54d25740941..f978f1a83fccbee 100644
--- a/libcxx/test/std/strings/string.view/types.pass.cpp
+++ b/libcxx/test/std/strings/string.view/types.pass.cpp
@@ -39,47 +39,41 @@
 #include "test_macros.h"
 
 template <class Traits>
-void
-test()
-{
-    typedef std::basic_string_view<typename Traits::char_type, Traits> S;
+void test() {
+  typedef std::basic_string_view<typename Traits::char_type, Traits> S;
 
-    static_assert((std::is_same<typename S::traits_type,     Traits>::value), "");
-    static_assert((std::is_same<typename S::value_type,      typename Traits::char_type>::value), "");
-    static_assert((std::is_same<typename S::size_type,       std::size_t>::value), "");
-    static_assert((std::is_same<typename S::
diff erence_type, std::ptr
diff _t>::value), "");
-    static_assert((std::is_same<typename S::reference,             typename S::value_type&>::value), "");
-    static_assert((std::is_same<typename S::const_reference, const typename S::value_type&>::value), "");
-    static_assert((std::is_same<typename S::pointer,               typename S::value_type*>::value), "");
-    static_assert((std::is_same<typename S::const_pointer,   const typename S::value_type*>::value), "");
-    static_assert((std::is_same<
-        typename std::iterator_traits<typename S::iterator>::iterator_category,
-        std::random_access_iterator_tag>::value), "");
-    static_assert((std::is_same<
-        typename std::iterator_traits<typename S::const_iterator>::iterator_category,
-        std::random_access_iterator_tag>::value), "");
-    static_assert((std::is_same<
-        typename S::reverse_iterator,
-        std::reverse_iterator<typename S::iterator> >::value), "");
-    static_assert((std::is_same<
-        typename S::const_reverse_iterator,
-        std::reverse_iterator<typename S::const_iterator> >::value), "");
-    static_assert(S::npos == -1, "");
-    static_assert((std::is_same<typename S::iterator,         typename S::const_iterator>::value), "");
-    static_assert((std::is_same<typename S::reverse_iterator, typename S::const_reverse_iterator>::value), "");
+  static_assert((std::is_same<typename S::traits_type, Traits>::value), "");
+  static_assert((std::is_same<typename S::value_type, typename Traits::char_type>::value), "");
+  static_assert((std::is_same<typename S::size_type, std::size_t>::value), "");
+  static_assert((std::is_same<typename S::
diff erence_type, std::ptr
diff _t>::value), "");
+  static_assert((std::is_same<typename S::reference, typename S::value_type&>::value), "");
+  static_assert((std::is_same<typename S::const_reference, const typename S::value_type&>::value), "");
+  static_assert((std::is_same<typename S::pointer, typename S::value_type*>::value), "");
+  static_assert((std::is_same<typename S::const_pointer, const typename S::value_type*>::value), "");
+  static_assert((std::is_same< typename std::iterator_traits<typename S::iterator>::iterator_category,
+                               std::random_access_iterator_tag>::value),
+                "");
+  static_assert((std::is_same< typename std::iterator_traits<typename S::const_iterator>::iterator_category,
+                               std::random_access_iterator_tag>::value),
+                "");
+  static_assert((std::is_same< typename S::reverse_iterator, std::reverse_iterator<typename S::iterator> >::value), "");
+  static_assert(
+      (std::is_same< typename S::const_reverse_iterator, std::reverse_iterator<typename S::const_iterator> >::value),
+      "");
+  static_assert(S::npos == -1, "");
+  static_assert((std::is_same<typename S::iterator, typename S::const_iterator>::value), "");
+  static_assert((std::is_same<typename S::reverse_iterator, typename S::const_reverse_iterator>::value), "");
 }
 
-int main(int, char**)
-{
-    test<std::char_traits<char> >();
+int main(int, char**) {
+  test<std::char_traits<char> >();
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
-    test<std::char_traits<wchar_t> >();
+  test<std::char_traits<wchar_t> >();
 #endif
 #ifndef TEST_HAS_NO_CHAR8_T
-    test<std::char_traits<char8_t> >();
+  test<std::char_traits<char8_t> >();
 #endif
-    static_assert((std::is_same<std::basic_string_view<char>::traits_type,
-                                std::char_traits<char> >::value), "");
+  static_assert((std::is_same<std::basic_string_view<char>::traits_type, std::char_traits<char> >::value), "");
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/strings.erasure/erase.pass.cpp b/libcxx/test/std/strings/strings.erasure/erase.pass.cpp
index ed7dc3cc5fbea30..35139dd6ad4076c 100644
--- a/libcxx/test/std/strings/strings.erasure/erase.pass.cpp
+++ b/libcxx/test/std/strings/strings.erasure/erase.pass.cpp
@@ -30,9 +30,7 @@ void test0(S s, U val, S expected, std::size_t expected_erased_count) {
 }
 
 template <class S>
-void test()
-{
-
+void test() {
   test0(S(""), 'a', S(""), 0);
 
   test0(S("a"), 'a', S(""), 1);
@@ -66,11 +64,10 @@ void test()
   test0(S("aba"), opt('c'), S("aba"), 0);
 }
 
-int main(int, char**)
-{
-    test<std::string>();
-    test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>> ();
-    test<std::basic_string<char, std::char_traits<char>, test_allocator<char>>> ();
+int main(int, char**) {
+  test<std::string>();
+  test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();
+  test<std::basic_string<char, std::char_traits<char>, test_allocator<char>>>();
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/strings.erasure/erase_if.pass.cpp b/libcxx/test/std/strings/strings.erasure/erase_if.pass.cpp
index b098f88208de864..5bedd394ee57811 100644
--- a/libcxx/test/std/strings/strings.erasure/erase_if.pass.cpp
+++ b/libcxx/test/std/strings/strings.erasure/erase_if.pass.cpp
@@ -29,49 +29,47 @@ void test0(S s, Pred p, S expected, std::size_t expected_erased_count) {
 }
 
 template <typename S>
-void test()
-{
-    auto isA = [](auto ch) { return ch == 'a';};
-    auto isB = [](auto ch) { return ch == 'b';};
-    auto isC = [](auto ch) { return ch == 'c';};
-    auto isD = [](auto ch) { return ch == 'd';};
-    auto True  = [](auto) { return true; };
-    auto False = [](auto) { return false; };
+void test() {
+  auto isA   = [](auto ch) { return ch == 'a'; };
+  auto isB   = [](auto ch) { return ch == 'b'; };
+  auto isC   = [](auto ch) { return ch == 'c'; };
+  auto isD   = [](auto ch) { return ch == 'd'; };
+  auto True  = [](auto) { return true; };
+  auto False = [](auto) { return false; };
 
-    test0(S(""), isA, S(""), 0);
+  test0(S(""), isA, S(""), 0);
 
-    test0(S("a"), isA, S(""), 1);
-    test0(S("a"), isB, S("a"), 0);
+  test0(S("a"), isA, S(""), 1);
+  test0(S("a"), isB, S("a"), 0);
 
-    test0(S("ab"), isA, S("b"), 1);
-    test0(S("ab"), isB, S("a"), 1);
-    test0(S("ab"), isC, S("ab"), 0);
-    test0(S("aa"), isA, S(""), 2);
-    test0(S("aa"), isC, S("aa"), 0);
+  test0(S("ab"), isA, S("b"), 1);
+  test0(S("ab"), isB, S("a"), 1);
+  test0(S("ab"), isC, S("ab"), 0);
+  test0(S("aa"), isA, S(""), 2);
+  test0(S("aa"), isC, S("aa"), 0);
 
-    test0(S("abc"), isA, S("bc"), 1);
-    test0(S("abc"), isB, S("ac"), 1);
-    test0(S("abc"), isC, S("ab"), 1);
-    test0(S("abc"), isD, S("abc"), 0);
+  test0(S("abc"), isA, S("bc"), 1);
+  test0(S("abc"), isB, S("ac"), 1);
+  test0(S("abc"), isC, S("ab"), 1);
+  test0(S("abc"), isD, S("abc"), 0);
 
-    test0(S("aab"), isA, S("b"), 2);
-    test0(S("aab"), isB, S("aa"), 1);
-    test0(S("aab"), isC, S("aab"), 0);
-    test0(S("abb"), isA, S("bb"), 1);
-    test0(S("abb"), isB, S("a"), 2);
-    test0(S("abb"), isC, S("abb"), 0);
-    test0(S("aaa"), isA, S(""), 3);
-    test0(S("aaa"), isB, S("aaa"), 0);
+  test0(S("aab"), isA, S("b"), 2);
+  test0(S("aab"), isB, S("aa"), 1);
+  test0(S("aab"), isC, S("aab"), 0);
+  test0(S("abb"), isA, S("bb"), 1);
+  test0(S("abb"), isB, S("a"), 2);
+  test0(S("abb"), isC, S("abb"), 0);
+  test0(S("aaa"), isA, S(""), 3);
+  test0(S("aaa"), isB, S("aaa"), 0);
 
-    test0(S("aba"), False, S("aba"), 0);
-    test0(S("aba"), True, S(""), 3);
+  test0(S("aba"), False, S("aba"), 0);
+  test0(S("aba"), True, S(""), 3);
 }
 
-int main(int, char**)
-{
-    test<std::string>();
-    test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>> ();
-    test<std::basic_string<char, std::char_traits<char>, test_allocator<char>>> ();
+int main(int, char**) {
+  test<std::string>();
+  test<std::basic_string<char, std::char_traits<char>, min_allocator<char>>>();
+  test<std::basic_string<char, std::char_traits<char>, test_allocator<char>>>();
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/strings.general/nothing_to_do.pass.cpp b/libcxx/test/std/strings/strings.general/nothing_to_do.pass.cpp
index 1f764da05d6b5f5..3e0d2a6570f42de 100644
--- a/libcxx/test/std/strings/strings.general/nothing_to_do.pass.cpp
+++ b/libcxx/test/std/strings/strings.general/nothing_to_do.pass.cpp
@@ -6,8 +6,4 @@
 //
 //===----------------------------------------------------------------------===//
 
-int main(int, char**)
-{
-
-  return 0;
-}
+int main(int, char**) { return 0; }


        


More information about the libcxx-commits mailing list